[Projet] BASTON
pierre68314
Membre
Bonjour à vous.
Ceci est mon premier post sur ce forum.
Je suis ravi de trouver un forum où l'on parle activement de programmation objective-C. Cerise sur le gâteau, c'est en français.
Je débute l'apprentissage de ce langage et plus particulièrement des librairies Cocos2d (ça se dit comme ça?).
Je fais un programme bateau où 2 persos s'affrontent au tour par tour.
ex :
tour1:
perso1 ==> attaque ==> perso2
calcul des dégats
perso2 ==> attaque ==> perso1
calcul des dégats
tour2:
...
J'aimerai qu'entre chaque tour un "menu" apparaisse demandant pour chaque perso ce qu'il doit améliorer (esquive/puissance)
dès que les choix sont faits, le menu pose disparait ou se déplace pour faire place au tour suivant.
Est-ce que je peux créer une autre scène et basculer dessus ?
si oui, est-ce que ma scène qui comporte le combat va être détruite ?
Est-ce que je dois utiliser un 2è CCLayer ? ou un CCSprite ?
si oui est-il possible d'avoir menu dessus avec les choix (esquive/puissance) ?
L'idéal serait de flouter la scène de combat et de proposer le menu du perso1 puis du perso2.
merci d'avoir lu jusqu'ici xd
Je suis à votre écoute.
Ceci est mon premier post sur ce forum.
Je suis ravi de trouver un forum où l'on parle activement de programmation objective-C. Cerise sur le gâteau, c'est en français.
Je débute l'apprentissage de ce langage et plus particulièrement des librairies Cocos2d (ça se dit comme ça?).
Je fais un programme bateau où 2 persos s'affrontent au tour par tour.
ex :
tour1:
perso1 ==> attaque ==> perso2
calcul des dégats
perso2 ==> attaque ==> perso1
calcul des dégats
tour2:
...
J'aimerai qu'entre chaque tour un "menu" apparaisse demandant pour chaque perso ce qu'il doit améliorer (esquive/puissance)
dès que les choix sont faits, le menu pose disparait ou se déplace pour faire place au tour suivant.
Est-ce que je peux créer une autre scène et basculer dessus ?
si oui, est-ce que ma scène qui comporte le combat va être détruite ?
Est-ce que je dois utiliser un 2è CCLayer ? ou un CCSprite ?
si oui est-il possible d'avoir menu dessus avec les choix (esquive/puissance) ?
L'idéal serait de flouter la scène de combat et de proposer le menu du perso1 puis du perso2.
merci d'avoir lu jusqu'ici xd
Je suis à votre écoute.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Tu devrais peut être changer ton angle d'apprentissage et tâter un peu du graphisme sur CocoaTouch. C'est plus simple à manipuler et à apprendre. C'est largement suffisant pour créer des jeux sympathiques en 2D. Et cela te permet d'utiliser toute l'architecture Cocoa Touch (les vues, les controleurs, les transitions, les animations avec les blocks, les transformations, CALayer, etc..). Sans avoir potasser sur la question, je pense qu'on peut même flouer une vue.
Je te recommande la lecture de l'ouvrage "Développer des jeux pour iPhone et iPad pour les Nuls" des éditions First Interactive. Il est vraiment excellent. Vers la fin, on y apprend même comment écrire des applications mixant Cocoa Touch et OpenGL.
Je en sais répondre ne faisant pas de Coco2D.
Mais à tout hasard, si tu ne connais pas ce site, il regorge de super tutoriaux sur Coco2D pour faire des jeux de A à Z:
http://www.raywenderlich.com/tutorials
je réponds dans l'ordre:
Draken : j'ai acheté cette semaine le bouquin dont tu parles
muqaddar : je connais le site dont tu parles. Il est super sympa et donne beaucoup de bases.
Draken : moi j'ai compris que Cocos2d complète les framework, il ne réinvente pas la roue c'est pourquoi la gestion de collision n'est pas réécrite car fonctionne bien.
Ray Wenderlich utilises dans ses programmes-tuto la fonction : CGRectIntersectsRect
eh ben si vous le souhaitez, je vous ferai quelques retours sur cocos2d et vous me direz ce qui est le plus optimisé.
Il faut que tu crées toi-même les CGRect qui représentent les HitBox de chacun de tes sprites à l'aide de leurs propriétés x,y,width,height, puis que tu fasses l'algo de détection de collision en O(n^2) toi-même (pour chacun des N sprites de ta Scene, vérifier si la HitBox du sprite s'intersect avec les (N-1) autres sprites de ta scène, soit n(n-1)/2 tests) ?
Et il n'y a pas de possibilité de fournir un masque de collision non plus ?!
Pour moi c'est pourtant un des intérêts premier que d'avoir un moteur de jeu !
Un vrai moteur de jeu ne t'oblige pas à calculer les CGRect et faire les intersections toi-même, à comparer avec toutes les autres sprites, en évitant de faire les tests en double (puisque la collision est une action commutative), mais au contraire ne fait que te signaler (appel automatique à une méthode) dès qu'il y a une collision, pour que tu déclenches un événement automatiquement sur collision sans avoir à gérer la logique derrière. Et te permet d'affiner un masque de collision pour des HitBox non rectangulaires.
C'est un peu comme si tu disais que pour détecter un clic sur un bouton dans une appli iPhone, tu parcourais toi-même toutes les subviews de ta vue et les subviews de ces subviews, pour finir par déterminer quel bouton a été cliqué (tapé) et une fois que tu avais trouvé, chercher la méthode à appeler pour gérer ce tap... alors que y'a des IBActions pour ça ^^
Pas que pour toi !
Détection de collisions ?
http://www.raywenderlich.com/3128/how-to-create-a-simple-iphone-game-with-chipmunk-physics-tutorial
Je ne suis pas formel à 100%, mais quelqu'un avait posé ici des questions sur les collisions et j'avais jeté un oe“il aux API à cette occasion. D'après mon souvenir, il n'y avait même pas de détection de collisions sur les rectangles englobants les sprites, et encore moins au niveaux des pixels.
Je ne sais pas si Cocos2D a été vraiment prévue pour la création de jeux au départ, peut-être plus pour les présentation multimédia, ce qui pourrait expliquer ceci et pourquoi il faut recourir à un moteur physique externe.
La version iPhone est un portage en Objective-C de cette version initiale. Et effectivement, la détection des collisions n'est pas intégrée, mais c'est à priori vonlontaire, afin que le développeur de jeu ait le choix dans sa méthode de détection.
Par ailleurs, Cocos2D peut intégrer facilement Chipmunk (un peu overkill pour faire de la détection de collisions uniquement, mais de nos jours la plupart des jeux ont besoin d'un moteur physique), mais aussi avec Box2D, plus léger.
A la base, Cocos2D n'a pas la prétention d'être un moteur de jeu complet, mais uniquement un moteur de rendu 2D basé sur OpenGL/OpenGL ES (et il le fait très bien).
J'avoue très volontier que je suis complètement largué et que j'ai beaucoup à apprendre. Mais ce qui me fait plaisir c'est qu'il semble quand même y avoir des gens qui touchent pas mal en cocos2d.
J'ai juste récupéré le code source depuis le dépôt github, regardé un peu comment ça fonctionnait, essayé/lu les divers samples fournis... et c'est tout.
Je n'ai pas la prétention de savoir l'utiliser, ni même avoir une idée de ce qu'il a dans le ventre. J'ai une vision globale de ses possibilités, c'est tout (en gros j'ai juste fait un travail d'évaluation).
Je rappelle aux "petits nouveaux" que même si j'interviens fréquemment sur des sujets techniques concernant iOS/MacOS X, je ne développe pas sur ces plateformes, car je n'en n'ai pas le temps (Ceci dit, ça pourrait changer d'ici quelques semaines puisque je quitte mon emploi fin mai suite à un licenciement concerté, et avec une bonne indemnité qui va me laisser le temps de me retourner et pourquoi pas d'attaquer sérieusement le développement iPhone/iPad).
Je souhaite stocker la taille de mon écran afin de positionner mes sprites quelque soit ma résolution(iphone/retina/ipad).
Ma première solution était de passer en argument de toutes mes fonctions/méthodes les coeff mais je trouve ça vraiment bourrin.
Je donne toutes mes coordonnées en partant du principe que je suis sur une résolution d'iphone 3GS, j'applique ensuite sur chaque point un coeff afin d'avoir les coordonnées correspondantes à la vraie résolution de l'appareil.
J'utilise le code suivant pour récupérer les coeff.
j'aimerai stocker mes 2 coeff dans des variables statiques et les initialiser avec la méthode +(id)initialize. Est-ce que je suis sur la bonne voie?
merci d'avance.
Sinon je trouve ta technique de coefficients un peu étrange. Tu veux agrandir des graphismes en 320x480 pixels pour les ajuster en 640x960 pixels (Retina Display) et en 1024x768 pixels (iPad) ? Agrandir des images donne un effet de flou visuellement désagréable. Il est préférable de partir d'une grande image et de réduire sa taille.
Quoi qu'en relisant ta question, je m'aperçoit que tu parle plutôt de la position des sprites. Je ne sais pas du tout comment Coco2D gère la chose, mais sous Cocoa Touch la résolution Retina Disply est de ... 320x480 pixels ! Oui je sais, physiquement c'est du 640x960 pixels, mais l'iOS gère cela comme du 320x480 afin de garder une compatibilité parfaite avec les applications iPhone 3G. La manière dont cela fonctionne est décrite dans la documentation Apple "Supporting High-Resolution Screens".
Le floutage des images se fait en quelques lignes avec Core Graphics.
Je ne suis pas un expert en Cocos2D, mais j'ai créé un jeu qui l'utilise donc j'ai quand même quelques notions.
Sinon pour te répondre Draken :
Pour te répondre :
Oui tu peux créer une autre CCScene et basculer dessus.
Si tu fais celà , ta première Scene va être détruite, donc c'est pas ce que tu souhaite à priori.
Donc le mieux, c'est de rajouter un CCLayer dans ta première Scene.
Et c'est ton Layer qui va contenir des CCSprite (tes images)
Par défaut quand tu vas ajouter un Layer :
Celui-ci va s'afficher par dessus tous les autres.
Mais tu peux gérer les calques grâce à un indicateur z
Voila,
Si tu as des questions n'hésite pas j'essayerais d'y répondre de mon mieux.
Sinon si tu comprend l'anglais, le forum de cocos2D iPhone est très actif ;-)
La question n'était pas de moi, mais de pierre. Je n'utilise pas Cocos2D, pour ma part.
N'hésite pas à venir te présenter dans cette section :
http://pommedev.mediabox.fr/presentation-des-membres/
Et parle-nous un peu de ton jeu. J'adore tout ce qui concerne la programmation des jeux vidéo sur iDevice.
J'ai trouvé un tuto qui expliquait bien la chose. L'idée est en faite de mettre en pause toutes les actions puis de faire apparaà®tre un layer par dessus les autre.
mon problème est résolu.
http://pocketworx.com/?p=182
je vous décris vite fait mon programme et mon problème.
j'ai un classe personnage qui crée un personnage et le place à l'écran.
Le but du programme/jeu est de faire s'affronter 2 personnages créés à partir de cette classe.
Chaque tour, un menu PAUSE apparait proposant d'améliorer le personnage ou d'attaquer.
Pour le moment, j'ai mis un menu PAUSE qui apparaà®t en appuyant sur le bouton "PAUSE".
Tout fonctionne : le menu PAUSE apparaà®t, je bouton action permet de revenir au jeu et le bouton quitter me permet de quitter le jeu...
là où ça se complique c'est que j'aimerai utiliser les 2 objets persos dans ma méthode PauseButtonTapped et surtout dans ResumeButtonTapped.
J'avais dans l'idée de passer en argument du selector les deux persos, mais ça n'a pas l'air possible.
Quelqu'un doit bien avoir une idée, je suis sûr que c'est possible de le faire.
merci d'avance