현재 XNA에 플랫폼 게임을 작성 중입니다. 충돌 테스트는 현재 foreach 루프를 실행하여 플레이어의 테두리 상자를 모든 타일의 테두리 상자로 테스트하여 작동합니다. 그러나 플레이어가 어떤 블록을 만지지 않고 있는지 테스트하는 방법을 알 수는 없습니다.XNA의 비 충돌 타일 테스트하기
플레이어가 공중에 있는지 확인할 수 있도록 플레이어가 아무 블록도 건드리지 않는지 테스트하려면 어떻게해야합니까? 어떤 도움이나 조언이라도 대단히 감사하겠습니다. 미리 감사드립니다. /////////////////////////////////////
는
내 충돌 코드는
입니다if (personRectangle.TouchTopOf(newRectangle))
{
onGround = true;
test = false;
test2 = true;
}
대응 BOOL 시험
public static bool TouchTopOf(this Rectangle r1, Rectangle r2)
{
return (r1.Bottom >= r2.Top - 1 &&
r1.Bottom <= r2.Top + (r2.Height/2) &&
r1.Right >= r2.Left + (r2.Width/5) &&
r1.Left <= r2.Right - (r2.Width/5));
}
그리고은 Game1.cs 업데이트 코드 테스트 충돌의 조각이다. 내지도 클래스에 타일의 목록입니다
foreach (CollisionTiles tile in map.CollisionTiles)
player.Collision(tile.Rectangle);
private List<CollisionTiles> collisionTiles = new List<CollisionTiles>();
내가 무슨 뜻인지 잘 모르겠다. 현재 경계를 테스트하기 위해 rectangle.Top 등의 메서드를 사용하고 있습니다. 그러나 모든 블록을 테스트하고 일부 블록을 만지기 때문에 다른 블록을 만져서 혼란스러워 지므로 if (true) 및 else (false)가 트리거됩니다. 내가 어떤 블록을 만지지 않고 있는지 테스트 해보고 싶습니다. – Brecon
@Brecon 내 편집을 참조하십시오. –