SKAction не работает должным образом

У меня есть последовательность SKActions, которые я хотел бы воспроизвести, но они не воспроизводятся должным образом. Глаз только закрывается и больше никогда не открывается. Я понятия не имею, почему это происходит, но, возможно, вы знаете! Помощь приветствуется, спасибо.

-(void)blink {

    SKAction *delay = [SKAction waitForDuration:3];
    SKAction *blinkEye = [SKAction resizeToHeight:1 duration:.2];
    SKAction *delay2 = [SKAction waitForDuration:.5];
    SKAction *openEye = [SKAction resizeToHeight:3 duration:.2];

    SKAction *group1 = [SKAction group:@[delay,blinkEye]];
    SKAction *group2 = [SKAction group:@[delay2,openEye]];

    SKAction *all = [SKAction sequence:@[group1,group2]];

    SKAction *repeat = [SKAction repeatActionForever:all];

    [self runAction:repeat];

}

В MyScene.m

-(void)update:(CFTimeInterval)currentTime {
 /* Called before each frame is rendered */
    Player *player = (Player *)[self childNodeWithName:@"player"];
    Player *lefteye = (Player *)[player childNodeWithName:@"leye"];
    Player *righteye = (Player *)[player childNodeWithName:@"reye"];
    [lefteye blink];
    [righteye blink];

}

person BruceTheGoose    schedule 17.08.2014    source источник


Ответы (1)


Нет необходимости в группировке, это вызывает проблему.

SKAction *delay = [SKAction waitForDuration:3];
SKAction *blinkEye = [SKAction resizeToHeight:1 duration:.2];
SKAction *delay2 = [SKAction waitForDuration:.5];
SKAction *openEye = [SKAction resizeToHeight:3 duration:.2];

SKAction *all = [SKAction sequence:@[delay,blinkEye, delay2,openEye]]];

И позволять моргать глазом при каждом обновлении кадра не получится. Эта функция вызывается до 60 раз в секунду.

Вместо этого сделайте это так при создании объекта глаза:

SKAction *delay = [SKAction waitForDuration:3];
SKAction *blinkEye = [SKAction resizeToHeight:1 duration:.2];
SKAction *delay2 = [SKAction waitForDuration:.5];
SKAction *openEye = [SKAction resizeToHeight:3 duration:.2];

SKAction *all = [SKAction sequence:@[delay,blinkEye, delay2,openEye]]];

//create the lefteye object
lefteye = [[Eye alloc] init...]; 
//create the righteye object
righteye = [[Eye alloc] init...];
[lefteye repeatActionForever:all];
person idmean    schedule 17.08.2014
comment
Итак, где я могу его использовать? - person BruceTheGoose; 17.08.2014