2011-06-29 13 views
3

私はiOSゲームを持っています。ボールがターゲットにぶつかると、ボールが爆発します。iOSで爆発アニメーションを作成するにはどうすればよいですか?

この爆発をアニメーション化するにはどうすればよいでしょうか?

+11

もちろん、実際のiPhoneが爆発しています。 – PengOne

+1

本当の答えが必要な場合は、ゲームを少し作ったか説明してください。どのような方法で描画していますか? OpenGL? Cocos2D? UIImageViewのですか? CoreGraphics?あなたの質問には詳細がないので、非常に多くの回答があります。 –

答えて

5

単純なものをお探しの場合は、

爆発をアニメーション化する一連の画像を作成します。それらを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]; 
+0

そのコードは動作しますが、Appleのパーティクルエミッタは、パーティクルの外観とソース/レートの放出を簡単に定義できるので、より優れています。たとえば、毎秒100個の粒子の速度で爆発する百万個の灰色の粒子を作成し、100単位/秒の速度で進行させることができ、重なった粒子はより暗いピクセルを生成するはずです。 – moonman239

0

iPhone Programming Tutorial: Animating a Game Sprite

あなたが爆発別の代替は、Cocos2dを使用して行うことを希望する必要がある場合:本当に

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

ないアニメーションを、また、質問から、あなたが使っているように見えるしていませんCocos2dですが、これを使用し始めると...

2

跳ね返るボールゲームでは、Cocos2DゲームとBox2dの物理(Cocos2Dに付属)エンジンが素晴らしい方法です。

レイWenderlichは、あなたが何をしたいのかを正確に3つの偉大なチュートリアルがあります

  1. Intro to Box2D with Cocos2D Tutorial: Bouncing Balls
  2. How To Create A Breakout Game with Box2D and Cocos2D Tutorial: Part 1
  3. How To Create A Breakout Game with Box2D and Cocos2D Tutorial: Part 2

をあなたはBOX2Dオブジェクトでの作業の基礎を乗り越えるたら重要なステップは、衝突が発生したときに通知する連絡先リスナー(チュートリアルで説明)を作成することです。衝突するオブジェクトが爆発のために必要なオブジェクトであるかどうかを確認してください(もしあなたの刻みのメソッドの接触を反復することによって)。もしそうなら、それらを破棄するオブジェクトのベクトルに加えてください。イテレータを無効にします)。衝突の座標を覚えて、爆発の旗を立てる。

ループを終了した後、ボディを破壊し、保存された位置で爆発効果を実行します。

Cocos2Dには、非常に便利な組み込みの爆発効果があり、自分のプロジェクトで使用しているものはCCParticleSunです。このエフェクトを使用している人のスクリーンショットを見つけることができますhere。 (奇妙な名前のCCParticleExplosionは、スクリーンの周りを飛んで多くの紙吹雪を与えました)。

これは私が働いている予備のコードからの関連部分です。これは主にチュートリアルのものです。あなたはまだ他のすべてをやる必要があります。あなたのinitメソッドであなたの世界とボディを作成しセットアップし、位置を更新し、力を加え、tickメソッドを描画し、Contact Listenerクラスを実装します。このすべてについてはチュートリアルを参照してください。

std::vector<b2Body *>toDestroy; 
std::vector<MyContact>::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<b2Body *>::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]; 
} 
1

あなたが望むものは、粒子放出システムを作り出す方法です。私の提案は、CAEmitterLayerを使用することです。レイWenderlichは素晴らしいチュートリアルを持っています:UIKit Particle Systems in iOS 5 Tutorial

関連する問題