动画结束后,Cocos2D setvisible = no

时间:2012-07-26 17:35:17

标签: objective-c ios animation cocos2d-iphone

在我的代码小行星驶向船上, 如果激光撞击小行星,我想实施爆炸动画。 小行星应该运行爆炸动画并切换到隐形模式。

当目标被击中时没有动画,目标成功切换到不可见模式。没有将对象设置为不可见,动画运行得很好。当我将程序代码放在一起而没有看到动画时,它会快速将对象设置为不可见。

我如何看到动画然后将其设置为隐藏模式。 (目标也称小行星的速度不同,其中一些速度太慢而另一些速度慢) 将目标置于隐形状态的想法是防止它们发出命运。

我尝试了这个问题& answer cocos2d autoremove sprite after animation没有工作

for (CCSprite *asteroid in _asteroids) 
{        
     if (!asteroid.visible) continue;

        for (CCSprite *shipLaser in _shipLasers)
        {                        
            if (!shipLaser.visible) continue;

            if (CGRectIntersectsRect(shipLaser.boundingBox, asteroid.boundingBox)) 
            {                
                [[SimpleAudioEngine sharedEngine] playEffect:@"explosion_large.caf"];

                //explosion zombie animation starts 
                NSMutableArray *walkAnimFrames = [NSMutableArray array];
                for(int i = 1; i <= 12; ++i) 
                {
                    [walkAnimFrames addObject:
                     [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
                      [NSString stringWithFormat:@"zombieexplodes%d.png", i]]];
                }
                CCAnimation *walkAnim = [CCAnimation 
                                         animationWithFrames:walkAnimFrames delay:0.1f];


                _dieAction = [CCRepeatForever actionWithAction:
                               [CCAnimate actionWithAnimation:walkAnim restoreOriginalFrame:NO]];

                [asteroid runAction:_dieAction];
                //explosion zombie ends

                [self addPoint];

                //change meme to woohoo.png   
                [_ship setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: @"woohoo.png"]];

                shipLaser.visible = NO;
                [asteroid setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: @"zombieexplodes13.png"]];
                //asteroid.visible=NO;


                continue;
            }
        }
}

2 个答案:

答案 0 :(得分:1)

没有在Cocoa2D中完成游戏开发,但是当我制作这样的游戏时,我会有一个单独的爆炸对象,当它的动画结束时它会自动移除。所以你应该生成一个爆炸对象并立即将小行星变为不可见。如果您无法在动画完成时自动移动,请定时爆炸,然后在爆炸对象上设置一个计时器以自行移除。

我注意到你让小行星变得不可见......你应该把它们移走 - 当它们不可见时它们仍会占用记忆。

答案 1 :(得分:1)

在呼叫时使用此样式:

CCAnimation *walkAnim = [CCAnimation 
                         animationWithFrames:walkAnimFrames delay:0.1f];
id animate  = [CCAnimate actionWithAnimation:walkAnim restoreOriginalFrame:NO];
id calFuncN = [CCCallFuncN actionWithTarget:self selector:@selector(explodeAnimDone:)];
id sequence = [CCSequence actions:animate, calFuncN,nil];

[asteroid runAction:sequence];

动画完成后禁用精灵。

-(void)explodeAnimDone:(id)sender
{
    CCNode *myNode = (CCNode*)sender;
    myNode.visible = false;
}