Dulu (1990), game pinball lama dibuat seperti ini:
Ada beberapa layer untuk playfield (apa yang Anda lihat saat bermain game):
dan beberapa lapisan untuk tabrakan:
Gambar grayscale kiri adalah peta tabrakan untuk permainan utama, gambar kanan adalah peta tabrakan untuk area khusus: pinball landai.
White
= area bebas untuk bola, indeks warna ada 255.
Gray
= bola akan "didorong menjauh" dari zona ini. indeks warna = sudut vektor untuk menambah posisi bola. abu-abu terang = 0 deg. abu-abu gelap = 360 derajat.
Beberapa kode semu:
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; //
}
}
Beberapa indeks warna khusus juga dapat digunakan untuk sesuatu yang lain daripada tabrakan, berbagai warna kustom (misalnya: 240-255) dapat dipesan untuk mendeteksi zona khusus seperti spinners
, triggers
, bumpers
, holes
, ...
Seperti yang Anda lihat, ini sangat sederhana. Hanya ada beberapa piksel "baca" per bingkai. Karena ini, Anda dapat membuat simulasi fisika berjalan pada framerate nyata misalnya: 200 fps. Menggunakan framerate tinggi akan memperlancar simulasi dan mengurangi "tunneling" (ini terjadi ketika bola berjalan terlalu cepat dan melewati elemen tanpa bertabrakan). Kesederhanaan itu juga yang memungkinkan permainan pinball yang mulus pada 386 computers
(dan bahkan cepat 286
) di masa lalu (di antara beberapa trik lain seperti bersepeda warna, pengguliran vga dan masking sprite ...).
Saat ini, sebagian besar permainan pinball tidak lagi dibuat seperti ini. Alih-alih playfield adalah adegan 2d / 3d menggunakan poligon atau sprite dan tabrakan dibuat terhadap beberapa garis yang disederhanakan, kurva bezier, atau bola yang mewakili bentuk sederhana dari playfield visual.
contoh (dari pinball visual ):
Beberapa perusahaan game menggunakan mesin fisika mereka sendiri tetapi cara lain yang lebih mudah adalah menggunakan mesin fisika seperti Box2D
atau Bullet
. Sebagian besar permainan pinball iPhone yang saya lihat menggunakan mesin fisika yang sudah ada + beberapa aset 3d.