我正在制作一个Lunar Lander克隆,并且它的工作非常好,现在我已经为着陆器添加了粒子效果,所以当推力进入时,粒子效果会在我船的中间产生。 / p>
我希望发生的是粒子被创建,船只尾气在精灵上。这让我很难过。我知道我应该能够计算它,因为我都有旋转角度和当前位置,所以我应该能够获得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 :(得分:1)
Lander.exhaust.X = (float)Math.Cos(RotationAngle) * 32 + Lander.Position.X;
Lander.exhaust.Y = (float)Math.Sin(RotationAngle) * 32 + Lander.Position.Y;
您可能需要减去或添加PI/2
到角度,具体取决于精灵的初始角度,发射器距离着陆器的位置是32像素。
另一方面,将游戏的每个部分都放在自己的类中可能是一个好主意,它会让以后更改内容变得更容易。
另外,当你将速度添加到位置时,你可以这样做:
Lander.Position += Lander.velocity;
它基本上做同样的事情。