Stworzyłem CCAnimation, jak widać poniżej. Próbowałem obniżyć opóźnienie do wartości poniżej 0,05f i teraz animacja się nie kończy! To tylko 8 klatek. Nie wiem, czy robię coś złego. Na początku myślałem, że to wyciek pamięci i przegrywam akcję, więc przypisałem to do silnej właściwości, aby to przetestować, i nadal to robiłem. Nie jestem pewien, w jaki sposób opóźnienie może spowodować, że moja animacja nie zakończy się. W symulatorze biegam z szybkością 60 klatek na sekundę.

Korzystanie z Kobolda 2.0.4

Czy ktoś może pomóc?

else if([model currentState] == PROCESSING_FIRST_ACTION)
        {
            CCDirector* director = [CCDirector sharedDirector];    // process model
            //Get the top left corner of the screen
            int screen_height = director.screenSizeAsPoint.y;
            int screen_width = director.screenSizeAsPoint.x;

            id attacker = [model attacker];
            id attackChoice = [attacker getRegisteredAttack];

            CCAction* attack = [model.resourceManager animation: @"simple-attack-frame"];
            CCSprite * attackSprite = [model.resourceManager sprite: @"simple-attack-frame-01"];

            attackSprite.position = ccp(screen_width - rxa(80), screen_height - rya(80));
            attackSprite.tag = 5;
            self.action = attack;

            CCNode * check = [self getChildByTag:5];

            if(check == nil)
            {
                [self addChild: attackSprite];
                [attackSprite runAction:attack];
            }
        }

resource manager:

-(id)animation: (NSString*)_resource
{
    NSMutableArray *frames = [NSMutableArray array];

    for(int i = 1; i <= 8; ++i)
    {
        [frames addObject:
         [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
          [NSString stringWithFormat:@"%@-0%d", _resource, i]]];
    }

    CCAnimation *animation = [CCAnimation animationWithSpriteFrames: frames delay:1/60];

    CCAction * action = [CCAnimate actionWithAnimation: animation];

    return action;

}
0
AwDogsGo2Heaven 20 październik 2012, 08:45

2 odpowiedzi

Najlepsza odpowiedź

Po grzebaniu w sieci znalazłem rozwiązanie. To nie ja zgłosiłem to rozwiązanie, ale mogę zaświadczyć, że naprawiło moje problemy:

https://github.com/cocos2d/cocos2d-iphone/commit/60f9cc98783b9a6a5635db4f468f83e0511c74c8

0
AwDogsGo2Heaven 22 październik 2012, 02:27

W twojej linii

CCAnimation *animation = [CCAnimation animationWithSpriteFrames: frames delay:1/60];

Ustawiasz opóźnienie na 1/60, ale ponieważ 1 i 60 są liczbami całkowitymi, 1/60 to 0. Spróbuj użyć 1.0f/60.0f, a otrzymasz dzielenie zmiennoprzecinkowe.

1
Paul Masri-Stone 22 październik 2012, 12:18