В те времена (1990) старые игры в пинбол создавались так:
Для игрового поля есть несколько слоев (что вы видите, играя в игру):
и несколько слоев для столкновений:
Левое изображение в градациях серого - карта столкновений для основной игры, правое изображение - карта столкновений для специальной области: рампы для пинбола.
White
= свободное место для мяча, индекс цвета 255.
Gray
= мяч будет «отталкиваться» от этой зоны. индекс цвета = угол вектора, который нужно добавить в положение шара. светло-серый = 0 град. темно-серый = 360 град.
Какой-то псевдокод:
void do_ball_physics()
{
while(1)
{
byte color = read_pixel_under_ball(ballx, bally); //one pixel read
if(color == 255) //see remark below
break;
float vectorx = sin(color/255.0f * 2.0f * PI);
float vectory = cos(color/255.0f * 2.0f * PI);
ballx += vectorx; //push ball away from one unit
bally += vectory; //
}
}
Некоторые специальные цветовые индексы также могут быть использованы для чего - то другого , чем столкновения, диапазон пользовательских цветов (например: 240 - 255) могут быть зарезервированы для обнаружения специальных зон , как spinners
, triggers
, bumpers
, holes
, ...
Как видите, это очень просто. На каждый кадр «читается» всего несколько пикселей. Из-за этого вы можете заставить физическое моделирование работать на реальной высокой частоте кадров, например: 200 кадров в секунду. Использование высокой частоты кадров сгладит симуляцию и уменьшит "туннелирование" (это происходит, когда мяч движется слишком быстро и проходит через элементы без столкновения). Эта простота также делает возможным плавные игры в пинбол 386 computers
(и даже быстрые 286
) в те времена (среди прочих трюков, таких как циклическое изменение цвета, прокрутка VGA и маскировка спрайтов ...).
Сегодня большинство игр с пинболом больше не сделаны такими. Вместо этого игровое поле представляет собой 2d / 3d сцену с использованием полигонов или спрайтов, и возникают столкновения с некоторыми упрощенными линиями, кривыми Безье или сферами, представляющими упрощенную форму визуального игрового поля.
пример (из визуального пинбола ):
Некоторые игровые компании используют собственный физический движок, но другой, более простой способ - использовать физический движок, такой как Box2D
или Bullet
. Большинство игр для пинбола для iPhone, которые я видел, использовали уже существующий физический движок + некоторые 3D-ресурсы.