소행성을 기반으로 2D 게임을 만들고 있습니다. 그리고 그 경기에서 저는 배를 어떤 방향으로 밀어 넣을 필요가 있습니다.Monogame 방향으로 이동
우주선을 그릴 수있어 선회합니다. 그러나 그것이 앞으로 나아가는 것에 관해서는 내 문제가 계속된다.
저는이 문제에 대해 머리를 맞출 수없는 것 같습니다.
player.cs
protected Vector2 sVelocity;
protected Vector2 sPosition = Vector2.Zero;
protected float sRotation;
private int speed;
public Player(Vector2 sPosition)
: base(sPosition)
{
speed = 100;
}
public override void Update(GameTime gameTime)
{
attackCooldown += (float)gameTime.ElapsedGameTime.TotalSeconds;
// Reset the velocity to zero after each update to prevent unwanted behavior
sVelocity = Vector2.Zero;
// Handle user input
HandleInput(Keyboard.GetState(), gameTime);
if (sPosition.X <= 0)
{
sPosition.X = 10;
}
if (sPosition.X >= Screen.Instance.Width)
{
sPosition.X = 10;
}
if(sPosition.Y <= 0)
{
sPosition.Y = 10;
}
if (sPosition.Y >= Screen.Instance.Height)
{
sPosition.Y = 10;
}
// Applies our speed to velocity
sVelocity *= speed;
// Seconds passed since iteration of update
float deltaTime = (float)gameTime.ElapsedGameTime.TotalSeconds;
// Multiplies our movement framerate independent by multiplying with deltaTime
sPosition += (sVelocity * deltaTime);
base.Update(gameTime);
}
private void HandleInput(KeyboardState KeyState, GameTime gameTime)
{
if (KeyState.IsKeyDown(Keys.W))
{
//Speed up
speed += 10;
sVelocity.X = sRotation; // I know this is wrong
sVelocity.Y = sRotation; // I know this is wrong
}
else
{
//Speed down
speed += speed/2;
}
if (KeyState.IsKeyDown(Keys.A))
{
//Turn left
sRotation -= 0.2F;
if (sRotation < 0)
{
sRotation = sRotation + 360;
}
}
if (KeyState.IsKeyDown(Keys.D))
{
//Turn right
sRotation += 0.2F;
if (sRotation > 360)
{
sRotation = sRotation - 360;
}
}
}
내가 닫거나 심각 오른쪽에서 오전 (이 모든 결정의 게임 것은 나를 ^^ 새로운이다)?
'sVelocity * = speed' : 또한
를, 아마 같은 것을 사용하는 것이 바람직 할 것 :'speed'가'10'이고'sVelocity'가'(0,1)'이라면'(0100000000000000)'(''3,00 프레임)에서''* 프레임 당 100 만 단위). 그 라인이 예기치 않은 움직임의 측면에서 가장 큰 범인이라고 생각합니다 ... –
@DanPuzey 그는 또한 모든 프레임에'sVelocity = Vector.Zero'를 가지고 있습니다. 그것은 아마 제어 할 수없는'속도'가치 그 자체 일 것입니다. – dureuill
@dureuill : 아, 그 리셋을 놓쳤습니다. 당신은 아마도 맞을 것입니다. 과도한 속도를 제어하면 회전과 관련된 현상을 볼 수 있습니다. –