2011-02-02 3 views
0

64 x 64 픽셀 타일 (10 행, 10 열)의 타일 맵이 있습니다. 움직이는 유닛과 벽이나 물체 간의 충돌을 감지하고 싶습니다. 유닛을 움직이면서 타일 맵의 중앙에 놓고 유닛이 곧 위치를 업데이트하지 않고 유닛의 방향을 바꿔 타일 중심에 던지면 어떻게 감지 할 수 있습니까?XNA 타일 기반 충돌

예 : TilePositionX = 3에 TilePosition = 0 인 객체가 있고 그 객체가 단위를 자신의 방향으로 변경하지만 항상 가운데에 머무르게하면. 유닛이 XVelocity = 1.0f (모든 속도 일 수 있음)에서 모든 오브젝트를 향해 오른쪽으로 향하고 있다면. 유닛의 중심 위치를 감지 한 다음 오프셋을 추가하고 타일 안에 완전히 있는지 확인해야합니까? 나는 내 문제에 대한 좋은 해결책이 될 수 없다.

+0

아직이 stackoverflow 링크를 보지 않았습니까? 나는 이것이 조금 물었을 거라고 믿는다. 아마 닫혀야만했다. http://stackoverflow.com/questions/2316133/tile-based-collision-in-xna – jluzwick

답변

0

비슷한 상황에서 내가 수행 한 작업은 타일로 이동하려는 타일의 중심 인 유닛의 대상 대상 (픽셀 단위)을 처리 한 다음 모든 업데이트로 유닛을 해당 대상으로 더 가까이 이동시킵니다. 유닛이 타일 중심에 놓이면 유닛이 새로운 목적지를 확인합니다.

예 : 단위 A는 픽셀 (32,32) (타일의 가운데)에있는 좌표 (0,0)에 있습니다. A는 타일 (0,1)을 향해 이동하므로 새로운 대상은 96). 모든 업데이트는 유닛이 (0,1) 픽셀 아래로 이동합니다. 단위가 타일 (0,1)의 중심 인 (32,96)이되면, 다음으로 이동할 위치를 결정할 수 있습니다.

0

내 게임에서이 문제를 처리하는 방법은 타일과 픽셀 오프셋을 유지하는 것이고 타일은 항상 솔리드 번호를 유지합니다 .1, 2, 픽셀 오프셋은 방향에 따라 음수로 이동했습니다. 타일 ​​크기보다 커지면 0으로 재설정하고 부식 타일 유형을 더하거나 뺍니다. 거기에서 이동할 수없는 타일을 치는 경우를 결정하는 것이 상당히 쉽습니다.