Как сделать функцию, которая зацикливается и меняет позицию спрайта? - PullRequest
0 голосов
/ 18 июня 2011

так что мне нужна функция или что-то, что может заставить мои 2 спрайта все время двигаться вверх и вниз!из приложения начинается с того, что на экране ничего не трогали ..

вот что я пытался сделать, но так как это в моем init, он запускается только один раз ... как я могу сделать этот цикл самтак выглядит динамично?

if (bgSkyer == false) {
            [bg3 runAction:[CCMoveTo actionWithDuration:0.5 position:ccp(240,100)]];
            [bg2 runAction:[CCMoveTo actionWithDuration:1.5 position:ccp(240,95)]];
            bgSkyer = true;
        }else {
            [bg3 runAction:[CCMoveTo actionWithDuration:0.5 position:ccp(240,112)]];
            [bg2 runAction:[CCMoveTo actionWithDuration:1.5 position:ccp(240,80)]];
            bgSkyer = false;
        }

Ответы [ 2 ]

1 голос
/ 18 июня 2011

Как показано в ответе Джебего, вам нужно использовать CCRepeatForever.Однако, если вы используете bgSkyer в качестве флага для переключения между двумя позициями, мы можем вообще пропустить этот флаг, если вы используете CCRepeatForever вместе с CCSequence, как показано ниже (явные переменные используются для ясности, новы всегда можете объединить их в одну строку, если хотите):

CCMoveTo *moveTo_240_95 = [CCMoveTo actionWithDuration:1.5 position:ccp(240,95)];
CCMoveTo *moveTo_240_80 = [CCMoveTo actionWithDuration:1.5 position:ccp(240,80)];
CCSequence *actionsForBg2 = [CCSequence actions:moveTo_240_95, moveTo_240_80, nil];
CCAction *repeatForBg2 = [CCRepeatForever actionWithAction:actionsForBg2];
[bg2 runAction:repeatForBg2]

CCMoveTo *moveTo_240_100 = [CCMoveTo actionWithDuration:0.5 position:ccp(240,100)];
CCMoveTo *moveTo_240_112 = [CCMoveTo actionWithDuration:0.5 position:ccp(240,112)];
CCSequence *actionsForBg3 = [CCSequence actions:moveTo_240_100, moveTo_240_112, nil];
CCAction *repeatForBg3 = [CCRepeatForever actionWithAction:actionsForBg3];
[bg3 runAction:repeatForBg3]

CCSequence выполняет действия, которые вы передаете ему одно за другим в последовательности, CCRepeatForever будет повторять последовательность навсегда, покаВы вызываете [node stopAllActions] на узле или до тех пор, пока узел не будет освобожден.

0 голосов
/ 18 июня 2011

Я думаю, что-то вроде этого может быть тем, что вы ищете:

if (bgSkyer == false) {
    CCMoveTo *moveOne = [CCMoveTo actionWithDuration:0.5 position:ccp(240,100)];
    CCRepeatForever *repeatOne = [CCRepeatForever actionWithAction:moveOne];
    [bg3 runAction:repeatOne];

    CCMoveTo *moveTwo = [CCMoveTo actionWithDuration:1.5 position:ccp(240,95)];
    CCRepeatForever *repeatTwo = [CCRepeatForever actionWithAction:moveTwo];
    [bg3 runAction:repeatTwo];
}else{
    //just repeat code, etc...
}

Надеюсь, что это работает!

...