2009-04-13 16 views
5

Wie würde man eine benutzerdefinierte Aktion in Cocos2D erstellen, die in der Lage war, einen "Callback" im Laufe der Zeit durchzuführen, so dass jeder Call zum Callback progressiv länger als der letzte Aufruf (mit etwas) ähnlich dem EaseExponentialOut Aktion bereits mit Cocos2D versehenBenutzerdefinierte Lockerungsaktion mit Cocos2D-iphone

Etwas ähnliches wie folgt aus:.

id sequence = [Sequence actions: [CallFunc actionWithTarget: self selector: @selector(spinTick)], [DelayTime actionWithDuration: 0.034f], nil]; 
id repeat = [Repeat actionWithAction: [sequence copy] times: 18]; 
id ease = [EaseExponentialOut actionWithAction: [repeat copy]]; 
[ease setDuration:4]; 

id play = [CallFunc actionWithTarget:self selector:@selector(play)]; 
[self runAction: [Sequence actions: [ease copy], [play copy], nil]]; 

der obige Code die gesamte ‚Sequenz‘ ausführt Spiel ausführt (die nicht funktioniert), 18 mal und dann die‘ 'Rückruf am Ende der letzten Sequenz.

Allerdings scheint EaseExponentialOut überhaupt keine Auswirkungen auf die 'repeat' Aktion zu haben, die erstellt wurde - ich hatte erwartet, dass es die Dauer der 'DelayTime'-Aktion innerhalb der' Sequenz'-Aktion anpassen würde, aber das tut es scheint dies nicht zu tun.

Ich habe auch versucht, meine eigene benutzerdefinierte Aktion basierend auf IntervalAction zu erstellen, aber kläglich gescheitert.

+0

Fehlt hier etwas? Würde der SpinTick-Callback die SpinnerAction verwenden? Es scheint nicht, als würde irgendeine Animation verwendet werden. So wie ich es sehe, haben Sie eine wiederholte Folge von SpinTick-Callbacks mit einer erwarteten easeexponentialout-Dauer. Spinner ist im Beispielcode nicht referenziert ... –

+0

SpinnerAction wurde an der Unterseite hinzugefügt, vergaß es einzuschließen. –

+0

nach dem Blick auf die Dinge wieder, 'Spinner' wird nie wirklich in dem oben genannten Code verwendet - es ist nur eine Instanz meiner fehlgeschlagenen SpinnerAction Versuch (die unter dem Post nachträglich hinzugefügt wurde) –

Antwort

2

Anscheinend ist der Code oben funktional, es war nur meine Verwendung des Timings in den Dauern. Es war auch nicht notwendig, "Kopieren" zu verwenden, da die Aktionen wie sie sind verwendet werden können.

Wenn ich mein Timing von 0,034 zu etwas mehr in der Linie von 0,25 erhöhte, dann war das Ergebnis näher an dem, was ich zu sehen hoffte. Jetzt muss ich nur mit den Werten für die Dauer spielen, um es "genau richtig" zu bekommen.

+0

Hey ich versuche, etwas wie ein Bouncing zu implementieren Ball. Wirst du mir bitte helfen, es zu implementieren, wie die Leichtigkeit-Funktion für diese bestimmte Sache zu verwenden. – rkb

+0

Ich würde mehr Informationen brauchen, und Sie würden wahrscheinlich ein bisschen weiter kommen, wenn Sie die Frage an alle senden würden. –

Verwandte Themen