我正在使用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:任何人都知道可以接受鼠标和键盘输入的变量/类型吗?
答案 0 :(得分:2)
无法看到该代码有任何明显错误。
猜测是你在内容管理器中使用的船舶图形没有朝上。
如果是这种情况,您必须在图像编辑器中旋转它,或修改您的起始旋转。
我的赌注是它面临正确,这将是一个可以理解的混乱,因为在常规数学中弧度0将面临正确。然而,在Xna中,0已经到了。