在我的代碼中,朝向船的小行星 如果激光撞擊小行星,我想實現爆炸動畫。 小行星應運行爆炸動畫並切換到隱形模式。Cocos2D setvisible =動畫完成後沒有
當目標被擊中時,沒有動畫,目標成功切換到隱形模式。沒有將對象設置爲不可見,動畫效果很好。當我將程序代碼放在一起而沒有看到動畫時,它很快將對象設置爲隱形。
我怎樣才能看到動畫,然後將其設置爲隱形模式。 (目標aka小行星速度不同,其中一些速度太快,而其他速度太慢) 將目標置於不可見狀態的想法阻止了它們撞上船。
我想這個問題的答案& 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;
}
}
}
我喜歡CCCallBlockN樣品: CCCallBlockN * calFuncN = [CCCallBlockN actionWithBlock:^(CCNode *節點){ node.visible = FALSE; } – zeiteisen 2012-07-26 19:06:05
@zeiteisen,感謝這個信息,它減少了代碼行數。 – Guru 2012-07-26 19:17:18
像Matthijs Hollemans說的那樣:懶惰是程序員的最大美德:) – zeiteisen 2012-07-26 19:44:30