
Сообщение от
svofski
Можно держать вспомогательный битмап небитых кирпичей
какой нафик битмап
нужно 32х32 байта памяти
и подсказка
нормальные люди для большей скорости разместят их так
(адреса условно с А000 чисто для прммера)
A000 A001 A002... ...A01Е A01F
A100 A101 A102... ...A11Е A11F
................................................
BE00 BE01 BE02... ...BE1Е BE1F
BF00 BF01 BF02... ...BF1Е BF1F
и все будет летать
можно конечно с экономить памяти
и разместить все линейно
но потерять в скорости...
можно ложить рядом с этим буфером (A020...A0FF A120...A1FF итд)
другие данные
например графику
или карты уровней
каждому кирпичу присваиваем свой номер
потом пиксельные координаты мячика делим на 8 и проверяем что в этом буфере
с кем мы столкнулись или не столкнулись
по остатку от деления
можем определить с какой стороны мы столкнулись
и в правильную сторону отразить мячь
(мы не можем зацепить верхний пиксель залетев снизу)
для стен так же нужно присвоить свои номера
столкновение с ракеткой обрабатывать отдельным кодом
так же как и столкновение со всякими посторонними летучками
так же подсказка
для пуляния мячика под любым углом
нужны таблички синуса и косинуса
которых в сорце не видно
попиксельная точность детекции столкновений не нужна
ее часто нет в фирменных играх
и ты получаешь даже если тебе попали по пустому месту...
- - - Добавлено - - -
условный пример содержания буфера
Код:
11111111111111111111111111111
20000000000000000000000000003
20000000000000000000000000003
20044556677889900000000000003
2000AABBCCDDEEFF0000000000003
20000000000000000000000000003
20000000000000000000000000003
20000000000000000000000000003
(так же можно упростить детекцию потери шарика
нарисовав в буфере дно как стену со своим номером
(в качестве бонуса
ставящего отбивалку можно быстро пририсовать вместо дна вызывающего проигрыш
дно вызывающее отбивание))
далее нам нужна
проверка по табличке
с чем же мы столкнулись
(табличка генерируется в начале уровня
(то есть каждому блоку присваивается его тип))
напомню что 250 блоков это
16х15 широких кирпичей
256х120 пикселей сплошных рядов кирпичей
в принципе не сложно расширить набор почти до 64К
но зачем?
- - - Добавлено - - -
кстате таким образом можно легко проверить столкновение всех наружных пикселей шарика
после деления координаты каждого такого пикселя
в конечном итоге останется 1 2 координаты для проверки по буферу
...но смысл проверять все?
на всякий случай напомню что деление на 8 делается 3-мя rra
а то мало чего еще нагородят...
- - - Добавлено - - -
В принципе не обязательно присваивать каждому блоку свой номер
это не сильно рационально
нужно только отделить соседние друг от друга
Код:
11111111111111111111111111111
20000000000000000000000000003
20000000000000000000000000003
20044554455445544554455440003
20006677667766776677667700003
20088998899889988998899880003
2000AABBAABBAABBAABBAABB00003
200CCDDCCDDCCDDCCDDCCDDCC0003
20000000000000000000000000003
20000000000000000000000000003
20000000000000000000000000003
2FFFFFFFFFFFFFFFFFFFFFFFFFFF3
а определять что стирать в видео памяти
на основе адреса в буфере