我如何在iOS上制作爆炸动画?

我有一个iOS游戏,当一个球击中目标时会爆炸。

什么是动画爆炸的最佳方式?

如果你正在寻找简单的东西。

制作一系列使爆炸生动的图像。 将它们添加到UIImageView并启动动画。 像这样的东西:

UIImage *image0 = [UIImage imageNamed:@"explosion0.png"]; UIImage *image1 = [UIImage imageNamed:@"explosion1.png"]; UIImage *image2 = [UIImage imageNamed:@"explosion2.png"]; UIImage *image3 = [UIImage imageNamed:@"explosion3.png"]; myImageView.animationImages = [NSArray arrayWithObjects:image0, image1, image2, image3, nil]; [myImageView setAnimationDuration:0.75f]; [myImageView startAnimation]; 

对于一个弹跳球游戏, Cocos2D游戏和Box2d物理(包括在Cocos2D)引擎是一个很好的方式。

Ray Wenderlich有三个很棒的教程,关于你想要做什么:

  1. Box2D简介Cocos2D教程:弹跳球
  2. 如何使用Box2D和Cocos2D创建一个突围游戏教程:第1部分
  3. 如何使用Box2D和Cocos2D创建一个分组游戏教程:第2部分

一旦您了解了使用Box2d对象的基础知识,关键步骤是创建一个Contact Listener(如教程中所述),它将告诉您何时发生冲突。 检查(通过在tick方法中迭代联系人)是否碰撞对象是爆炸所需的对象,如果是,则将它们添加到要销毁的对象向量中(我们不能在迭代联系人时执行此操作或我们将使迭代器无效)。 记住碰撞的坐标并设置爆炸标志。

退出循环后,破坏物体并在保存的位置运行爆炸效果。

Cocos2D有一些非常好的内置爆炸效果,我用于我的项目的是CCParticleSun。 您可以在此处找到使用此效果的某人的屏幕截图。 (奇怪的名字CCParticleExplosion只是在屏幕上飞了很多五彩纸屑。)

以下是我工作的一些初步代码的相关部分,主要来自教程。 你仍然需要做其他一切,例如。 在init方法中创建和设置你的世界和身体,更新位置,应用力量,并在你的tick方法中绘制,实现你的Contact Listener类等。对于所有这些,请参阅教程。

 std::vectortoDestroy; std::vector::iterator pos; CGPoint p; bool explode = FALSE; for(pos = _contactListener->_contacts.begin(); pos != _contactListener->_contacts.end(); ++pos) { MyContact contact = *pos; if ((contact.fixtureA->GetBody() == _moonBody && contact.fixtureB->GetBody() == _moon2Body) || (contact.fixtureA->GetBody() == _moon2Body && contact.fixtureB->GetBody() == _moonBody)) { NSLog(@"Moons collided!"); explode = TRUE; p = CGPointMake(PTM_RATIO*(_moonBody->GetPosition().x + _moon2Body->GetPosition().x)/2.,PTM_RATIO*(_moonBody->GetPosition().y + _moon2Body->GetPosition().y)/2.); if (std::find(toDestroy.begin(), toDestroy.end(), _moonBody) == toDestroy.end()) { toDestroy.push_back(_moonBody); } if (std::find(toDestroy.begin(), toDestroy.end(), _moon2Body) == toDestroy.end()) { toDestroy.push_back(_moon2Body); } } } std::vector::iterator pos2; for(pos2 = toDestroy.begin(); pos2 != toDestroy.end(); ++pos2) { b2Body *body = *pos2; if (body->GetUserData() != NULL) { CCSprite *sprite = (CCSprite *) body->GetUserData(); [sprite.parent removeChild:sprite cleanup:YES]; } world->DestroyBody(body); } if (explode) { explosion = [[CCParticleSun alloc]initWithTotalParticles:250]; explosion.texture = [[CCTextureCache sharedTextureCache] addImage:@"fire.png"]; explosion.autoRemoveOnFinish = YES; explosion.startSize = 15.0f; explosion.speed = 30.0f; explosion.position = p; explosion.duration = 1.0f; [self addChild:explosion z:self.zOrder+1]; } 

那么,你想要的是一种创建粒子发射系统的方法。 我的建议是使用CAEmitterLayer。 Ray Wenderlich有一个很棒的教程: iOS 5教程中的UIKit粒子系统

iPhone编程教程:动画游戏精灵

如果你需要制作爆炸,另一种方法是使用Cocos2d并执行:

 CCParticleSun *anExplosion=[CCParticleGalaxy node]; [kk setPosition:ball.position]; [self addChild:anExplosion]; 

从你似乎没有使用Cocos2d的问题来看,也不是真的动画,但如果你开始使用它,你可以这样做……