[Projet] BASTON

pierre68314pierre68314 Membre
mai 2011 modifié dans Vos applications #1
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.



Réponses

  • DrakenDraken Membre
    avril 2011 modifié #2
    A ma connaissance, pratiquement personne n'utilise Cocos2D sur ce forum. Je ne sais pas si tu auras des réponses à  tes questions techniques. Ceci dit, ta question actuelle est un problème d'architecture logiciel dépendant de la structure de ton application. On ne peut pas vraiment y répondre sans connaà®tre ton code source.

    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.

  • muqaddarmuqaddar Administrateur
    02:21 modifié #3
    Salut,

    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
  • DrakenDraken Membre
    02:21 modifié #4
    Tu sais Muqaddar, d'après Céroce Coco2D ne possède même pas de fonctions pour détecter les collisions de sprites. Cela ne donne pas envie pour un Framework de création de jeux vidéo.

  • pierre68314pierre68314 Membre
    avril 2011 modifié #5
    Merci pour vos réponses.

    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é.
  • AliGatorAliGator Membre, Modérateur
    02:21 modifié #6
    dans 1303323733:

    Ray Wenderlich utilises dans ses programmes-tuto la fonction : CGRectIntersectsRect
    Tu veux dire qu'il n'y a pas de système de notification de collision automatique géré par la runloop à  chaque frame (truc de base d'un framework de jeu en général pourtant) ?

    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 ^^
  • DrakenDraken Membre
    02:21 modifié #7
    dans 1303325554:

    Pour moi c'est pourtant un des intérêts premier que d'avoir un moteur de jeu !

    Pas que pour toi !

  • muqaddarmuqaddar Administrateur
    02:21 modifié #8
    dans 1303321759:

    Tu sais Muqaddar, d'après Céroce Coco2D ne possède même pas de fonctions pour détecter les collisions de sprites. Cela ne donne pas envie pour un Framework de création de jeux vidéo.


    Détection de collisions ?
    http://www.raywenderlich.com/3128/how-to-create-a-simple-iphone-game-with-chipmunk-physics-tutorial
  • DrakenDraken Membre
    02:21 modifié #9
    Passer par un module de moteur physique pour détecter une collision entre deux objets ?  :(

  • muqaddarmuqaddar Administrateur
    02:21 modifié #10
    Qui peut le plus, peut le moins.
  • DrakenDraken Membre
    avril 2011 modifié #11
    Muqaddar => :o
  • CéroceCéroce Membre, Modérateur
    02:21 modifié #12
    dans 1303321759:

    Tu sais Muqaddar, d'après Céroce Coco2D ne possède même pas de fonctions pour détecter les collisions de sprites.


    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.
  • zoczoc Membre
    02:21 modifié #13
    Cocos2D est à  la base un framework permettant de développer des jeux multiplateformes en... python.

    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).


  • pierre68314pierre68314 Membre
    02:21 modifié #14
    dans 1303370352:

    Cocos2D est à  la base un framework permettant de développer des jeux multiplateformes en... python.

    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.

  • zoczoc Membre
    02:21 modifié #15
    Euuh, ne pas déduire mes connaissances de cocos2D de mon post précédent  :D

    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).
  • pierre68314pierre68314 Membre
    avril 2011 modifié #16
    J'ai une autre question qui n'a rien à  voir avec COCOS2D.

    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.
    <br /><br />&nbsp; &nbsp; &nbsp; &nbsp; CGSize winSize = [[CCDirector sharedDirector] winSize]; //CCDirector est issu de cocos2d mais ce n&#039;est pas le sujet.<br />&nbsp; &nbsp; &nbsp; &nbsp; float coeffScreenX =(float) winSize.width / (float) 480 ; // ratio pour calculer les positions en fonction de la taille de l&#039;écran <br />&nbsp; &nbsp; &nbsp; &nbsp; float coeffScreenY =(float) winSize.height/ (float) 320 ; // ratio pour calculer les positions en fonction de la taille de l&#039;écran <br /><br />
    


    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.

  • DrakenDraken Membre
    avril 2011 modifié #17
    Pourquoi ne pas les stocker dans des variables d'instances de ta classe gérant le graphisme ?

    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.


  • damiendamien Membre
    02:21 modifié #18
    Bonjour à  tous,

    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 :

    ...
    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) ?
    ...


    Pour te répondre :
    Oui tu peux créer une autre CCScene et basculer dessus.
    <br />// C&#039;est peut être pas exactement ça, mais l&#039;idée est là  ;-), utilise l&#039;auto complétion au cas où ;-)<br />[[CCdirector sharedDirector] replaceScene:MyNewScene];<br />
    



    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 :
    <br />[self addChild:myLayer];<br />
    

    Celui-ci va s'afficher par dessus tous les autres.
    Mais tu peux gérer les calques grâce à  un indicateur z
    <br />[self addChild:myLayer z:10];<br />
    


    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 ;-)




  • DrakenDraken Membre
    02:21 modifié #19
    dans 1304064516:

    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 :

    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.
  • pierre68314pierre68314 Membre
    02:21 modifié #20
    Merci Damien pour ta réponse.

    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.

    <br />[[CCdirector sharedDirector] Pause];<br />
    


    mon problème est résolu.

    http://pocketworx.com/?p=182
  • pierre68314pierre68314 Membre
    02:21 modifié #21
    hello je reviens avec un nouveau problème.

    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


    <br /><br />// Import the interfaces<br />#import &quot;HelloWorldLayer.h&quot;<br />#import &quot;personnage.h&quot;<br />#import &quot;arme.h&quot;<br /><br />// HelloWorldLayer implementation<br />@implementation HelloWorldLayer<br /><br />+(CCScene *) scene<br />{<br />	// &#039;scene&#039; is an autorelease object.<br />	CCScene *scene = [CCScene node];<br />	<br />	// &#039;layer&#039; is an autorelease object.<br />	HelloWorldLayer *layer = [HelloWorldLayer node];<br />	<br />	// add layer as a child to scene<br />	[scene addChild: layer];<br />	<br />	// return the scene<br />	return scene;<br />}<br /><br />// on &quot;init&quot; you need to initialize your instance<br />-(id) init<br />{<br />	// always call &quot;super&quot; init<br />	// Apple recommends to re-assign &quot;self&quot; with the &quot;super&quot; return value<br />	if( (self=[super init])) {<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; self.isTouchEnabled = YES;<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; // ask director the the window size<br />&nbsp; &nbsp; &nbsp; &nbsp; CGSize winSize = [[CCDirector sharedDirector] winSize];<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; coeffX = winSize.width / 480.0;<br />&nbsp; &nbsp; &nbsp; &nbsp; coeffY = winSize.height / 320.0;<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; NSString *spritePlist = @&quot;spritesheet.plist&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; NSString *spritePVR = @&quot;spritesheet.pvr.ccz&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; NSString *background = @&quot;background2.png&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />		if ( winSize.width != 480) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spritePlist = @&quot;spritesheet-hd.plist&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spritePVR = @&quot;spritesheet-hd.pvr.ccz&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background = @&quot;background2-hd.png&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; // fond d&#039;écran<br />&nbsp; &nbsp; &nbsp; &nbsp; CCSprite * bg = [CCSprite spriteWithFile:background];<br />&nbsp; &nbsp; &nbsp; &nbsp; [bg setPosition:ccp(winSize.width /2 , winSize.height/2)];<br />&nbsp; &nbsp; &nbsp; &nbsp; [self addChild:bg z:0];<br />&nbsp; &nbsp; &nbsp; &nbsp; <br /><br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile: spritePlist];<br />		CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile: spritePVR];<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; // add the label as a child to this Layer<br />		[self addChild: spriteSheet];<br />&nbsp; &nbsp; &nbsp; &nbsp; <br /><br /><br />		pierre = [personnage initPersoAvecNom:@&quot;a&quot; persoAvecAbsice:120 avecOrdonnee:100 spriteSheet:spriteSheet];&nbsp; &nbsp; &nbsp;  <br />&nbsp; &nbsp; &nbsp; &nbsp; pierre.spritePerso.flipX=NO;<br />&nbsp; &nbsp; &nbsp; &nbsp; //pierre.spriteArme.flipX=NO;<br /> <br />		olivier = [personnage initPersoAvecNom:@&quot;a&quot; persoAvecAbsice:480-120 avecOrdonnee:100 spriteSheet:spriteSheet];&nbsp;  <br />&nbsp; &nbsp; &nbsp; &nbsp; olivier.spritePerso.flipX=YES;<br />&nbsp; &nbsp; &nbsp; &nbsp; olivier.barreVie.flipX=YES;<br />&nbsp; &nbsp; &nbsp; &nbsp; //olivier.spriteArme.flipX=YES;&nbsp; &nbsp; &nbsp; &nbsp; <br /><br />&nbsp; &nbsp; &nbsp; &nbsp; _pauseScreenUp=FALSE;<br />&nbsp; &nbsp; &nbsp; &nbsp; CCMenuItemFont *pauseMenuItem = [CCMenuItemFont itemFromString:@&quot;Pause&quot; target:self selector: @selector(PauseButtonTapped:) ]; pauseMenuItem.color=ccBLACK; <br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; CCMenu *upgradeMenu = [CCMenu menuWithItems:pauseMenuItem, nil];<br />&nbsp; &nbsp; &nbsp; &nbsp; upgradeMenu.position = ccp(50*coeffX, 20*coeffY);<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; [upgradeMenu alignItemsVerticallyWithPadding: 30.0f];<br />&nbsp; &nbsp; &nbsp; &nbsp; [self addChild:upgradeMenu z: 500];<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />	}<br />	return self;<br />}<br /><br /><br />-(void)PauseButtonTapped:(id)sender <br />{<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; NSLog(@&quot;reprise de la pause : %@&quot;, [perso description]);&nbsp; <br />&nbsp; &nbsp; <br />&nbsp; &nbsp; <br />&nbsp; &nbsp; if(_pauseScreenUp ==FALSE)<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; _pauseScreenUp=TRUE;<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; //if you have music uncomment the line bellow<br />&nbsp; &nbsp; &nbsp; &nbsp; //[[SimpleAudioEngine sharedEngine] pauseBackgroundMusic];<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; [[CCDirector sharedDirector] pause];<br />&nbsp; &nbsp; &nbsp; &nbsp; CGSize s = [[CCDirector sharedDirector] winSize];<br />&nbsp; &nbsp; &nbsp; &nbsp; pauseLayer = [CCColorLayer layerWithColor: ccc4(0, 0, s.width, s.height) width: s.width height: s.height];<br />&nbsp; &nbsp; &nbsp; &nbsp; pauseLayer.position = ccp(0,0);<br />&nbsp; &nbsp; &nbsp; &nbsp; [self addChild: pauseLayer z:499];<br />&nbsp; &nbsp; &nbsp; &nbsp; <br /><br />&nbsp; &nbsp; &nbsp; &nbsp; CCMenuItemFont *ResumeMenuItem = [CCMenuItemFont itemFromString:@&quot;Action&quot; target:self selector: @selector(ResumeButtonTapped:)]; ResumeMenuItem.color=ccBLACK;<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; CCMenuItemFont *QuitMenuItem = [CCMenuItemFont itemFromString:@&quot;Quit&quot; target:self selector: @selector(QuitButtonTapped:)]; QuitMenuItem.color=ccBLACK;<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; _pauseScreenMenu = [CCMenu menuWithItems:ResumeMenuItem,QuitMenuItem, nil];<br />&nbsp; &nbsp; &nbsp; &nbsp; _pauseScreenMenu.position = ccp(s.width /2 , s.height/2);<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; [_pauseScreenMenu alignItemsVerticallyWithPadding: 30.0f];<br />&nbsp; &nbsp; &nbsp; &nbsp; [self addChild:_pauseScreenMenu z: 501];<br /> <br />&nbsp; &nbsp; }<br />&nbsp; &nbsp; <br /><br />}<br />
    



Connectez-vous ou Inscrivez-vous pour répondre.