À l'époque (1990), les anciens jeux de flipper étaient faits comme ceci:
Il existe plusieurs couches pour le champ de jeu (ce que vous voyez lorsque vous jouez au jeu):
et plusieurs couches pour les collisions:
L'image en niveaux de gris de gauche est une carte de collision pour le jeu principal, l'image de droite est une carte de collision pour une zone spéciale: les rampes de flipper.
White
= zone libre pour la balle, l'indice de couleur est de 255.
Gray
= la balle sera "repoussée" de cette zone. indice de couleur = angle du vecteur à ajouter à la position de la balle. gris clair = 0 deg. gris foncé = 360 deg.
Un pseudo code:
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; //
}
}
Certains indices de couleur spéciaux peuvent être utilisés aussi pour quelque chose d' autre que la collision, une gamme de couleurs personnalisées (par exemple: 240 - 255) peut être réservé pour détecter des zones spéciales comme spinners
, triggers
, bumpers
, holes
, ...
Comme vous pouvez le voir, c'est très simple. Il n'y a que quelques pixels "lus" par image. Pour cette raison, vous pouvez faire fonctionner la simulation physique à un taux de rafraîchissement réel élevé, par exemple: 200 ips. L'utilisation d'un taux de rafraîchissement élevé facilitera la simulation et réduira le "tunneling" (cela se produit lorsque la balle va trop vite et traverse des éléments creux sans entrer en collision). Cette simplicité est également ce qui rend les jeux de flipper fluides 386 computers
(et même rapides 286
) à l'époque (parmi d'autres astuces comme le cyclisme des couleurs, le défilement vga et le masquage des sprites ...).
Aujourd'hui, la plupart des jeux de flipper ne sont plus faits comme ça. Au lieu de cela, le champ de jeu est une scène 2D / 3D utilisant des polygones ou des sprites et des collisions sont effectuées contre certaines lignes simplifiées, des courbes de Bézier ou des sphères représentant une forme simplifiée de champ de jeu visuel.
exemple (du flipper visuel ):
Certaines sociétés de jeux utilisent leur propre moteur physique, mais un autre moyen plus simple consiste à utiliser un moteur physique comme Box2D
ou Bullet
. La plupart des jeux de flipper iPhone que j'ai vus utilisaient un moteur physique préexistant + quelques actifs 3D.