objective-c - Cocos2D setvisible =no 动画结束后

标签 objective-c ios animation cocos2d-iphone

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

目标被击中时没有动画,目标成功切换到隐身模式。在不将对象设置为不可见的情况下,动画运行良好。当我因为程序代码将它们放在一起而没有看到动画时,它很快将对象设置为不可见。

我怎样才能既看到动画又将其设置为不可见模式。 (目标又名小行星的速度各不相同,其中一些太快而另一些则很慢) 将目标隐藏起来的想法是防止他们撞到船上。

我试过这个问答 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;
            }
        }
}

最佳答案

调用时使用这种风格:

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];

动画完成后禁用 Sprite 。

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

关于objective-c - Cocos2D setvisible =no 动画结束后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11674834/

相关文章:

iOS - 如何推送到 View Controller 并在返回时保持正确的 "View Stack"

objective-c - 将元数据添加到 Objective-C 方法和属性

iphone - iPhone开发证书可以重复使用吗?

android - 如何用动画扩展布局高度?

html - 在 UIWebView 中将 HTML 内容显示为文本

ios - Kiwi 规范的全局助手

ios - 在没有启动屏幕的情况下强制 iPad Pro 达到全分辨率

ios - 在第一个 IOS 项目 Xcode 4 中获取信号 SIGABRT

html - CSS3 动画 : blinking overlay box

javascript - 将 DIV 动画设置为全高并切换回定义的高度