[Projet] Jeux Iphone (openGL, Cocos2D)

GilgameshGilgamesh Membre
janvier 2010 modifié dans Vos applications #1
Bonjour,

Alors voilà , je suis au commencement d'un développement de jeux sur Iphone. C'est un jeux en 2D avec OpenGL(le plus simple pour le moment je pense) par vue du dessus ou en isométrique, a voir...

Je viens sur ce forum pour vous demander de l'aide pour ce développement, car je ne sais pas par ou débuter, j'ai lu beaucoup de tutoriels, bien souvent en anglais (ma plus grosse lacune) donc j'ai quelques questions très vagues.

Je ne sais pas trop par ou débuter mon développement, j'ai des sources intéressantes que je peut me servir mais j'aimerais bien tout faire depuis le début, donc gestion de l'affichage, des collisions, d'un joy et d'un pad pour contrôler le joueur.

Voilà , merci de m'avoir lu.
À bientôt.  ;)

Réponses

  • iSofTomiSofTom Membre
    12:04 modifié #2
    Bonjour Gilgamesh,
    avant de pouvoir t'aider pour t'aiguiller, on doit savoir ce que tu connais...
    est-ce que tu connais: objective-c? opengl?
    est-ce que tu as déjà  fait des petites applis sur iphone?
  • GilgameshGilgamesh Membre
    12:04 modifié #3
    Bonjour,

    Je suis étudiant en informatique actuellement en licence pro. I2M, j'ai beaucoup développer en JAVA et C# (.NET). Je débute seulement l'objective-C donc mes connaissances sont faible et je ne connais pas openGL autre que dans l'utilisation basique que j'en ai faite en JAVA, c'est a dire création de cubes, tubes, polygones, dégrader. Les cours que j'ai eu en DUT Informatique en somme.
  • zoczoc Membre
    12:04 modifié #4
    En ce qui me concerne, si je devais faire une jeu en 2D utilisant OpenGL, j'utiliserais Cocos2d-iphone, qui propose tout ce qu'on peut avoir besoin pour ce genre d'application.
  • GilgameshGilgamesh Membre
    12:04 modifié #5
    En effet ce moteur répond parfaitement au besoin de mon jeu, est-il plus simple a mettre en oe“uvre que OpenGL?

    Cependant un autre problème me viens, par ou commencer mon développement, que créer en premier vers ou se lancer ?

    plein de mini questions qui ne me font pas avancer :s.

    C'est le premier gros projet dans le quel je me lance et c'est une "première" pour moi qu'est le développement d'un jeu
  • DrakenDraken Membre
    12:04 modifié #6
    Commence par afficher un sprite sur l'écran. C'est la base de tout les jeux. L'exemple GLSprite d'Apple montre comment faire.

  • AliGatorAliGator Membre, Modérateur
    12:04 modifié #7
    Et honnêtement, commencer le développement iPhone directement par un gros projet comme ça ne me semble pas forcément une bonne idée. Commence peut-être par faire quelques tutos plus simplistes, non ?

    Histoire de te plonger dans les bases d'Objective-C et Cocoa, comprendre comment Cocoa fait forte utilisation du MVC et de Design Patterns dans le genre, la gestion mémoire (attention, si tu viens de Java et de C#, tu vas avoir une toute autre habitude à  prendre : en Objective-C bien qu'il y ait le pattern de Reference Counting grace aux retain/release qui facilite grandement la gestion mémoire par rapport à  des langages comme le C++, ça reste à  toi de gérer la mémoire contrairement au Java ou au C# !), et toutes ces petites choses.

    Bref, commencer par faire une petite appli simple, ou juste suivre 3-4 tutos et bien les comprendre, car il y a un sacré paquet de concepts à  capter avant de se lancer dans du plus gros (pour te donner une idée, la formation iPhone que j'ai mise en place dans ma boite tient au minimum sur 3 jours, alors qu'elle est destinée à  des gens qui ont déjà  développé en C++ ou en langage objet, et n'a pour but que de sceller les bases du langage, du framework, l'utilisation des outils Xcode & InterfaceBuilder, etc.)

    Une fois que tu auras passé cette étape, en effet utiliser Cocos2D me semble une bonne idée. Je n'ai jamais utilisé ce framework pour ma part, mais nen ai entendu que du bien (en gros si j'ai bien compris c'est un wrapper autour d'OpenGL, écrit en Objective-C et qui permet d'utiliser OpenGL pour des scènes 2D uniquement, avec une API bien plus abordable qu'OpenGL en C).

    Pour l'exemple GLSprite dont parle Draken, c'est un bon début si tu veux faire de l'OpenGLES sur l'iPhone, pour comprendre comment simplement afficher un cube (après à  toi d'essayer de le modifier pour changer la camera ou les couleurs, etc...). Mais si tu passes par Cocos2D pour faire abstraction de tout ce qui est OpenGL, ce n'est peut-être pas nécessaire de t'embrouiller avec ça ?
  • GilgameshGilgamesh Membre
    12:04 modifié #8
    Oui commencer par un gros projet de la sorte n'est pas une superbe idée je l'avoue, mais cela viens du fait que je n'ai aps trop le choix en réalité. Je dois faire un jeux IPhone pour valider mon diplôme  :( .

    Je me penche actuellement sur la recherche de tutoriel Cocos2D (Si vous avez de bonnes adresses  :-*).
  • StephSteph Membre
    12:04 modifié #9
    Pour le tout début, ça c'est pas mal :

    http://monoclestudios.com/cocos2d_whitepaper.html

    Ensuite, yen a pléthore sur le net, google est ton ami :)





  • GilgameshGilgamesh Membre
    12:04 modifié #10
    En effet Google est mon ami, il me l'a trouver aussi et j'était en train de le faire ;) et si tu me dis qu'il est bien, ça me motive un peut plus.

    Merci
  • StephSteph Membre
    12:04 modifié #11
    Bon courage car tu ne commences pas par le plus facile.

    Perso je suis sur ma première application qui est un lecteur RSS amélioré pour mon site et vu comment je galère à  optimiser tout ça, je ne vais pas me lancer dans un trop gros projet de suite.

    May the force be with you
  • AliGatorAliGator Membre, Modérateur
    12:04 modifié #12
    Même si c'est un projet pour valider ton diplôme, ça n'empêche pas que je te conseille de faire des tutos et miniprojets avant. Crois moi, ça ne sera pas du temps perdu.

    Pas besoin que ce soit des projets à  vocation industrielle ou des produits finis, ça peut être des HelloWorld-like, et ça peut te bouffer une ou 2 semaines de taf, mais une fois que tu seras passé par là  tu comprendras bien mieux les principes qu'à  foncer tête baissée sur ton gros projet d'entrée de jeu, et ces qques jours "perdus" à  faire des miniprojets seront vite rattrapés ! Surtout si tu viens du Java et du C#, évidemment tu retrouveras bcp de concepts objet, mais côté gestion de la mémoire (d'autant plus importante dans un projet à  forte composante graphique) ou DesignPatterns Cocoa, ça va t'apprendre plein de trucs.

    D'ailleurs pendant le dev de ton jeu, si tu as des soucis sur des concepts particuliers (comment dessiner, faut-il mieux utiliser une hiérarchie de plusieurs UIView ou une grande UIView qui dessine tout ton jeu, etc. -- comment faire des animations, comment charger une image, etc) c'est aussi une bonne idée si tu ne maà®trise pas le concept de faire des petits projets à  part juste pour tester la partie qui te pose problème, comprendre le fonctionnement, faire un truc qui marche, et ensuite l'appliquer à  ton projet (plutôt que de mettre ton projet en branle :D)
  • DrakenDraken Membre
    12:04 modifié #13
    Comme d'hab, reptile-man a raison.

    Sinon, je suis un peu surpris par ton projet. Tu dois faire un jeu pour valider ton diplôme, sans avoir la moindre idée de son contenu ? Un jeu de mémoire, un mini-puzzle avec des pièces rectangulaires, un jeu d'action où le joueur doit détruire des ennemis en les touchant, un jeu de plate-forme ?

    As-tu pensé aux ressources graphiques nécessaires ? Images de fond, image de présentation, graphismes des sprites, explosions, polices de caractères bitmap, nuages dans le ciel, etc.

    Un jeu c'est un gameplay, des graphismes, des sons, un moteur de jeu et des utilitaires pour saisir/tester/éditer les données.

    Le moteur de jeu n'est qu'une partie du tout, même si c'est beaucoup de travail.

    Tu as un délai à  tenir ?

  • GilgameshGilgamesh Membre
    12:04 modifié #14
    Oui en effet je n'ai pas de réel sujet, juste un jeux...

    Pour ce qui est des images et des sons, et bien en fait on s'en fout un peut c'est aps l'objectif du travail, je suis développeur pas graphiste donc c'est un point secondaire de mon travail on va dire.

    Pour ce qui est des délais, je dirais début mars.

    En ce qui concerne le gameplay par contre un personnage qui bouge sur un décor qui bouge lui aussi avec des ennemis avec une gestion de contact des 2 entités et une attaque du héros je ne pense pas aller plus loin sauf si temps disponible par rapport a la soutenance.

    donc voilà  c'est pas LA bonne manière de procéder mais c'est celle que je vais adopter au vue des délais et des attentes de mon tuteur a.

    En ce moment je suis en train de voir pour les animation de sprites, je n'ai pas encore trouver dans la doc Cocos2D. Ensuite gérer le déplacement des sprites ( j'ai trouver ca), gestion du déplacement en fonction d'un joystick (j'ai un tuto dessus aussi, avec OpenGL mais devrai pas être compliquer à  adapter), la gestion des zones de collisions (je dois avoir aussi dans la doc) et enfin une attaque du personnage (je sais pas trop comment m'y prendre ca (peut être avec création de zone de collision devant celle du héros faisant 4/7 px, enfin un truc du genre).

    Je me trompe? C'est bien, c'est pas bien, je ne sais pas je pense partir comme ca. Vous en dites quoi ?
  • AliGatorAliGator Membre, Modérateur
    12:04 modifié #15
    Début mars ?? autrement dit t'as que 6 semaines, qui j'imagine sont loin d'être à  temps plein puisque c'est en plus de tes heures de cours et de ton travail perso dans les autres matières, pour faire ça, en partant d'aucune connaissance en Objective-C et Cocoa ? Ca va pas être de tout repos ^^
    Même moi qui connais bien Cocoa et dont programmer sur iPhone est mon boulot, je suis sur un projet perso en ce moment que je fais donc en plus de mes heures de taf, qui soulève moins de complexité à  mon avis que de faire un jeu du genre avec un bon gameplay, je m'avancerai pas à  annoncer un délai comme ça (specs, archi, design, dev, validation, intégration)...

    Je veux dire, ça dépend de la complexité du jeu que tu veux y mettre, et en 6 semaines ça reste jouable (et même en moins si on maà®trise déjà  bien Cocoa et l'Objective-C)... donc pourquoi pas, ... mais si c'est notre activité principale, et si tu as déjà  des bonnes bases ;)
    i tu comptes y passer genre 2h par jour pendant ces 40 jours à  venir, ça fait que 80 heures pour apprendre un nouveau langage, maà®triser un nouveau SDK, les problématiques nouvelles que tu n'as jamais rencontrées en Java ou C#, faire les specs, l'archi, le dev et le debug (+ rédiger la doc / le rapport de projet)... sans parler de prévoir un ou deux niveaux dans ton jeu (si tu fais genre un jeu de plateforme) :P j'espère que tu apprends vite, faudra pas perdre de temps :P

    Pourquoi ne pas plutôt partir sur un jeu plus simple et moins dangereux à  mettre en oeuvre ? Un jeu basé sur une grille (tu peux reprendre ton concept, mais ton personnage va se déplacer de case en case, et pas n'importe où à  l'écran, cas pour lequel la gestion des collisions non seulement avec l'ennemi mais aussi avec le sol et le décor sera nécessairement bien plus complexe que juste vérifier si la "case" est occupée ou non...) par exemple, comme un Sokoban ou un Bugs Bannis ou BomberMan - like ? A partir du moment où tu "quadrille" ta zone de jeu à  mon avis ça sera déjà  bien moins complexe à  gérer que gérer des collisions de sprites.
  • GilgameshGilgamesh Membre
    12:04 modifié #16
    Pour ce qui est du temps c'est pas a temps plein, la il me reste la fin de cette semaine plus encore une semaine de libre, sans cours puis deux semaines de cours, puis le restant en semaine libre. Donc ca fait un paquet de temps pour dev.

    Pour ce qui est du gameplay se n'était qu'une idée mais pourquoi pas en case comme tu le dis.
    Je bloque déjà  sur une animation de sprite :s ce n'est pas très claire dans la doc donc je mouline un peut :p.
  • DrakenDraken Membre
    janvier 2010 modifié #17
    Les collisions c'est facile. Il suffit de stocker un rectangle de position pour le joueur et ces ennemis. Et de tester si les rectangles se touchent. C'est basic, mais pas mal de jeux font la même chose.

    Pour l'attaque du personnage, utilise une attaque à  distance. C'est plus facile. Par exemple le joueur peut lancer des pierres, des haches, des boules de feu, des missiles, des éclairs, des balles, etc. C'est visuel, on vois le projectile se déplacer sur l'écran.

    Lorsque le projectile entre dans la zone de collision d'un ennemi, paf.. il est mort.

    Passons maintenant à  l'IA des ennemis. Les jeux de plates-formes préhistoriques utilisaient une technique simple, l'ennemi fonce droit devant lui, jusqu'à  rencontrer un obstacle. Là  il se retourne et va dans le sens inverse. Pour cela, il faut que le monde ai une structure, généralement une matrice de cases, stockée dans un tableau. Chaque case correspondant à  une section de l'écran, le plus souvent une zone de 32x32 pixels, avec un indice de passabilité.

    Bon, j'arrête ici, je n'ai pas trop dormi la nuit précédente, et j'ai encore un travail fou à  faire avant de rejoindre Morphée. ça fait un bon de temps que je voulais écrire un tuto sur la création d'un jeu iPhone. Ce sera l'occasion de m'y remettre, enfin d'ici quelques jours.

    ps : pour les animations de sprites, c'est facile. Il suffit d'avoir plusieurs étapes d'animations dans la même image et de transférer la bonne zone de pixels, au bon moment. Voici le genre de planche d'animation que l'on trouve dans un jeu 2D :
  • GilgameshGilgamesh Membre
    12:04 modifié #18
    oui tout ca je connais j'ai réaliser l'année précédente un shoot'em up en java avec collision missile et tout.

    Le problème de l'animation c'est le code pas la méthode :s.
  • DrakenDraken Membre
    janvier 2010 modifié #19
    Parfais, tu ne commences pas à  partir de zéro, alors. Voici quelques planches que tu peux utiliser pour tes personnages, provenant d'un logiciel japonais de création de jeux vidéos :

    Zap, fichier auto-effacé pour protéger le droit d'auteur !




  • DrakenDraken Membre
    janvier 2010 modifié #20
    Et pour les ennemis :

    Bon, je suis vraiment fatigué, moi. Voila que je met des ressources graphiques sous licence en téléchargement sur un forum ! Je me suis adressé une réclamation véhémente, avant de les effacer !



  • GilgameshGilgamesh Membre
    12:04 modifié #21
    hé hé en tout cas merci quand même le geste est sympathique.

    Par contre si des gens pouvaient m'expliquer
    id anim = [[Animation alloc] initWithName:@&quot;fight&quot; delay:0.1];<br />&nbsp; [anim AddFrameWithName:@&quot;goblin_swing_01&quot;];<br />&nbsp; [anim AddFrameWithName:@&quot;goblin_swing_01&quot;];<br />&nbsp; [anim AddFrameWithName:@&quot;goblin_swing_02&quot;];<br />&nbsp; [anim AddEventWithTarget:self selector:(myFunc) withParam:0];<br />&nbsp; [anim AddFrameWithName:@&quot;goblin_swing_03&quot;];<br />&nbsp; [anim AddFrameWithName:@&quot;goblin_swing_02&quot;];
    


    je ne sais pas du tout comment cela peut fonctionner :s .... il est peut être temps de dormir un peut moi aussi.
  • AliGatorAliGator Membre, Modérateur
    12:04 modifié #22
    Il vient d'où ton code ? Tu utilises quoi comme framework ? Cocos2d ? Ca sort d'un projet d'exemple ?

    Parce que la classe "Animation" n'est pas une classe qui existe dans le framework Cocoa (il y a bien CAAnimation, CABasicAnimation, etc... mais pas Animation tout court). Donc cette classe Animation je la connais pas du tout, soit elle vient d'un framework que tu as rajouté dans ton projet et que tu utilise, soit elle est définie qqpart dans ton projet, mais c'est pas une classe Apple :P

    De même, très bizarre de voir une méthode nommée "AddFrameWithName", commençant donc par une majuscule, alors que les conventions de nommage précaunisées par Apple (et que tout bon développeur Cocoa suit poru des questions de clareté) indiquent que ce sont les noms de classes qui commencent par une majuscule ("TitleCase"), les noms de méthodes commencent par une minuscule ("CamelCase").

    D'ailleurs rien que pour cette raison je pencherais pour l'explication comme quoi ta classe Animation vient d'un projet d'exemple, car si Cocos2d est si bien fait que ce que j'entend dire, j'imagine mal qu'il ne respecte pas les conventions de nommage (moi ça me choque au premier coup d'oe“il limite ça m'empêche de bien comprendre un code si c'est pas respecté, un peu comme une mauvaise indentation du code :P)
  • GilgameshGilgamesh Membre
    12:04 modifié #24
    Apparemment quand je cherche "animation sprite cocos2D" dans Google, je tombe sur comment déplacer un sprite...j'ai beau cherche je ne trouve pas comment faire switcher un sprite d'une image a une autre pour donner l'impression de mouvement a un personnage. Comment je peut formuler cette idée dans mes recherches?
  • DrakenDraken Membre
    12:04 modifié #25
    Cherches plutôt des exemples de jeux complets en Cocos2D, et regardes le code source. ça doit bien exister sur le net.



  • zoczoc Membre
    12:04 modifié #26
    dans 1263554203:

    Attention, la page que tu nous donnes concerne des fonctionnalités qui n'existent pas encore dans cocos2D, mais qui sont prévues pour la version 0.9 (qui n'est pas encore terminée).


    Ceci étant dit, en téléchargeant ( http://code.google.com/p/cocos2d-iphone/source/checkout ) la dernière version des sources sur le dépôt SVN du projet Cocos 2D, tu auras accès à  une bonne vingtaine d'exemples de code qui montrent à  peu près comment faire tout ce que le framework permet de faire...

  • GilgameshGilgamesh Membre
    12:04 modifié #27
    ouah, merci ton lien m'a permis de trouver pleins de choses interessantes. Je ne sais pas trop comment tout fonctionne mais j'ai deja quelques exemple en plus :D Merci.
  • GilgameshGilgamesh Membre
    janvier 2010 modifié #28
    D'un coup tout deviens un peut plus simple, mais il y a une notion que je ne saisis pas encore, la différence entre Layer et Scene.

    ce qui est déclarer dans une scene n'est pas utilisable dans un layer, par exemple je créer un Sprite dans ma Scene.
    <br />@implementation GameScene<br />- (id) init {<br />&nbsp; &nbsp; self = [super init];<br />&nbsp; &nbsp; if (self != nil) {<br />		Sprite * ninja = [Sprite spriteWithFile:@&quot;perso0.png&quot;];<br />		[ninja setPosition:ccp(0, 50)];<br />		[self addChild: ninja z:1];<br />
    


    et dans mon Layer je ne peut pas lui faire faire une translation, car l'objet n'est pas visible. Pourquoi? Faut-il le créer dans le même layer, en singleton, variable globale, utilisation de CocosNode?

    Je dis surement des ânerie avec mes histoire de singleton et de variable globale ...
Connectez-vous ou Inscrivez-vous pour répondre.