세계 좌표 사용
(또는 넣을 때 모든 것을 띄웁니다.)
월드 좌표는 일반적으로 작업하는 것이므로 그 이유는 충분합니다. 그것들은 세상에서 당신의 위치를 나타내는 가장 간단하고 직관적 인 방법이며, 같은 세상에서 두 개체의 위치를 실제로 비교할 수있는 유일한 방법입니다.
당신은 그를 개별 블록 내에서 추적함으로써 아무것도 얻을 수 없습니다. 글쎄, 하나의 장점은 그가 어떤 블록에 있는지 결정할 수 있지만 이미 월드 좌표로 계산할 수 있다는 것입니다.
이 답변의 나머지 부분은 플레이어가 월드 좌표를 기준으로 월드 블록을 계산하는 방법에 대한 설명입니다.
당신은 차원이있는 것처럼 나는 코드를 쓸 것이다 벡터 라는 이름의 클래스 Vector2
지오메트리에서 찾을 벡터의 종류가 아닌 - Vector
에 의해 제공 목록 유형을 java.util
. 기하 Vector 클래스가없는 경우 온라인에서 찾거나 직접 작성해야합니다 (Java의 고품질 지오메트리 라이브러리를 아는 사람이 있습니까?)
Vector2 클래스 에는 공개 숫자 인 X
필드와 Y
필드가 있습니다 (여기서 어떤 숫자 유형이든 상관 없습니다).
// Current player X,Y position in the world
Player.Position.X, Player.Position.Y
// An array of map blocks with consistent width and height
Block[x][y] blocks = World.GetBlocks();
// We'll wing it with an example global width/height for all blocks
Block.GetWidth() == 100;
Block.GetHeight() == 100;
// To ensure we're on the same page:
// blocks[0][0] should be at position (0,0) in the world.
// blocks[2][5] should be at position (200,500) due to the width/height of a block.
// Also:
// Assuming (0,0) is in the top-left of the game world, the origin of a block
// is its top-left point. That means the point (200,500) is at the top-left of
// blocks[2][5] (as oppose to, say, its center).
public Vector2 GetPlayersBlockPosition() {
Vector2 blockPosition = new Vector2();
blockPosition.X = (int)(Player.Position.X / Block.GetWidth());
blockPosition.Y = (int)(Player.Position.Y / Block.GetHeight());
return blockPosition;
}
public Block GetPlayersBlock() {
Vector2 bp = GetPlayersBlockPosition();
return blocks[bp.X, bp.Y];
}
Block block = GetPlayersBlock();
2 개의 기능> 블록 내 추적 및 블록 간 전송의 모든 혼란