하향식 RPG 움직임을 어떻게 해결합니까?


13

Java로 작성중인 게임이 있습니다. 그것은 하향식 RPG이며 세계에서 움직임을 처리하려고합니다. 세계는 주로 절차 적이며 전 세계의 캐릭터 움직임을 처리하고 화면을 변경하는 방법을 다루는 데 어려움을 겪고 있습니다. 모든 타일을 포함하는 블록에 월드를로드했습니다.

캐릭터 움직임을 어떻게 해결합니까?

나는 혼란에 빠졌고 어디로 가야할지 알 수 없습니다.

편집 : 글쎄 나는 당면한 문제에 대해 추상적이었다.

지금은 모든 것을 2D 배열에 단단히 고정시키고 블록 ID와 블록에 플레이어 오프셋을 저장하는 것만 생각할 수 있습니다.

답변:


11

세계 좌표 사용

(또는 넣을 때 모든 것을 띄웁니다.)

월드 좌표는 일반적으로 작업하는 것이므로 그 이유는 충분합니다. 그것들은 세상에서 당신의 위치를 ​​나타내는 가장 간단하고 직관적 인 방법이며, 같은 세상에서 두 개체의 위치를 ​​실제로 비교할 수있는 유일한 방법입니다.

당신은 그를 개별 블록 내에서 추적함으로써 아무것도 얻을 수 없습니다. 글쎄, 하나의 장점은 그가 어떤 블록에 있는지 결정할 수 있지만 이미 월드 좌표로 계산할 수 있다는 것입니다.


이 답변의 나머지 부분은 플레이어가 월드 좌표를 기준으로 월드 블록을 계산하는 방법에 대한 설명입니다.

당신은 차원이있는 것처럼 나는 코드를 쓸 것이다 벡터 라는 이름의 클래스 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 개의 기능> 블록 내 추적 및 블록 간 전송의 모든 혼란


1
내가 찾던 것보다 더 나은 답변
WarmWaffles

0

귀하의 질문은 약간 추상적이지만 아마도 경로 찾기 알고리즘을 찾고 있습니다 .A * (http://en.wikipedia.org/wiki/A*_search_algorithm)를 제안합니다. 타일이 지형을 막지 않은 경우 캐릭터 타일을 타일로 이동하는 데 도움이됩니다.


1
렌더링을 다루는 방법에 더 가깝습니다. 각 블록에 블록 ID와 플레이어 오프셋을 저장합니까?
WarmWaffles
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.