2011-01-15 1 views
0

팩맨처럼 게임을 만들려고합니다. 나는 다음과 같습니다 배열을 가지고 :매우 간단한 타일 기반 게임에 문제가 발생했습니다.

배열 :

1111111111111 
1000000000001 
1111110111111 
1000000000001 
1111111111111 

1 = 벽, 0 = 빈 공간

I의 크기는 16 × 16있는 타일을 그릴이 배열을 사용합니다. 게임 캐릭터는 32x32입니다.

처음에 I 어레이 인덱스에서 캐릭터의 위치를 ​​나타내는 [1,1] 등

I가 그의 위치를 ​​갱신 할

경우 배열 [character.new_y] charater.new_x] == 0

나는이 배열 좌표를 픽셀로 변환하여 [y * 16, x * 16] 그를 그렸다.

그는 멋지게 줄을 서고 있었지만 벽에 들지는 않았지만 나는 그를 16 픽셀 씩 업데이트했기 때문에 매우 빠르게 움직이고 있었다.

게임 캐릭터의 위치를 ​​픽셀 단위로 저장하기 위해 역순으로 결정 했으므로 이동 당 16 픽셀 미만을 사용할 수 있습니다.

if array[(character.new_pixel_y)/16][(character.new_pixel_x)/16] == 0 

벽으로가는 그를 방지 할 수 있지만, 불행하게도 그는 하단과 오른쪽의 벽을 조금 먹는 :

나는 이와 같은 간단한 if 문이 있다고 생각했다.

어떻게하면 픽셀 인덱스 위치를 배열 인덱스로 올바르게 변환 할 수 있습니까? 이것은 단순한 것 같지만 실제로 이해할 수는 없습니다 : (

답변

0

2D 배열을 바꾸어 본 것처럼 보입니까? (배열 [x] [y] 또는 배열 [ ? Y] [X])

또한, 두 배 타일 크기의 게임 캐릭터는 주어진 예 맵 배열에 맞지 않을 것

편집 :!

캐릭터가 아래쪽과 오른쪽으로 먹는 경우 타일의 절반만큼 정확히 겹치지 않고 & 오른쪽에 겹치지 않으면 반 타일로 문자를 오프셋해야합니다. (+/- 8 p 모두 X & Y에 ixels)

그렇게하면, "이 배열 화소 좌표 변환, [Y * 16, X * 16] 그 그리는.」라고 는로 변경해야 [(Y의 * 16) -8, (x * 16) -8] 32x32이면 그에게 그립니다.

은 16x 규칙을 따르기 위해 [y * 16, x * 16]과 같은 위치를 계속 유지합니다.

처음으로 16x16을 모두 보관하면 더 쉽게 할 수 있습니다!

또한 tile_size_x & tile_size_y를 상수로 저장해야합니다.

+0

안녕하세요, 16x16 타일은 반으로 비어있어 게임 캐릭터가 서로 딱 맞습니다 (기술적으로는 일부는 겹치지 만). 배열에 관해서는, 미안하다, 그것은 내 어리석은 명명 규칙이었다. – newbieguy

+0

아!실제로, 나는 16 픽셀을 중심으로 하루 종일 노력하고 있었고, 모두 8 픽셀을 중심으로 중심을 잡아 당겼다. 그리고 나서 그의 위쪽/왼쪽/오른쪽/아래쪽 방향을 기준으로 8 픽셀을 조정하여 덕분에 – newbieguy

+0

드로잉이 수행되었다. 왼쪽 상단과 타일은 16 배 더 큽니다. 우리는 32x 타일이 HALF와 16x 타일 = 8 픽셀로 겹쳐 져야한다는 것을 알고 있습니다. :) – Shaggieh