Recherche de fonction

GilgameshGilgamesh Membre
12:19 modifié dans Xcode et Developer Tools #1
Bonjour,

Le titre n'est pas très clair mais voilà  mon problème : je cherche à  faire disparaitre une image après une animation.
<br />	Sprite * bg = [Sprite spriteWithFile:@&quot;menu.png&quot;];<br />	[bg setPosition:ccp(240, 160)];<br />	[self addChild:bg z:0];<br />	// anim<br />	id shaky = [FadeOutTRTiles actionWithSize:ccg(16,12) duration:1];<br />	// Fade out<br />	id fadeIn = [FadeIn actionWithDuration:2];<br />	id fadeOut = [fadeIn reverse];<br /><br />	<br />	[bg runAction: shaky];<br />	[bg runAction:fadeOut];<br />	bg.visible=NO;

Voilà  c'est génial si je ne mets pas "bg.visible=NO;" tout ce passe comme prévu j'ai mon animation c'est super jolie.
Le problème c'est que je veux supprimer ce sprite après son animation car il ne me sert plus et gène l'affichage.
Donc je change la visibilité mais si je rajoute cette ligne et bien je ne vois plus mon sprite du tout.

Comment faire pour changer la visibilité juste après la fin de mes animations
[bg runAction: shaky];<br />	[bg runAction:fadeOut]<br />


Question surement idiote mais je débute en ObjC.

Merci

Réponses

  • AliGatorAliGator Membre, Modérateur
    12:19 modifié #2
    C'est quoi la lib que tu utilises ? Les classe Sprite, FadeOutTRTiles, la méthode runAction... ça vient d'un framework tierce, ça, non ?
    Si oui, c'est pas dans la doc Cocoa que tu trouveras ton bonheur. Sauf si Sprite implémente un protocole Cocoa, par exemple CAAction, et que tout cela est lié à  CoreAnimation. Dans ce cas le delegate de ton action te servira, cf le Programming Guide de CoreAnim et le CookBook qui va avec etc.

    Si ça n'a rien à  voir et que c'est un truc propre au framework que tu utilises, et à  la classe Sprite et tout... bah tant qu'on sait pas de quel framework tu parles et qu'on n'a pas la doc du framework, et que je retrouve pas ma boule de crystal, ça va être dur de t'aider :P
  • GilgameshGilgamesh Membre
    12:19 modifié #3
    ^^

    c'est le framework Cocos2D dispo sur http://www.cocos2d-iphone.org/wiki/doku.php/ en v0.8.2 et la classe sprite http://www.cocos2d-iphone.org/api-ref/0.7.3/interface_sprite.html.
  • AliGatorAliGator Membre, Modérateur
    12:19 modifié #4
    Bah je sais pas, je n'ai jamais utilisé Cocos2D... Tu n'as pas un système de delegate sur tes Actions ? Tu peux pas surcharger le isDone de l'objet Action (pour qu'il fasse le hidden=yes) ?
  • DrakenDraken Membre
    12:19 modifié #5
    Pourquoi ne pas utiliser la version la plus récente de Coco2D ? Il parait que la 0.99.0 corrige pas mal de bugs. Enfin, je n'ai pas testé par moi-même.

  • GilgameshGilgamesh Membre
    12:19 modifié #6
    Oui le 0.99 est beaucoup mieux, mais beaucoup de changements dans la syntaxe, je suis à  la date limite de mon projet donc je ne vais pas perdre du temps à  changer de version et devoir corriger tout les deprecated et autres changements.
  • DrakenDraken Membre
    12:19 modifié #7
    Evidement. Tu auras fini à  temps ? Personnellement, je viens de finir un petit jeu pour un client, avec .. 3 semaines de retard sur la date prévue ! * rouge de honte *

  • GilgameshGilgamesh Membre
    12:19 modifié #8
    oui oui je pense que l'état actuel du projet serra suffisant par rapport aux autres projets moins ambitieux. En tout cas je suis content de ce que j'ai.

    Je viens de tester une bidouille dans le genre
    <br />	BOOL boucle = true;<br />	while (boucle) {<br />		BOOL end = [fadeOut isDone];<br />		if (end) {<br />			bg.visible=NO;<br />			boucle=false;<br />		}<br />	}<br />
    


    mais boucle infinie :s
  • AliGatorAliGator Membre, Modérateur
    12:19 modifié #9
    Ben évidemment, isDone ne peut être mis à  jour vu que tu bloques la RunLoop avec ta boucle while :P

    A la limite avec un NSTimer ou un performSelector, tu peux utiliser le même genre de bidouille qui va tester si isDone et rendre invisible bg en conséquence. Mais du coup ça sera un contexte différent, puisqu'il faut laisser la RunLoop s'exécuter pour que ton animation évolue évidemment... donc tout le reste sera asynchrone. Donc fait synchroniser au besoin ton code en conséquence, garder une référence de ton Sprite bg, etc...

    Un delegate qui serait informé quand l'animation est terminée serait tellement plus adaptée... Ou une surcharge de la méthode appellée quand l'animation est finie, à  défaut de delegate.
Connectez-vous ou Inscrivez-vous pour répondre.