XNA 2D旋转精灵,具有相对旋转位置(月球着陆器排气装置)

时间:2012-01-11 19:40:43

标签: xna rotation 2d sprite

我正在制作一个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

1 个答案:

答案 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;

它基本上做同样的事情。