проблема с очень простой игрой на основе плитки - PullRequest
0 голосов
/ 15 января 2011

Я пытаюсь создать pacman-подобную игру.У меня есть массив, который выглядит следующим образом:

массив:

1111111111111
1000000000001
1111110111111
1000000000001
1111111111111

1 = стена, 0 = пустое пространство

Я использую этот массив для рисования плитки размером 16x16по размеру.Персонаж Game - 32x32.

Изначально я представлял позицию персонажа в индексах массива, [1,1] и т. Д.

Я бы обновил его позицию, если бы массив [character.new_y] [charater.new_x] == 0

Затем я перевел эти координаты массива в пиксели, [y * 16, x * 16], чтобы нарисовать его.

Он хорошо выстроился, не стал быстены, но я заметил, что, поскольку я обновлял его по 16 пикселей каждый, он двигался очень быстро.

Я решил сделать это в обратном порядке, чтобы вместо этого сохранить положение игрового персонажа в пикселях, чтобы он могиспользуйте менее 16 пикселей на ход.

Я думал, что простое утверждение if, такое как:

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

, помешает ему войти в стены, но, к сожалению, он съедает немногонижняя и правая боковые стенки.

Есть идеи, как мне правильно перевести положение пикселей в индексы массива?Я думаю, это что-то простое, но я действительно не могу понять это: (

1 Ответ

0 голосов
/ 15 января 2011

вы, кажется, транспонировали свой 2D массив.Это было специально?(это массив [x] [y] или массив [y] [x]?)

Кроме того, игровой персонаж с удвоенным размером тайла не поместился бы в приведенном примере массива карты!

edit:

если ваш персонаж съедает снизу и справа ровно на половину плитки, и он / она не перекрывает верхнюю и правую стороны, то вам нужно сместить вашего персонажа на половину плитки.(+/- 8 пикселей к обоим x & y)

, поэтому, когда вы "перевели эти координаты массива в пиксели, [y * 16, x * 16], чтобы нарисовать его".Вы должны изменить это на: [(y * 16) -8, (x * 16) -8], чтобы нарисовать его, когда ему 32х32.

сохранить его позицию как [y * 16, x * 16], чтобы следовать соглашению 16x.

вам будет проще, если вы сначала сохраните все 16x16!

, вам также следует хранить tile_size_x & tile_size_y как константу.

...