Java 게임에서 400x400 창을지도로 표현하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/622517

  •  05-07-2019
  •  | 
  •  

문제

Pacman 게임을 만들고 있습니다. 기본적으로 블록/타일로 구성된이 창의지도 표현을 원합니다. 그런 다음 Pacman 캐릭터/유령이 움직일 때 맵에서 위치를 변경하여 화면의 내용을 나타내고 충돌 감지 등을 사용합니다.

화면이 x, y 좌표로 만들어 졌으므로이 맵을 어떻게 만들 수 있으므로,이지도에서 타일로 올바르게 표현할 수있는 방법은 무엇입니까?

도움이 되었습니까?

해결책

나는 객체와 인터페이스를 생각하기 시작하려는 유혹을 알고 있지만 각 요소가 40 픽셀 또는 무언가를 나타내는 2 차원 배열에 대해 생각 했습니까? 나는 Pacman이 충돌에 관해 픽셀 정확한 것을 기억하지 못합니다. 각 조각이 움직이는 방향에 대한 더 많은 문제가 있습니다.

다른 팁

일반적으로 픽셀을 참조하지 않는 추상적 인 표현이 있습니다 (예 : Pac-Man Maze는 단순히 W 단위 인 경우). 실제 픽셀에 대한 추상 표현.

콘크리트를 만들기 위해 추상적 인 표현의 너비가 100 단위가되기를 원하고 400 픽셀로 렌더링하고 싶다고 가정 해 봅시다. 그런 다음 변환은 단지 scrn_x = 4 * x입니다.

직접 쓰지 않고 이것을 생각해 내기가 어렵지만.

먼저 iCollidable을 구현하는 엔티티 정의를 만들어야합니다. 엔티티에는 유령, 팩맨, 점 및 파워 업이 포함됩니다. 지도의 각 요소에는 다른 정보와 함께 추가 정밀도를위한 일종의 "위치"값을 갖는 모든 현재 엔티티의 목록이 포함됩니다. iCollidable 인터페이스에는 서로 충돌하는 엔티티를 결정하기위한 논리가 포함될뿐만 아니라 (유령이 점과 충돌하지 않습니다.) 서로 충돌 할 위치에 있는지 결정합니다. 즉, Pacman이 오른쪽에서 공간에 들어가고 유령이 왼쪽에서 그 공간을 떠나는 경우 충돌이 없습니다. 또한 정확히 Pacman이 도트를 섭취 한시기를 결정하여 그래픽으로 올바르게 보일 것입니다. 즉, Pacman이 공간에 들어서면서 점을 파괴하면 그래픽으로 만지기 전에 사라질 것입니다.

Pacman 및 The Ghost와 같은 스프라이트는 위치 (x, y)로 표시됩니다. 그들이 서로 충돌하는지 확인하려면이 psuedocode를 사용하십시오.

sprites = [ ... list of sprites ... ]
for i1=0 to len(sprites):
    sprite1 = sprites[i1]
    for i2 = i1+1 to len(sprites):
        sprite2 = sprites[i2]
        if (sprite1.x-sprite2.x)^2+(sprite1.y-sprite2.y)^2 < radius_of_sprites^2:
            collide(sprite1, sprite2)

이것은지도가 전혀 포함되지 않습니다. Pacman과 MAP 간의 충돌을 별도로 확인할 수 있습니다. 여기서 핵심 요령은 각 Pacman의 측면 (상단, 하단, 왼쪽, 오른쪽)의 픽셀 좌표를 나누고 충돌을 확인하는 것입니다. 예를 들어, Pacman이 오른쪽으로 이동하는 경우 충돌을 위해 오른쪽 가장자리를 확인해야합니다.

pacman_tile_x = (pacman.x+tilesize/2)/tilesize    # added tilesize/2 to check the middle of pacman
pacman_tile_y = pacman.y/tilesize + 1   # +1 because right edge is 1 tile to the right of the sprite's coordinate
if tile[pacman_tile_x][pacman_tile_y].is_a_wall:
    ... wall collide code ...

이제 화면에 엄청난 수의 스프라이트가있는 경우 맵의 특정 타일에 스프라이트가 존재하는 스프라이트를 저장하여 스프라이트-스프라이트 충돌 감지를 최적화 할 수 있으므로 인접한 타일의 스프라이트에 대해서만 확인해야합니다. . 그러나 첫 번째 패스 와이 Pacman 게임의 경우 필요한 최적화가 아닐 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top