Ich bin auf diese Frage gestoßen, als ich ein Videospiel in C # entwarf.
Wenn wir Spiele wie Battlefield oder Call of Duty in Betracht ziehen , fliegen Hunderte oder sogar Tausende von Kugeln gleichzeitig. Ereignisse werden ständig ausgelöst und, soweit ich weiß, verbraucht dies viel Rechenleistung ... oder doch? Ich möchte wissen, wie verschiedene Spieleentwickler Aufzählungszeichen (2D und 3D) verwalten und welche Methode jeweils am effizientesten ist.
Ich habe die Frage gelesen, wie Kugeln in Videospielen simuliert werden. Aber es geht nicht darum, wie Aufzählungszeichen aus der Sicht des Programmdesigns funktionieren.
Ich hatte ein paar Ideen, aber jede hat ihre Nachteile:
Die effizienteste Methode, die ich mir vorstellen kann (für 2D-Spiele):
Angenommen, ich würde eine Klasse namens Bullet erstellen, und so lange der Benutzer eine Schaltfläche gedrückt hält, würde alle 0,01 Sekunden ein Bullet-Objekt erstellt. Diese Kugel hat:
1 Geschwindigkeit
2 Startposition, von der aus aufgenommen wird
3 Sprite-Textur
4 Ein On-Hit-Effekt
Da die Kugel eine eigene Klasse sein würde, könnte sie das Zeichnen, Bewegen und Zuhören von Aktionen selbst verwalten.
Wäre es nicht schwierig für den Prozessor, Tausende dieser Objekte zu verarbeiten, die instanziiert und dann zerstört werden (wenn ein On-Hit-Effekt ausgelöst wird)? RAM-Speicher?
Effiziente Methode für 3D-Spiele - Ein weiterer Gedanke, den ich hatte, war:
Sagen wir, ich erstelle eine Waffenklasse. Diese Waffe hat verschiedene Eigenschaften, von denen einige:
1 Ermitteln Sie, wohin die Waffe zielt, und bestimmen Sie, ob sie auf ein Ziel gerichtet ist
2 Lösen Sie eine Animation des Waffenschießens aus
3 Verfügt über eine doDamage () -Methode, die angibt, auf was auch immer die Waffe gerichtet ist, um die Gesundheit zu subtrahieren
4 Benachrichtigt eine Aufzählungszeichen-Animationsklasse, wenn die Schaltfläche gedrückt wird
Ich könnte dann eine statische Klasse, z. B. BulletAnimation, erstellen, die eine Benachrichtigung darüber erhält, wo sich die Waffe befindet, auf die sie gerichtet ist (für das Ziel der Kugel), und Informationen zu einem geeigneten Sprite und einer Geschwindigkeit, die für die Kugel verwendet werden können . Diese Klasse zeichnet dann Sprites (auf einem neuen Thread, vielleicht idk) basierend auf beiden Positionen und dem gewünschten Sprite, um eine Kugel zu simulieren, die von einer Waffe abgefeuert wird.
Letzteres scheint viel schwieriger zu programmieren zu sein, und würde es nicht eine Menge Rechenleistung erfordern, die Statik ständig aufzurufen, um dies für Tausende von Aufzählungszeichen gleichzeitig zu tun? Ständige Aktualisierungen von Start- und Endpositionen wären ebenfalls schwierig.
Meine Frage ist, wie Spieleentwickler es am effizientesten machen. Wechselt diese Methode von 2D- zu 3D-Spielen?
pew-pew-pew
Technologie :)