XNA精灵运动出了问题

时间:2016-07-04 10:42:57

标签: c# xna 2d

Hy大家,所以首先关闭所有,这是我精灵的形象: enter image description here

我在游戏中将其缩小,所以它在游戏中并不是那么大。

所以无论如何我想要的代码结果如下:

protected override void Update(GameTime gameTime)
    {
        // Allows the game to exit
        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
            this.Exit();

        spritePos = spriteVelocity + spritePos;
        spriteR = new Rectangle((int)spritePos.X, (int)spritePos.Y, spriteT.Width, spriteT.Height);
        spriteOrigin = new Vector2(spriteR.Width/2, spriteR.Height / 2);

        if (Keyboard.GetState().IsKeyDown(Keys.Right)) rotation += 0.1f;
        if (Keyboard.GetState().IsKeyDown(Keys.Left)) rotation -= 0.1f;

        if (Keyboard.GetState().IsKeyDown(Keys.Up))
        {
            spriteVelocity.X = (float)Math.Cos(rotation) * tangentialVelocity;
            spriteVelocity.Y = (float)Math.Sin(rotation) * tangentialVelocity;
        } else if (spriteVelocity != Vector2.Zero)
        {
            float i = spriteVelocity.X;
            float j = spriteVelocity.Y;

            spriteVelocity.X = i -= friction * i;
            spriteVelocity.Y = j -= friction * j;
        }

        base.Update(gameTime);
    }

然后绘制方法:

protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);

        spriteBatch.Begin();

        foreach(Bushes bush in bushes)
        {
            bush.Draw(spriteBatch);
        }

        player.Draw(spriteBatch);
        spriteBatch.Draw(spriteT, spritePos, null, Color.White, rotation, spriteOrigin, 0.1f, SpriteEffects.None, 0f);
        spriteBatch.End();

        base.Draw(gameTime);
    }

当我按下'向上'箭头时,这个小火箭应该指向它指向的方向(因为我可以用左右箭头旋转它使它指向所需的位置),但是这个代码的结果是当我按向上箭头时,精灵首先向右移动,当它旋转时它不会转到它尖锐但有点侧向的地方:/

我在这里做错了什么?

PS。所有那些在代码中声明和初始化的变量都是全局变量,并在Initialize()和LoadContent()方法中初始化:/

1 个答案:

答案 0 :(得分:0)

如果你的旋转初始化为0,它应该指向右边,看看下面三角形圆圈上0点的位置:)

Trig Circle

您可以使用Vector2.Transform计算您的方向,并将参数(第一个) Vector2(0,1)设为您的参考方向。

或者您将精灵向右旋转并在Pi / 2处初始化角度。