Ich habe Probleme, mich mit dem Spieledesign zu beschäftigen. Auf der Android-Plattform habe ich eine Aktivität und setze ihre Inhaltsansicht mit einer benutzerdefinierten Oberflächenansicht. Die benutzerdefinierte Oberflächenansicht fungiert als Bedienfeld, und ich erstelle Instanzen aller Klassen und führe dort alle Zeichnungen und Berechnungen durch.
Frage: Soll ich stattdessen die Instanzen anderer Klassen in meiner Aktivität erstellen?
Jetzt erstelle ich eine benutzerdefinierte Thread-Klasse, die die Spielschleife behandelt.
Frage: Wie verwende ich diese eine Klasse in all meinen Aktivitäten? Oder muss ich jedes Mal eine separate Instanz der erweiterten Thread-Klasse erstellen?
In meinem vorherigen Spiel hatte ich mehrere Ebenen, die eine Instanz der Thread-Klasse erstellen mussten, und in der Thread-Klasse musste ich Konstruktormethoden für jede einzelne Ebene festlegen und in der Schleife eine switch-Anweisung verwenden, um zu überprüfen, welche Ebene gerendert werden muss und aktualisieren. Entschuldigung, wenn das verwirrend klingt.
Ich möchte nur wissen, ob die von mir verwendete Methode ineffizient ist (was es wahrscheinlich ist) und wie man sie richtig entwirft. Ich habe viele Tutorials da draußen gelesen und habe immer noch große Probleme mit diesem speziellen Thema. Vielleicht ein Link zu einigen Tutorials, die dies erklären? Vielen Dank.
quelle
OpenGL ES
sollten Sie wissen, dass der RendererOpenGL ES
bereits über einen eigenen Thread verfügt. In diesem Fall müssen Sie kein neuesThread
undRunnable
für dieses System manuell erstellen und starten .Normalerweise ist Ihre Spielschleife in einer einzelnen Aktivität in sich geschlossen.
Wenn Sie die Aktivität wechseln, pausieren / beenden Sie Ihre Spielschleife. Separate Aktivitäten sollten ohnehin einer Spielpause entsprechen (z. B. weil Sie zu einer Aktivität "E-Mail an Freunde senden" oder "Hauptmenü" gewechselt haben).
Für zusätzliche Level sollten Sie keine neuen Threads erstellen oder zerstören ... es sei denn, Sie haben zu einer Aktivität "Level abgeschlossen, nächstes Level laden, bitte warten" gewechselt und müssen das Hauptspiel neu starten "Aktivität sowieso. Aber selbst in diesem Fall erstellen Sie nicht wirklich "zusätzliche" Threads, sondern nur einen Thread in dieser einen Aktivität und beenden / starten diese Aktivität nacheinander / starten neu / beenden / neu starten ... usw. jedes Mal, wenn ein Level abgeschlossen ist.
quelle
Wenn Sie Deutsch verstehen, ist dieses Tutorial sehr schön.
Für die englische Sprache kann ich dieses Tutorial empfehlen
In Bezug auf die Thread-Klasse: Ich weiß nicht, ob es wirklich notwendig ist, dass Sie aus allen Klassen in Ihrer Anwendung referenzieren können. In meinem Spiel habe ich es so gelöst:
Die Klasse, die für das Zeichnen der Haupt-GUI verantwortlich ist, verfügt über eine überschriebene Rendermethode. Bei dieser Methode wird eine Thread-Klasse aufgerufen, die alle GUI-Elemente aktualisiert und Benutzereingaben verarbeitet.
Der Thread ist auch dafür verantwortlich, eine konstante Framerate aufrechtzuerhalten. Abhängig von dem Spiel, das Sie entwickeln, kann dies wichtig sein.
quelle