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 : 마우스와 키보드 입력을 모두 수용 할 수있는 변수/유형을 아는 사람이 있습니까?