Diese Schritte, die Sie erwähnen, werden höchstwahrscheinlich in separaten Engines ausgeführt. Es ist nur so, dass einfache Spiel-Engines sie normalerweise in einem Durchgang haben. Deine Sequenz
for each object
do physics
do game logic
draw
wird
call physics subsystem
call game logic subsystem
call drawing subsystem
Physics Engine kümmert sich um Positionen und Größen.
Game Logic Engine kümmert sich darum zu interpretieren, was Physics Engine geändert hat (er könnte einige Wegpunkte blockieren ...), welche Ziele Charaktere haben und welches Verhalten sie tun sollten. Er führt geplante Skripte aus (diese Denkfunktion ).
Drawing Engine zeichnet, welche Objekte sichtbar sind, und er weiß, welche Objekte sichtbar sind, da Quake Engines hier betrügen (siehe Abschnitt Zeichnen).
Mein Rat an Sie ist, eher zu untersuchen, wie Simulationen durchgeführt werden, als Spiel-Engines. Es gibt eine riesige Popkultur in Bezug auf die Spieleentwicklung und Spiel-Engines werden in zwingenden Sprachen erstellt (aufgrund von Tradition und Geschwindigkeit). Daher war es für mich aufschlussreicher, gute Lehrbücher (eher Theorie) zu bekommen und dann Motoren (Praxis) zu betrachten, anstatt stundenlang Motoren und Rätsel zu betrachten, wie sie es taten.
Physik
Die ganze Vorstellung, alle Entitäten zu iterieren und {think, draw} zu tun, wird wahrscheinlich zu Problemen führen. Es wird Konflikte geben und so weiter. Ich glaube, Valve hat Havok und ich denke, Havok kümmert sich um eine ausreichend korrekte Physik.
Überlegen
Die Denkfunktion wird ausgeführt, wenn eine Zeit in einem Spiel der Zeit in nextthink entspricht . Dies funktioniert in der Quake-Engine auf diese Weise, und die Quake-Engine ist die Basis für Half Life-Motoren. Es wird NICHT jedes Mal ausgeführt.
Intern sollte es eine einfache Iteration durch eine Liste von Entitäten sein und prüfen, ob die Zeit vergangen ist, um die think-Funktion aufzurufen. Die zeitliche Komplexität ist O (N), wobei N die Anzahl der Entitäten ist.
Wenn es eine sehr große Anzahl von Entitäten gibt Sie sollten messen, um wie viel es die fps verbessert. Beachten Sie, dass es sich aufgrund des Amdahlschen Gesetzes möglicherweise um eine unsichtbare Beschleunigung handelt. Ich meine, Sie iterieren einfach durch alle Elemente und verringern und überprüfen eine Zahl.
Ich würde es beschleunigen, indem ich Entitäten nach nextthink sortiere (Liste von Zeigern auf Entitäten erstellen und jedes Mal sortieren; kein Array von Entitäten, da Entitäten ihre nächste Denkweise jederzeit ändern könnten, sodass die Neuanordnung in Array O (N) anstelle von O ( 1) in Liste).
Sie sollten sich auch den O (1) Scheduler unter Linux ansehen .
Zeichnen
Der Motor zeichnet, was ungefähr aus dem Bereich sichtbar ist, in dem sich die Kamera befindet. Das Spiellevel ist die Aufteilung in einen Baum, und ein Bereich ist das Blatt dieses Baumes. Ich werde Sie nicht mit Details darüber belästigen ... Wenn also eine Entität sichtbar ist, wird sie in eine Reihe sichtbarer Entitäten eingefügt und sie werden gezeichnet.
Sie speichern, welche Bereiche potenziell sichtbare Bereiche sind. Es heißt "Potentialy Visible Set", kurz PVS . Es gibt eine Visualisierung von PVS , die grüne Kapsel ist der Spieler und um ihn herum wird gerendert, was sein PVS enthält.
<some commercial engine>
es geht?