2011-01-15 7 views
0

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

массив:

1111111111111 
1000000000001 
1111110111111 
1000000000001 
1111111111111 

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

Я использую этот массив сделать плитки, которые 16x16 в размере. Игровой персонаж 32x32.

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

Я бы обновить свою позицию, если массив [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 

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

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

ответ

0

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

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

редактировать:

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

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

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

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

Вы также должны сохранить tile_size_x & tile_size_y как константу.

+0

Привет, плитки 16x16 наполовину пусты, поэтому игровой символ подходит между ними (хотя он технически перекрывает часть из них). Что касается массива, извините, это было мое глупое соглашение об именах. – newbieguy

+0

Ах!действительно, я пробовал целый день с центрированием на 16 пикселей, и все это зависало бы, центрируя его через 8 пикселей, а затем настраивая его на верхнее/левое/правое/нижнее направление на 8 пикселей, спасибо – newbieguy

+0

рисунок сделан из верхний левый и плитки в 16 раз больше. и мы знаем, что 32x плитка должна перекрываться HALF размером 16 пикселей = 8 пикселей. :) – Shaggieh