Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

17.02.2011, 09:59

Move- und Render-Funktion

Es würde nich mal interessieren, ob diese Lösung mit der Move- und Render-Funktion das Gele vom Ei ist.
Klar, der Lösungsansatz ist logisch und für Anfänger leicht verständlich. Aber es läuft so trotzdem sehr linear. Es wird alles berechnet, dann wird alles gezeichnet. Was aber, wenn gewisse Rechenergebnisse gar nicht für die Render-Funktion gebraucht werden? Es wäre doch effektiver, das rechenlastige Zeichnen eher ausführen zu können.
Ist denn jemand vrtraut mit den Techniken von größeren Spieleschmieden? Wird dort auch dieses Prinzip verfolgt? Es soll jetzt nicht abwertend klingen, aber ich kann mit gut vorstellen, dass es gegenüber der Lösung im Buch weitaus professionellere Techniken gibt.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

17.02.2011, 10:04

1) Wieso sollte man etwas berechnen, was nicht gebraucht wird?
2) Welches Buch?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

17.02.2011, 10:11

Zu 1. Nicht im nächsten Schritt gebraucht. Schließlich sind Auswirkungen irgendwelcher Eingaben nicht unmittelbar zu spüren. Am Beispiel KI wird das evtl. deutlich: Ich verarbeite die Eingaben des Benutzers, aber handle nicht danach. Ich will mehr wissen und erst nach 3-4 Eingaben (reine Beispielwerte) tut sich was, was Auswirkungen auf die Darstellung auf dem Bildschirm hat. Dann spräche nichts dagegen, die erste Aktion nur zu speichern, zu zeichen, die 2. Aktion zu speichern und wieder zu zeichnen, und dann die beiden gespeicherten Werte mit der 3. Eingaben zu verrechnen und ein verändertes Gegenüber (wenn wir in einem Rollenspiel o.ä.) sind zu zeichnen.

Zu 2. Spieleprogrammierung mit DirectX9 und C++ von D. Scherfgen
Sorry, habe vergessen, dass hier auch ein weiteres Buch im Fokus steht

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

17.02.2011, 10:13

1) Du kannst ja aber nicht mit Gewissheit vorher schon sagen, ob eine Eingabe eine Auswirkung hat oder nicht. Das entscheidet ja die KI. Wenn sie der Meinung ist, dass sie mehr Eingaben benötigt, dann brauch sie natürlich auch nichts zu berechnen und kehrt sofort wieder zurück. Aber genau das Gegenteil kann ja eventuell ebenfalls der Fall sein, dass eine Eingabe eben doch eine sofortige Änderung bewirkt.
Stell dir z.B. ein Shooter-Game vor, wo jemand auf der Lauer liegt. Der Zustand des Gegners soll sich an der Farbe des Namens über dem Kopf des Gegners ablesen lassen. Ein einziger Klick auf den Feuer-Knopf könnte reichen um den Status von "idle" auf "aggressive" umzuschalten, was sich dann aber sehr wohl auf die Darstellung auf dem Bildschirm auswirken könnte. Wie gesagt, die Entscheidung darüber, ob sich etwas tut oder nicht, die wird erst während der Berechnung getroffen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

5

17.02.2011, 10:17

Aber was wäre letztendlich effektiver?
In der Move-Funktion berchnen, welche Eingaben es zu verarbeiten lohnt (ist ja nicht nur KI, bei anderen weiß es der Programmierer evtl.) oder eine Alternative in der Spielsteuerung (die ich in diesem Thema zu suchen versuche)?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

17.02.2011, 10:18

Das hängt sicherlich von deinem konkreten Problem ab. Pauschalisieren (Meh, das Firefox-Wörterbuch schreibt das Wort immer noch falsch... oder kennt jemand "Pauschaleisiren"?) kann man das nicht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

7

17.02.2011, 11:02

Dann formuliere ich mein Problem mal so, auch wenn es nur hypothetisch ist:
Gibt es Alternativen zur linearen Vorgehensweise im gennanten Buch, bei denen diese klare Trennung aufgehoben wird und so die Move-Funktion den jeweiligen Anforderungen angepast wird (sprich dass dynamisch Rechenleistung zugewiesen wird und Unteraufgaben je nach Priorität abgearbeitet oder ufgeschoben werden)? Selbstverstänlich ohne dabei auf Effektivität verzichten zu müssen.
Ich glaube kaum, dass man hier etwas konkreter werden muss. Prinzipiell würde so eine Alternative natütlich in jedem Spiel möglich sein, nur muss man dann die Vor- und Nachteile der jeweilgen Variante hinsichtlich Komplexität und Typ des Spiels abwägen.
Und wie vorher erwähnt, würde es mich brennend interessieren, wie Move- und Render-Funktion in der Wirtschaft eingesetzt werden; unabhängig davon ob sich das mit meinen Ausführungen deckt oder nicht.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

17.02.2011, 12:32

Der große Nachteil, den ich in einer solchen Trennung sehe ist der, dass der Teil des Codes, der über eine solche Trennung entscheidet
(1) ja damit selbst eine Art Berechnung oder "Move-Funktion" darstellt, wenn man so will
und
(2) dann Dinge über die Funktionsweise der Move-Funktion wissen muss, die ihn eigentlich nichts angehen, sondern die nur in die Move-Funktion hinein gehören. Ohne dieses Wissen wäre eine solche Trennung ja gar nicht möglich.

Eine Abarbeitung nach Prioritäten oder auch parallel zum Rendering ist sicherlich möglich und wird auch praktiziert. Allerdings bleibt die Entscheidung darüber, was eigentlich wichtiger ist dann doch der Move-Funktion selbst überlassen. Denn nur diese kann das wissen, außer man will das Problem der Wissens-Redundanz aus (2) wieder einführen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

9

17.02.2011, 14:13

Normalerweise werden die meisten Spiele mit diesem Prinzip umgesetzt. So ein Game-Loop hat halt einfach den Vorteil, dass Logik und Zeichnen getrennt sind. Das ist nicht nur was, was in Hobbyprojekten so umgesetzt wird. Auch große Spieleschmieden benutzen diese Technik. Nur weil es einfach ist heisst es nicht das es schlecht ist;) Auch wenn viele Leute denken je komplexer und wichtiger sich was anhört umso besser ist es, was aber ein typisches Problem von uns deutschen ist;) Aber gut darum gehts ja nicht. Es gibt natürlich auch andere Techniken wie du dein Spiel aufbauen kannst.
Stell dir vor du programmierst ein Kartenspiel und benutzt dafür normale Gui-Komponenten. Zum Beispiel möchtest du ein Skat-Spiel mit Qt programmieren. Da würdest du dann keinen Game-Loop haben, sondern eher auf andere Designs setzen. Dort würde sich zum Beispiel Model-View-Controller anbieten. Zu MVC findest du genug Sachen bei google. Dieses Design wird bei vielen Anwendungen eingesetzt, kann aber mit ein bischen Anpassung auch bei manchen Spielen eingesetzt werden. Du könntest dir dein Design auch ganz anders einteilen. Als Beispiel jede Klasse zeichnet sich selber und hat die eigene Logik in sich. Jetzt läufst du jedes Objekt einfach durch und sagst "Führe das Objekt aus". Dadurch wird automatisch alles für das Objekt berechnet und es wird direkt gezeichnet. Das wäre natürlich ein super bescheidener Ansatz, aber er könnte je nach Art des Spiels funktionieren(Aber bitte niemals einsetzen ;) ). Die Sache ist wie du dein Spiel nun aufbaust liegt an dir, du solltest aber mit ein paar Techniken vertraut sein. In den meisten Fällen wirst du auf die Game-Loop Variante mit Update und Render zurückgreifen. Versuchs doch einfach mal so. Denke dir nen anderes Design aus und versuch damit einfach mal ein kleines Spiel zu schreiben. Pong oder vielleicht Tetris oder irgendwas. Dann siehst du schnell wie geeignet sowas ist;) Aber besser erstmal nur an kleinen Projekten ausprobieren.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

10

17.02.2011, 15:01

Also fallen die von mir genannten 'Nachteile' weniger ins Gewicht? Dass moderne PCs äußerst leistungsfähig sind ist klar, aber da ich selbst wenig bis fast gar keine Erfahrung habe, welche Funktionen oder Techniken wieviel Ressourcen benötigen frage ich lieber, bevor ich irgendwas aufsetze.

Zitat

Nur weil es einfach ist heisst es nicht das es schlecht ist
Logisch. Nur ist das Gegenteil oft genug der Fall (z.B. beim Vergleich Bubblesort-Quicksort). Das ist in etwa die Prämisse, nach der ich programmiere. Nicht zweimal (1x einfach und 1x effektiv), sondern erst die perfekte Lösung raussuchen und dann loslegen. Sollte sich dann die Lösung als einfach herausstellen hab ich evtl Zeit verloren, kann mir aber sicher sein, nicht nochmal anfangen zu müssen :)

Werbeanzeige