2008-12-18 9 views
6

Ich habe Web-Anwendungen für eine Weile jetzt entwickelt und habe mich in GUI und Game-Anwendungsentwicklung eingetaucht.Wie ist GUI und Game Programmablauf im Vergleich zu Web-Programmen

In der Web-Anwendung (PHP für mich), eine Anfrage an die Datei gemacht wird, enthält diese Datei alle notwendigen Dateien, um die Informationen in den Speicher zu verarbeiten, dann ist der Ablauf von oben nach unten für jede Anfrage. (hauptsächlich)

Ich weiß, dass für Spiele die Aktion innerhalb der Game Loop passiert, aber wie sind all die verschiedenen Elemente eines Spiels in diese einzelne Schleife (Menüsystem, GUI, Laden von Vermögenswerten und der 3D-Welt) mit das ständige Be- und Entladen bestimmter Dinge.

Das gleiche für GUI-Programme, ich glaube, es gibt eine "Anwendungsschleife" von einigen Arten.

Werden die meisten Elemente in den Speicher geladen und dann aufgerufen, werden die Elemente verknüpft und bei Bedarf in den Speicher geladen?

Was mir geholfen hat, Webanwendungen schneller zu entwickeln, ist, wenn ich den Ablauf des Programms verstanden habe, muss es nicht detailliert sein, nur die allgemeine Idee oder der Pseudocode.

Antwort

14

Es gibt fast immer eine Schleife in all diesen - aber es ist nicht etwas, über das Sie während der meisten Ihrer Entwicklung denken würden.

Wenn Sie einen Schritt zurück, werden Ihre Web-Anwendungen um eine Schleife basierend - die accept() Schleife Web-Server:

while(listening) { 
    get a socket connection; 
    handle it; 
} 

.. aber als Web-Entwickler, sind Sie aus, dass abgeschirmt und schreiben "Ereignisgesteuerter" Code - "wenn jemand diese URL anfordert, tun Sie dies".

GUIs sind auch ereignisgesteuert, und die Ereignisse werden auch durch eine Schleife irgendwo erkannt:

while(running) { 
    get mouse/keyboard/whatever event 
    handle it 
} 

Aber ein GUI-Entwickler braucht nicht viel über die Schleife zu denken. Sie schreiben 'wenn ein Mausklick hier auftritt, mach das'.

Spiele, wieder das Gleiche. Jemand muss eine Schleife schreiben:

while(game is in progress) { 
    invoke every game object's 'move one frame' method; 
    poll for an input event; 
} 

... während anderer Code in einem ereignisgesteuerten Stil geschrieben steht: wenn eine Kugel Objekt mit diesem Objekt zusammenfällt, löst eine Explosion Ereignis '.

+0

ein großes Lob an die Ähnlichkeiten der Schleife innerhalb der Web-Entwicklung. –

1

Für Anwendungen und in geringerem Maße für Spiele ist die Software ereignisgesteuert. Der Benutzer macht "etwas" mit der Tastatur oder der Maus und dieses Ereignis wird an den Rest der Software gesendet.

In Spielen ist der Game Loop wichtig, da er sich auf die Verarbeitung des Bildschirms und des Spielstatus konzentriert. Bei vielen Spielen ist Echtzeit-Performance gefragt. Mit der modernen 3D-Grafik-API kann viel von der Bildschirmverarbeitung auf die GPU übertragen werden. Der Spielstatus wird jedoch von der Hauptschleife verfolgt. Ein Großteil der Bemühungen eines Teams für ein Spiel konzentriert sich darauf, die Verarbeitung der Schleife sehr reibungslos zu gestalten.

Für die Anwendung wird typischerweise eine starke Verarbeitung auf einem Gewinde erzeugt. Es ist ein komplexes Thema wegen der Probleme, die zwei Dinge betreffen, die versuchen, auf die gleichen Daten zuzugreifen. Es gibt ganze Bücher zu diesem Thema.

Für Anwendungen, die Sequenz ist

  1. Mitglieder gaben X, X und zugehörige Informationen (wie X, Y-Koordinaten) wird an die UI_Controller gesendet.
  2. Die Benutzeroberfläche entscheidet, welcher Befehl ausgeführt werden soll.
  3. Der Befehl wird ausgeführt.
  4. Das Modell/die Daten wurden geändert.
  5. Der Befehl weist den UI_Controller an, verschiedene Bereiche der Benutzeroberfläche zu aktualisieren.
  6. Der UI_Controller zeichnet die Benutzeroberfläche neu.
  7. Der Befehl kehrt zurück.
  8. Die Anwendung wartet auf das nächste Ereignis.

Es gibt verschiedene Varianten davon. Das Modell kann Listenern erlauben, auf Änderungen in den Daten zu warten. Wenn die Daten die Listener ausführen und die Benutzeroberfläche neu gezeichnet.

1

Was Spieleprogrammierung ging ich war nur ein Bastler, ist aber das, was ich in der Regel tat

Ich hatte ein Objekt, das ein sehr allgemeines Konzept einer „Szene“ im Spiel vertreten. Alle verschiedenen Hauptabschnitte des Spiels wurden von diesem Szenenobjekt abgeleitet. Eine Szene könnte wirklich alles sein, je nachdem, um welche Art von Spiel es sich handelt. Jedenfalls hatte jede spezifischere Szene, die von der Szene abgeleitet wurde, eine Prozedur, um alle notwendigen Elemente für diese Szene zu laden.

Wenn das Spiel Szenen wechseln sollte, wurde der Zeiger auf die aktive Szene auf eine neue Szene gesetzt, die dann alle benötigten Objekte laden würde.

Das generische Scene-Objekt hatte virtuelle Funktionen wie Load, Draw und Logic, die zu bestimmten Zeiten in der Spielschleife vom aktiven Szenenzeiger aufgerufen wurden. Jede spezifische Szene hatte ihre eigenen Wege, diese Methoden zu implementieren.

Ich weiß nicht, ob es so gemacht wird oder nicht, aber es war eine sehr einfache Möglichkeit für mich, den Fluss der Dinge zu kontrollieren. Das Szenenkonzept machte es außerdem einfach, mehrere Szenen als Sammlungen zu speichern. Wenn mehrere Szenenzeiger gleichzeitig in einem Stapel von Sortierungen gespeichert sind, können Szenen in Reserve gespeichert werden und ihren vollen Zustand beibehalten, wenn sie zurückkehrt, oder sogar Dinge wie Abblenden tun, aber weiter zeichnen, während die aktive Szene sie als Überlagerung überstreicht von Art.

Also, wenn Sie es so tun, ist es nicht genau wie eine Webseite, aber ich denke, wenn Sie darüber nachdenken, ist der richtige Weg es ähnlich genug.