나는 매우 기본적인 2D 게임을 달성하려고 노력 중입니다. 적의 위치는 화면에 나타나며 설정 포인트 (50과 500) 사이를왔다 갔다합니다. 우주 침략자 일종의. 내 문제는 내가 제대로 할 수 밖에 없지만 왼쪽으로 돌아와 반복하지 않는다는 것입니다.Monogame/XNA에서 적을 앞뒤로 움직이기
나는 그걸 들여다보기 전에 귀찮아서 실제로 알아낼 수는 없지만 실제로는 잘 될 것이라고 생각했지만 잘 작동하지 않는다고 생각했다. 왜 그런지는 모르겠다. 왜 그런지는 모르겠다. 내 코드는 스위치처럼 작동하도록되어 있습니다. 두 개의 if 문이 Update 루프 내에 있습니다. 하나는 다른 루프로, 다른 하나는 오른쪽으로 이동하고 다른 루프는 왼쪽으로 이동합니다. 괜찮 았지만 그렇게하지는 않습니다. 오른쪽으로 움직이면 왼쪽 부분 만 작동하지 않습니다.
그럼 왜 다음 코드가 작동하지 않습니까?
namespace _2D_game_num1
{
class Enemy
{
int health;
Vector2 enemy_location = new Vector2(50, 50);
Vector2 enemy_speed = new Vector2(1, 1);
Player player = new Player("dummy");
public Enemy()
{
health = 100;
}
public void UpdateLocation()
{
//Vector2 player_pos = player.GetLocation();
//if (player_pos.X < 200)
// Using the players location to figure out where the enemy should move
bool right = true;
bool left = false;
if (right)
{
enemy_location.X += enemy_speed.X;
if (enemy_location.X == 500)
{
right = false;
left = true;
}
}
if (left)
{
enemy_location.X -= enemy_speed.X;
if (enemy_location.X == 50)
{
right = true;
left = false;
}
}
}
public Vector2 GetLocation()
{
return enemy_location;
}
}
}
그리고 기본 게임 클래스에는 enemy1.UpdateLocation(); 업데이트 섹션 내에 올바르게 작동합니다 (잘 작동하는 플레이어 동작과 함께).
'오른쪽'변수와 '왼쪽'변수가 필요하지 않습니다. '올바른'변수 만 있으면 모든 것을 단순화 할 수 있습니다. 그것이 사실이라면, 당신은 올바르게 움직이고 있습니다. 거짓이라면, 당신은 왼쪽으로 움직이고 있습니다. 또한 벡터는 부동 소수점을 기반으로하기 때문에 평등하게 테스트하지 않아야합니다 (두 배로 동일 함). '> = 500'과'<= 50'을 사용하여 "close but not 500 or 50"오류를 피하는 것이 더 좋습니다. – itsme86
또 하나의 문제는, 클래스 멤버에 대해서 이야기하고 있던'right' 변수 하나를 만들고, UpdateLocation()에 로컬 변수를 넣지 말아야한다는 것입니다. 그 방법에 국부적이므로, 그 가치를 유지하지 못합니다. 지금 당장'UpdateLocation() '을 호출 할 때마다'right'를'true'로,'left'를'false'로 재설정합니다. 아마 당신이 가지고있는 주요 문제 일 겁니다. – itsme86