2014-09-02 5 views
0

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

답변

2

해당 코드에서 명백한 오류가 보이지 않습니다.

콘텐츠 관리자에서 위쪽으로 향한 우주선 그래픽을 사용하고있는 것 같습니다.

이미지 편집기에서 이미지를 회전하거나 시작 회전을 수정해야합니다.

내기가 맞을 것입니다. 라디안 0에 대한 정규 수학에서와 같이 이해할 수있는 혼동이 될 것입니다. 0은 옳은 방향입니다. 그러나 Xna에서는 0이 올라간다.