2012-12-29 3 views
3

전문가가 2D 게임의 경계를 어떻게 잡니까? 내가 할 방법은 내가 스프라이트가 특정 지역으로 이동하고 싶지 않아 말할 수 있습니다 :Java 게임의 경계, "전문가"는 어떻게합니까?

//Example 
if ((playerPosX >= 825) && (playerPosX <= 910)&& (playerPosY >= 170) && (playerPosY <= 255)) { 
    //do nothing 
}else{ 
    //move 
} 

을하지만, 일부 게임은 거기에 경계를 많이 그래서 궁금하네요 가지고, 더 쉬운 방법이있다. 나는 누군가가 전체 게임에서 위의 방법을 사용할 방법이 없다고 생각합니다. 단지 움직임을 막기 위해서입니다.

편집 : 내 질문은 주로 포켓몬 또는

+0

이것은 무엇보다 디자인 문제에 더 가깝습니다. – fge

+1

@ fge 그래서 모든 것을 디자인하는 방법에있어? 그러면 2D 프로그램을 설계하여 경계를 쉽게 구현할 수있는 가장 좋은 방법은 무엇입니까? – Exikle

+0

http://gamedev.stackexchange.com/ – user1824407

답변

0

두 가지 가능성이 내 마음에 와서 파이널 판타지 유사 당신이 걸어 다닐 수있는 게임,

  • 차단 된 첫번째 기술에 관한됩니다 영역을 폴리곤으로 지정하고 폴리곤 테스트에서 포인트를 사용하여 스프라이트가이 위치로 이동할 수 있는지 여부를 결정합니다.

  • 이미지 조작 프로그램에서 두 번째는 마스크 (레이어)를 만듭니다. 0 비트는 이동 가능한 위치를 가리키고 차단 된 영역은 1을 나타냅니다. 모든 변수가 INT하고 마스크 차원 int 배열이라고 가정

    if (mask[ nextY ][ nextX ] == 0) { 
        currX = nextX; 
        currY = nextY; 
    } 
    

    :이

EDIT 부분적 스프라이트 숨길 z-buffer 참조 표시된 깊이까지 확장 할 수있다.

+0

당신은 내가 포켓몬을 가지고이 somwhere를 보았다고 생각하지만 모든 25x25 스퀘어에는 값이 있었고 스프라이트는 값이 0 인 경우에만 움직일 수 있었지만 1이라면 couldnt 등 이었습니까? 내가 어떻게 할까? – Exikle

+1

그래서 나는 전체 보드/경기장 /지도의 마스크를 만들고 이동했을 때마다 확인해야만할까요? – Exikle

+0

@Exikle 이미지 (또는 텍스처)가 배치 된 보드 (25x25)가 이미있는 경우 각 보드 위치에 마스크가 필요하지 않습니다. 단순히 보드 [y]를 확인하십시오 [x] – stacker

7

게임에 따라 다릅니다. 그리드 기반의 게임에서

  • 는, 당신은 종종 스프라이트가가 "차단"영역으로 이동했는지 여부를 확인하기 위해 움직일 때마다 그리드에 검색을한다. 그렇다면 충돌을 감지하거나 스프라이트의 수정 동작을 수행하십시오. 이것은 간단하고 효율적입니다. 유일한 문제는 그리드 구조 주위에서 레벨/경치를 디자인하도록 제한한다는 것입니다.
  • 매우 동적 인 환경 (예 : 움직이는 소행성이 많은 게임)에서는 일반적으로 임의의 개체 간의 충돌을 감지하는 데 사용되는 공간 분할 (예 : quadtree)에 기반한 충돌 감지 시스템을 사용합니다. 각 객체는 대개 경계 상자을가집니다.
  • 벡터로 정의 된 복잡하지만 고정 된 지오메트리가있는 게임에서는 BSP 트리를 미리 계산하여 경치와의 충돌을 빠르게 감지하는 데 사용할 수 있습니다. 이 기술은 3D FPS 게임에서 일반적이지만 2D에서도 작동합니다.

많은 게임이 실제로 위의 조합을 사용합니다. 고정 된 경치를위한 BSP 트리, 물리 하위 시스템이 관리하는 동적 객체를위한 쿼드 트리 등이 있습니다.

+1

내가 포켓몬과 비슷한 게임으로 게임을 만들고 싶기 때문에 어떤 카테고리가 포켓몬이 될 것인가. – Exikle

+0

꽤 특정 포켓몬은 그리드를 기반으로합니다. 2D 게임이 많이 있습니다! – mikera