向它面向的方向移动一个精灵,为什么我的尝试不起作用?

时间:2014-09-02 20:00:07

标签: xna xna-4.0 monogame

我正在使用MonoGame开发Windows 8商店应用/游戏(不适用于手机)。我也在使用XAML项目,但是这个问题与XAML无关。

我试图让一艘船沿着它所面向的方向移动,并且可以通过按左右键来旋转船来改变方向。向上键用于使船舶朝向其方向移动。

当游戏开始时,船的图像/纹理最初朝下(想象一个箭头朝下),所以当我按下向上键我想向下移动它,但它向右移动。我收集过这与旋转有关吗?

我已经用谷歌搜索了如何解决我的问题并尝试了各种方法,这是我最好的尝试,但它不起作用。

我的父级精灵课程:

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Ship_Meteor_Game_V1
{
    abstract class cSprite
    {
        #region Properties
        Texture2D spriteTexture;
        Rectangle spriteRectangle;
        Vector2 spritePosition;

        public Texture2D SpriteTexture { get { return spriteTexture; } set { spriteTexture = value; } }
        public Rectangle SpriteRectangle { get { return spriteRectangle; } set { spriteRectangle = value; } }
        public Vector2 SpritePosition { get { return spritePosition; } set { spritePosition = value; } }
        #endregion

        abstract public void Update(GameTime gameTime);

        abstract public void Draw(SpriteBatch spriteBatch);

    }
}

我的玩家类:

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Ship_Meteor_Game_V1
{
    class cPlayer : cSprite
    {
        Vector2 origin;
        float rotation;
        float speed;

        public cPlayer()
        {
        }

        public cPlayer(Texture2D newTexture2D, Vector2 newPosition)
        {
            SpriteTexture = newTexture2D;
            SpritePosition = newPosition;
            speed = 2;
            rotation = 0;
        }
        public override void Update(GameTime gameTime)
        {

            if(Keyboard.GetState().IsKeyDown(Keys.Right))
            {
                rotation = rotation + 0.1f;
            }

            if(Keyboard.GetState().IsKeyDown(Keys.Left))
            {
                rotation = rotation - 0.1f;
            }

            if (Keyboard.GetState().IsKeyDown(Keys.Up))
            {
                Move();
            }
        }

        public override void Draw(SpriteBatch spriteBatch)
        {
            spriteBatch.Draw(SpriteTexture, SpritePosition, null, Color.White, rotation, origin, 0.2f, SpriteEffects.None, 0f);
        }
        public void Move()
        {
            Vector2 direction = new Vector2( (float)Math.Cos(rotation), (float)Math.Sin(rotation));
            direction.Normalize();
            SpritePosition = SpritePosition + (direction * speed);
        }
    }
}

基本上我希望一艘船朝着它面向的方向移动,而不是它一直朝着它面向的方向侧向移动,我不知道如何解决它。如果有的话,我可以告诉你任何额外的课程/代码。

PS:任何人都知道可以接受鼠标和键盘输入的变量/类型吗?

1 个答案:

答案 0 :(得分:2)

无法看到该代码有任何明显错误。

猜测是你在内容管理器中使用的船舶图形没有朝上。

如果是这种情况,您必须在图像编辑器中旋转它,或修改您的起始旋转。

我的赌注是它面临正确,这将是一个可以理解的混乱,因为在常规数学中弧度0将面临正确。然而,在Xna中,0已经到了。