IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement 2D, 3D et Jeux Discussion :

Gestion de la résolution


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre éclairé Avatar de Julien Bodin
    Homme Profil pro
    Devops
    Inscrit en
    Février 2009
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Devops
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 474
    Points : 843
    Points
    843
    Par défaut Gestion de la résolution
    Bonjour à tous !

    Je suis en train de développer un petit jeu (amateur) pour les téléphones mobiles sous Android et je me retrouve confronté à certaines interrogations concernant la résolution dans les jeux.

    Quand on développe un éditeur de niveau, celui-ci fonctionne forcément dans la résolution en cours d'utilisation sous windows.
    En l'occurrence, mon laptop est en 1440x900. Si je dessine une ligne de 800 pixels horizontaux, ils vont s'afficher d'une certaine façon.
    Sur une résolution de 800x600 la ligne sera affichée différemment (ce sera toujours une ligne mais elle prendra tout l'écran).

    Comment gérer cette problématique quand on développe pour plusieurs appareils mobiles qui utilisent des résolutions très différentes (avec des tailles d'écran également différentes) et qu'en plus on développe sur un ordinateur dont la résolution n'a rien à voir avec celle utilisée par les plateformes visées ?
    Ne serait-ce que pour les mobiles qui utilisent Android j'ai vu des résolutions de 320x240, 480x800... j'en passe et des pires

    Merci d'avance pour vos éclaircissements

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 399
    Points : 413
    Points
    413
    Par défaut
    Salut, sur telephone mobile il y a en effet une multitude de resolutions differentes car les constructeurs sont incapables de s entendre sur un standard. En général on peut classifier plus ou moins ces resolutions par typesmais apres il existe egalement en fonction des constructeurs des resoltuions exotiques difficilement classifiables.

    De mémoire (j ai travaillé dans le jeu mobile auparavant), Les types en gros sont :
    • Q128 : 128 * 164
    • QCIF : 176 * 240
    • QVGA : 240 * 320
    • VGA : 480 * 640

    Ca c est en version portrait, les version panoramique sont inversée mais sont dans la meme categorie.

    En 3D tu t en fous des resolutions puisque le viewport va etre adapté a la resolution. Par contre en 2D en regle generale, tu va utiliser un set de graph par catégorie avec les facteurs suivant pour leur taille :
    • Q128 : 2
    • QCIF : 3
    • QVGA : 4
    • VGA : 8


    Utiliser des valeurs multiples de 8 (pour le plus gros graph, le VGA) est en general une bonne idée car il permette un redimensionnement précis pour tout les types de resolutions.

    Apres il faut bien sur n utiliser aucune valeur en dure pour le positionnement de tes graphs mais uniquement des valeurs relatives a la taille de l ecran du telephone. La seule asomptions a faire est la valeur min et la valeur max de chaque categorie. Par exemple en QVGA la valeur min est 240 * 240 et la valeur max est 320 * 320.

    Pour l editeur de niveau je ne vois pas vraiment le probleme, tu peux facilement coder quelques chose qui te permette de simuler la resolution d un tel (genre un canvas 240 * 320). Quand tu utilises un emulateur, tu peux definir la resolution de l ecran du telephone emulé également.
    SPARK
    Moteur de particule C++ opensource avec modules de rendu OpenGL, Irrlicht et SFML

  3. #3
    Membre éclairé Avatar de Julien Bodin
    Homme Profil pro
    Devops
    Inscrit en
    Février 2009
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Devops
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 474
    Points : 843
    Points
    843
    Par défaut
    Merci pour ta réponse, je saisis un peu mieux le truc !

    Par contre je n'ai pas bien compris ce que tu veux dire par là :
    La seule asomptions a faire est la valeur min et la valeur max de chaque categorie. Par exemple en QVGA la valeur min est 240 * 240 et la valeur max est 320 * 320.
    Dans tous les cas, comme il n'y a que deux mobiles disponibles sous cet OS (nativement) je vais me concentrer sur le plus répandu...
    Le second n'ayant visiblement pas de clavier physique...
    C'est vraiment le bordel le développement pour mobiles !

  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    je n'arrive pas à comprendre ta problèmatique ; quand tu développes il y a toujours des fonctionnalités pour retourner la résolution actuelle de l'écran.
    Le problème c'est si tu fais un jeu à défilement auquel cas il faut afficher ce qui ne peut être visible à l'écran
    Citation Envoyé par julien.1486 Voir le message
    Quand on développe un éditeur de niveau, celui-ci fonctionne forcément dans la résolution en cours d'utilisation sous windows.
    En l'occurrence, mon laptop est en 1440x900. Si je dessine une ligne de 800 pixels horizontaux, ils vont s'afficher d'une certaine façon.
    Sur une résolution de 800x600 la ligne sera affichée différemment (ce sera toujours une ligne mais elle prendra tout l'écran).
    Si tu veux faire des tracés de ligne il faut qu'ils s'adaptent à la résolution en cours...il faut que cela soit vectoriel..
    si tu prends des bitmaps il faut que tu fasses des clipping comme j'en ai parlé avant.
    Si c'est un jeu en 3d alors il suffit de faire bouger la caméra...
    que veux-tu faire au final ?

  5. #5
    Membre éclairé Avatar de Julien Bodin
    Homme Profil pro
    Devops
    Inscrit en
    Février 2009
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Devops
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 474
    Points : 843
    Points
    843
    Par défaut
    Oui il y aura un défilement horizontal. Le problème que j'ai c'est qu'un jeu développé pour telle ou telle résolution sera absolument injouable dans une autre résolution. Ou alors il faut concevoir des graphismes différents pour chaque résolution et du coup on fait gonfler l'application, ce qui pour une utilisation sur mobile n'est pas vraiment conseillée.

    En fait je crois que j'ai du mal à saisir vraiment cette notion....
    Imaginons que je développe un jeu pour une résolution de 800x600 et qu'on le lance en 640x480.
    Est-ce que l'image est "compressée" ou alors est-ce que seuls les pixels situés dans un rectangle d'une taille de 640x480 pixels seront affichés ? (comme si on regardait un tableau à travers une boite rectangulaire dont on aurait enlevé le fond).

    En fait ce que je souhaite faire c'est un beat'em all avec un scrolling horizontal à la double dragon ou golden axe.

  6. #6
    Membre à l'essai
    Profil pro
    DEV
    Inscrit en
    Septembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : DEV

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8
    Points : 12
    Points
    12
    Par défaut
    Bonjour.

    Et si tu faisais un changement de repère par exemple tu développes ton moteur avec un repère de sur x ----------> de 0.0 à 1.0
    y de 0.0 à 1.0
    |
    |
    |
    |

    Puis lors de l'affichage ton moteur affiche correctement tes lignes.

    Faire attention au sprite, recherche les algorithme de redimentionnement d'image.

    Par exemple si ton sprite fait 100*100 pixel et que tu l'as fait pour une résolution de 800*600, sur un appareil de 400*300 il faudra redimentionner l'image en 50 * 50.

    voila l'idée.

    PS android ne gére pas l'opengl ES ?

  7. #7
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Salut,

    Citation Envoyé par julien.1486 Voir le message
    Oui il y aura un défilement horizontal. Le problème que j'ai c'est qu'un jeu développé pour telle ou telle résolution sera absolument injouable dans une autre résolution. Ou alors il faut concevoir des graphismes différents pour chaque résolution et du coup on fait gonfler l'application, ce qui pour une utilisation sur mobile n'est pas vraiment conseillée.
    Il est préférable de faire des graphismes pour chaque catégorie de résolutions. De même, le code doit être paramètrable selon les rez (des defines par exemple). Tu as typiquement une famille de builds différentes par resolution et sous-catégorisées par familles de features/bugs, ou l'inverse, mais tu peux te sentir un peu moins (je ne dis pas "pas du tout") concerné par cette dernière catégorisation si tu ne veux toucher qu'à Android.
    Les graphs et infos vectoriels/relatives c'est bien beau mais ça a un coût +/- élevé selon la plateforme (cpu, exécution par du code natif ou non, etc...)

    Pour ce qui est de gonfler le poids de l'appli, pas vraiment. Vu que tu fais des builds différentes pour chaque famille de device que tu auras identifié, tu n'as qu'à distribuer la build X pour le tel T1 et la build Y pour les tels T2 et T3 par exemple.

  8. #8
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par julien.1486 Voir le message
    Imaginons que je développe un jeu pour une résolution de 800x600 et qu'on le lance en 640x480.
    Est-ce que l'image est "compressée" ou alors est-ce que seuls les pixels situés dans un rectangle d'une taille de 640x480 pixels seront affichés ? (comme si on regardait un tableau à travers une boite rectangulaire dont on aurait enlevé le fond).
    Le plus simple c'est de faire un scrolling comme tu dis et de calculer la zone visible à l'écran..
    je pense que c'est le plus simple.
    Sinon si le système te retourne différentes résolutions possibles tu peux permettre à l'utilisateur de choisir telle ou telle résolution...

  9. #9
    Membre éclairé Avatar de Julien Bodin
    Homme Profil pro
    Devops
    Inscrit en
    Février 2009
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Devops
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 474
    Points : 843
    Points
    843
    Par défaut
    PS android ne gére pas l'opengl ES ?
    Si mais je veux faire de la 2D. Je pense qu'il sera plus simple d'utiliser l'API 2D d'Android directement.

    Pour ce qui est de gonfler le poids de l'appli, pas vraiment. Vu que tu fais des builds différentes pour chaque famille de device que tu auras identifié, tu n'as qu'à distribuer la build X pour le tel T1 et la build Y pour les tels T2 et T3 par exemple.
    En effet je n'avais pas pensé à ça. Mais je ne sais pas s'il est possible d'imposer ce genre de restriction quand on utilise l'android market (ce serait étonnant de la part de google de ne pas y avoir pensé, celà dit).

    Le problème survient surtout s'il y a une vraie grosse différence de résolution entre différents appareils, je pense au cas où l'écran n'est pas dans le même sens (portrait / paysage).

  10. #10
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Désolé, je ne connais pas l'android market ; j'ai quitte le monde du mobile juste avant sa naissance donc je ne pourrais t'en dire plus. Mais c'est ce qui se fait chez tout les fournisseurs de contenus (sauf Apple pour qui la question ne se pose pas )

  11. #11
    Membre à l'essai
    Profil pro
    DEV
    Inscrit en
    Septembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : DEV

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8
    Points : 12
    Points
    12
    Par défaut
    L'opengl est une api de dessin vectoriel, elle fait aussi bien en 2D qu'en 3D et cela te rendra independant des resolutions.

    A toi de voir

  12. #12
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Citation Envoyé par hougoul Voir le message
    L'opengl est une api de dessin vectoriel,
    Non, ce n"est pas du vectoriel, c'est juste de la 3d (avec la possibilité de faire de la 2d bien sûr).

  13. #13
    Membre à l'essai
    Profil pro
    DEV
    Inscrit en
    Septembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : DEV

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8
    Points : 12
    Points
    12
    Par défaut
    C'est du vectoriel.
    La différence entre une application de dessin vectoriel comme illustrator et un logiciel de modélisation 3D est le nombre de dimension 2D dans un cas 3D dans l'autre.

    rappel sur les dessins vectoriels :
    Ensemble de points défini à l'aide d'un vecteur (x,y) ou (x,y,z....) qui positionnent le point par rapport à l'origine.
    Les formes se dessinent en mettant les points en relation soit par des lignes, polygones, soit par des fonctions mathématiques...

    L'avantage dans son cas est de pouvoir développer son application indépendamment de la résolution puis d'optimiser son application en fonction de la cible voulut.

Discussions similaires

  1. Gestion de résolution et jbutton
    Par Sals007 dans le forum AWT/Swing
    Réponses: 0
    Dernier message: 21/07/2013, 16h52
  2. Gestion des résolutions de l'écran
    Par gluc86 dans le forum XNA/Monogame
    Réponses: 6
    Dernier message: 10/07/2009, 10h12
  3. Réponses: 2
    Dernier message: 19/08/2007, 11h58
  4. Réponses: 3
    Dernier message: 20/07/2007, 11h50
  5. Réponses: 20
    Dernier message: 02/02/2007, 11h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo