2012-01-11 20 views
1

私は少しのLunar Landerクローンを作っています。その作業はかなり大丈夫です。今は着陸装置にパーティクル効果を追加しました。私の船の真ん中にパーティクルエフェクトが作成されます。XNA 2D回転スプライト(回転式着陸装置)

私がしたいことは、パーティクルが作成され、船の排気がスプライト上にあるということです。そして、これは私に困ってしまった。私はそれを計算することができるはずです、私は両方とも回転角度と現在の位置を持っているので、私は64x64スプライト内の任意のピクセルの回転位置を得ることができるはずです。

私はLander.exhaust.XとLander.exhaust.Y値の計算に興味があります。誰も私を正しい方向に向けることができますか?

//これは、私はそれのすべてを必要といけないことを確認イム、コードの一部です:)

Lander.acceleration.X = Lander.acceleration.X *(0.01f * gameTime.ElapsedGameTime.Seconds)。 Lander.acceleration.Y = Lander.acceleration.Y *(0.01f * gameTime.ElapsedGameTime.Seconds);

 Lander.velocity.Y = Lander.velocity.Y + (0.05f + Lander.velocity.Y * gameTime.ElapsedGameTime.Seconds); 
     Lander.oldvelocity.X = Lander.velocity.X; 
     Lander.oldvelocity.Y = Lander.velocity.Y; 

     Lander.exhaust.X = (float)Math.Cos(Lander.RotationAngle) * 0.1f + Lander.Position.Y ; 
     Lander.exhaust.Y = (float)Math.Sin(Lander.RotationAngle) * 0.1f + Lander.Position.X ; 


     Lander.Position.Y = Lander.velocity.Y + Lander.Position.Y; 
     Lander.Position.X = Lander.velocity.X + Lander.Position.X; 



     //if (Lander.Position.Y >= groundlevel + (Lander.mSpriteTexture.Height/2)) 
     if (Lander.Position.Y >= groundlevel) 
     { 
      Lander.Position.Y = groundlevel; 
      Lander.velocity.X = 0f; 
      Lander.oldvelocity.X = 0f; 

     } 

     float circle = MathHelper.Pi * 2; 
     RotationAngle = RotationAngle % circle; 
     Lander.RotationAngle = RotationAngle; 
     RotationAngledegrees = MathHelper.ToDegrees(RotationAngle); 
     if (keyState.IsKeyDown(Keys.Space)) 
     { 
      Lander.acceleration.X = (float)Math.Cos(Lander.RotationAngle) * 0.1f + Lander.acceleration.X; 
      Lander.acceleration.Y = (float)Math.Sin(Lander.RotationAngle) * 0.1f + Lander.acceleration.Y; 
      Lander.velocity.X = Lander.oldvelocity.X + Lander.acceleration.X; 
      Lander.velocity.Y = Lander.oldvelocity.Y + Lander.acceleration.Y; 
      particleEngine.EmitterLocation = new Vector2(Lander.exhaust.X, Lander.exhaust.Y); 

-lasse

+0

'particleEngine.EmitterLocation ...'あなたはおそらくparticleEngine.EmitterLocation = Lander.exhaust'は、排気がベクトル2 – annonymously

+0

はい、これはLander.exhaust.X =( – LHK

答えて

1
Lander.exhaust.X = (float)Math.Cos(RotationAngle) * 32 + Lander.Position.X; 
Lander.exhaust.Y = (float)Math.Sin(RotationAngle) * 32 + Lander.Position.Y; 

あなたがスプライトの初期角度に応じて、エミッタ32個の画素離れランダーの位置からなり角度にPI/2を減算又は加算する必要があります。

サイドノートでは、ゲームの各部分をそれぞれ独自のクラスに配置するとよいでしょう。後でもっと簡単に変更することができます。

そして別の事、あなたが位置に速度を追加するときに、あなたがこれを行うことができます:

Lander.Position += Lander.velocity; 

それは基本的に同じことを行います。あなたのラインで

+0

を動作するようには思えありがとう提供される '言うことができますfloat)Math.Cos(RotationAngle + MathHelper.Pi)* 32 + Lander.Position.X; Lander.exhaust.Y =(float)Math.Sin(RotationAngle + MathHelper.Pi)* 32 + Lander.Position.Y;これらの2つの行は排気をスーザーのすぐ下にアピールしますので、ありがとうございます。 – LHK

+0

スプライトの中心に近づけるように32を小さくすることができます。 – annonymously

+0

答えを正しいとマークするには、投票数の下のティックをクリックしてください – annonymously

関連する問題