Cocos2d: предварительная загрузка анимации вызывает сбой - PullRequest
1 голос
/ 28 января 2011

Я пытаюсь предварительно загрузить анимацию в методе init моего слоя.Затем я вызываю анимацию, если коснуться экрана.Приложение вылетает без сообщения об ошибке, как только я касаюсь экрана, и кажется, что это связано с вызовом предварительно загруженной анимации.Я хотел бы сделать это таким образом, так как кажется, что создавать анимацию каждый раз при прикосновении к экрану кажется дорогим, что, тем не менее, работает.Любые советы приветствуются.

Пример кода:

В моем заголовке:

@interface Test : CCLayer {
   NSMutableArray *wake;
   CCSprite* ani;
   CCAnimate *animate;
}
@end

В моей реализации:

    -(id) init {
        if( (self=[super init])) {      
    // enable touches
    self.isTouchEnabled = YES;

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"ani.plist" texture:[[CCTexture2D alloc] initWithImage:[UIImage imageNamed:@"ani.png"]]];
            ani = [CCSprite  spriteWithSpriteFrameName:@"ani1.png"]; //comes from .plist file
            ani.anchorPoint=ccp(0,0);
            ani.position = ccp(700,65); 
            [self addChild:ani z:30];

    wake = [NSMutableArray array];
            for(int i = 1; i <= 4; i++) {
                [wake addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"ani%d.png",i]]];
            }
            animate = [CCAnimate actionWithAnimation:[CCAnimation animationWithFrames:wake delay:1.0f] restoreOriginalFrame:FALSE];

        }
        return self;                                                   
    }

Обработка касания

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
// run the animation
   [ani runAction:animate];
}

Ответы [ 3 ]

0 голосов
/ 31 января 2011

Проблема решена путем создания свойств для массива и анимации в классе с использованием nonatomic, retain.

0 голосов
/ 16 февраля 2011

Вам нужно только сохранить анимацию, но массив может быть локальным.

self.myAnimation = [[CCAnimation animationWithFrames:myAniFramesArray delay:0.1f] retain];

Не забудьте сделать свойство неатомарным, сохранить как указано Chev и освободить любые объекты, которые вы сохраните, соответствующим методом dealloc.

0 голосов
/ 28 января 2011

Анимации в Cocos2d не предназначены для повторного использования. Вам нужно каждый раз создавать новый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...