Damals (1990) wurden alte Flipperspiele wie folgt hergestellt:
Es gibt mehrere Ebenen für das Spielfeld (was Sie beim Spielen des Spiels sehen):
und mehrere Schichten für Kollisionen:
Das linke Graustufenbild ist eine Kollisionskarte für das Hauptspiel, das rechte Bild ist eine Kollisionskarte für ein spezielles Gebiet: Flipper-Rampen.
White
= freie Fläche für Kugel, Farbindex gibt es 255.
Gray
= Ball wird aus dieser Zone "weggeschoben". Farbindex = Winkel des Vektors, der zur Ballposition hinzugefügt werden soll. hellgrau = 0 Grad dunkelgrau = 360 Grad
Ein Pseudocode:
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; //
}
}
Einige spezielle Farbindizes können auch für etwas verwendet werden , sonst als Kollision, eine benutzerdefinierte Farbbereich (zB: 240-255) kann zur Erkennung Sonderzonen wie reserviert spinners
, triggers
, bumpers
, holes
, ...
Wie Sie sehen können, ist dies sehr einfach. Pro Frame werden nur wenige Pixel "gelesen". Aus diesem Grund können Sie die Physiksimulation mit einer wirklich hohen Framerate ausführen, z. B. 200 fps. Die Verwendung einer hohen Framerate glättet die Simulation und reduziert das "Tunneln" (dies geschieht, wenn der Ball zu schnell geht und durch die Elemente läuft, ohne zu kollidieren). Diese Einfachheit ermöglicht auch reibungslose Flipperspiele in früheren Zeiten 386 computers
(und sogar schnell 286
) (neben einigen anderen Tricks wie Farbwechsel, VGA-Scrolling und Sprite-Maskierung ...).
Heutzutage werden die meisten Flipperspiele nicht mehr so gemacht. Stattdessen ist das Spielfeld eine 2D / 3D-Szene mit Polygonen oder Sprites, und es werden Kollisionen mit einigen vereinfachten Linien, Bezierkurven oder Kugeln durchgeführt, die eine vereinfachte Form des visuellen Spielfelds darstellen.
Beispiel (vom visuellen Flipper ):
Einige Spielefirmen verwenden ihre eigene Physik-Engine, aber eine andere, einfachere Möglichkeit ist die Verwendung einer Physik-Engine wie Box2D
oder Bullet
. Die meisten iPhone-Flipperspiele, die ich gesehen habe, verwendeten eine bereits vorhandene Physik-Engine + einige 3D-Assets.
Flipper haben sehr viele physikalische Eigenschaften, nicht nur Löcher oder Wände, sondern auch reagierende Elemente (Rückschläge) oder unebene Oberflächen, auf denen der Ball langsamer wird und dann seine Geschwindigkeit zurückerhält.
Wenn Sie einen guten Flipper erstellen möchten, müssen Sie entweder eine 3D-Kollisionserkennung oder ein selbst zugeschnittenes System verwenden, bei dem jedes kollidierbare Objekt über eine Methode mit Entfernungs- und Geschwindigkeitsparametern verfügt, die geänderte Geschwindigkeiten zurückgibt.
quelle
Ich habe vor einiger Zeit ein Flipperspiel gemacht. es war auch pixelbasiert. Ich hatte eine Kollisionskarte, die nur die Kollisionsdaten enthielt. Eine ungefähre Kollisionsnormale war leicht zu finden:
Nehmen Sie den Bereich der Kollisionskarte, der den Ball überlappt, suchen Sie die Mitte, bilden Sie den Vektor von diesem Punkt zur Ballmitte und normalisieren Sie dann.
Hoffe das gibt dir ein paar Ideen :)
quelle
Erstens, wenn Sie ein Flipperspiel machen, benötigen Sie höchstwahrscheinlich mehr Bounding-CIRCLE-Kollisionserkennung als die Bounding-BOX :-)
Angesichts der Komplexität der Physik, die an einem vollwertigen Flipper beteiligt ist, würde ich vorschlagen, sich anzuschauen vorhandene 2D-Physik-Engine. Box2D hat einen guten Ruf in Javascript, es mag andere geben, aber ich habe keine gute (und kostenlose) gefunden.
Rq1: Sie verwenden sicherlich (wie ich) die klassische Aufteilung in Ihrem Spiel zwischen Update und Draw. Und Sie verwenden einen Timer (setInterval / setTimeout) und / oder RequestAnimationFrame, um update aufzurufen und dann regelmäßig zu zeichnen. Ein Flipper kann die Art von Spiel sein, bei der Sie ein Timer-Fahrupdate und ein anderes die Auslosung aktualisieren möchten, sodass Sie die Rate jedes einzelnen unabhängig voneinander anpassen können, um auf einer Vielzahl von Geräten zu arbeiten. Weil Sie nicht einfach fallen lassen (Update + Zeichnen) können, wenn das Gerät zu langsam ist: Wenn die Zeit zwischen zwei Updates (dt) zu lang wird, kann es sein, dass die Physik-Engine eine Kollision verpasst.
quelle
Sie könnten einen Blick auf visuelle Flipper gegen zukünftige Flipper für das Thema 2d gegen 3D werfen. Wenn Sie visuellen Flipper spielen (alles ist in 2D gemacht), dann spielen Sie zukünftigen Flipper oder so etwas wie Zen-Flipper. Sie spüren den Unterschied in der Art und Weise, wie sie spielen. Ich persönlich bevorzuge das 3D, aber Ihr Projekt ist möglicherweise besser für das 2D geeignet. Nur Sie könnten das entscheiden
quelle