AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [Andorra2D] Ein paar Fragen - Kollisionen und Timer
Thema durchsuchen
Ansicht
Themen-Optionen

[Andorra2D] Ein paar Fragen - Kollisionen und Timer

Ein Thema von nuclearping · begonnen am 20. Sep 2012 · letzter Beitrag vom 25. Sep 2012
 
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

[Andorra2D] Ein paar Fragen - Kollisionen und Timer

  Alt 20. Sep 2012, 01:48
Hey,

ich habe ein paar Fragen bezüglich Andorra 2D.

1) Kollisionen

Ich habe in meinem Projekt mehrere Sprite-Klassen, die von einer TAnimationSprite(TImageSprite)-Klasse abgeleitet werden:

Code:
TCustomCharacter(TAnimationSprite)
|-- TAICharacter(TCustomCharacter)
+-- TPlayerCharacter(TCustomCharacter)

TCustomProjectile(TAnimationSprite)
|-- TFireballProjectile(TCustomProjectile)
+-- T...Projectile(TCustomProjectile)
TPlayerCharacter und TAICharacter laufen über das Spielfeld (isometrisch) und können mit TCustomProjectile schießen (diverse "Zauber" wie Feuerball, Blitz, Flächenzauber, ...).

Das Problem hierbei: Bei all diesen Klassen (oder der TAnimationSprite-Hauptklasse) müßte - nach meinem Andorra-Verständnis jedenfalls - im DoMove "Collision" aufgerufen werden, damit diese Sprites ihre eigene Kollision mit anderen Sprites mitbekommen.

Zum Beispiel sollen sich auch Charaktere gegenseitig blocken, also nicht einfach gegenseitig durchlaufen können. AI-Charaktere müssen, genauso wie der Player-Charakter und Projektile auch, an Bäumen, Gebäuden, usw. kollidieren.

Wenn ich in die TAnimationSprite-Klasse im DoMove Collision aufrufe und somit das Problem für alle abgeleiteten Klassen löse, klappt das auch alles, so wie es soll. Aber: Umso mehr Sprites es werden, desto mehr geht die Performance in den Keller. ~100 Charaktere sind noch ok, ab 200 sinken die FPS von 60 (VSync) auf ~20. Es ist nicht so, dass diese Menge ein Dauerzustand wäre, aber möglich könnte es schon werden.

Gibt es da einen besseren Weg? CollisionOptimizationTyp ist bei allen schon auf ctOptimized gestellt. Was mir noch einfallen würde wäre, bei Sprites, die nicht im Sichtfeld des Spielers sind, die Kollisionserkennung zu überspringen. Allerdings geht das im Prinzip nicht, da sich AI-Charaktere auch ausserhalb der Reichweite des Spielers gegenseitig angreifen können sollen, wenn sie sich begegnen. Wobei man hier dann wieder sagen kann: Solange das Sprite nicht im Kampf ist, findet keine Kollisionserkennung statt. Sonst ja.

2) Timer

Wie löst man mit Andorra am besten Aufgaben, die Timer involvieren? Zum Beispiel Abklingzeiten auf Fähigkeiten oder "Schaden / Heilung über Zeit"-Zauber? TThread? TTimer? GetTickCount?

Geändert von nuclearping (20. Sep 2012 um 01:52 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz