Open cagix opened 4 months ago
Andererseits wird in den Beispielen die currentXVelocity gesetzt (erstes Codebeispiel im Quickstart unter "Held bewegen") bzw. die xVelocity gesetzt über die PlayerComponent daraus beim Update die currentXVelocity bestimmt (zweites Codebeispiel im Quickstart unter "Held bewegen").
Hier verwirrt mich deine Verwirrung. In beiden Code Beispielen wird die currentYVelocity
gesetzt und zwar auf den Wert von yVelocity
.
Die yVelocity
ist nur eine Konstante, um dir als Programmiere zu helfen eine feste Bewegungsgeschwindigkeit-Parameter zu speichern. Du willst ja, dass dein Monster WENN es sich bewegt, sich immer gleich schnell bewegt.
Das VelocitySystem
juckt sich nicht für die xVelocity
bzw yVelocity
, das interessiert sich nur für die currentXvelocity
und currentYvelocity
<p>The system will take the {@link VelocityComponent#currentXVelocity()} and {@link
VelocityComponent#currentYVelocity()} and calculate the new position of the entity based on their
current position stored in the {@link PositionComponent}. If the new position is a valid
position, which means the tile they would stand on is accessible, the new position will be set.
If the new position is walled, the {@link VelocityComponent#onWallHit()} callback will be
executed.
Die Previous Geschichte ist ein helper, manchmal ist es gut zu wissen mit welcher Geschwindigkeit sich die Entität im Frame davor bewegt hat (z.B für Animationen).
Ich finde das in der Dokumentation auch entsprechend wieder, jetzt ist die Frage: Bin ich Betriebsblind oder du mit zu vielen Verhaltens-Annahmen unterwegs.
@AMatutat Ich würde natürlich sofort auf "betriebsblind" tippen 🤣
Dennoch: Die Tatsache, dass ich hier länger als 10 Minuten dran gesessen habe, um die Mechanismen nachzuvollziehen und zu schauen, welche der Methoden ich denn nun nehmen muss, und dass ganz offensichtlich die Javadoc in VelocityComponent
nicht wirklich stimmt (oder zumindest was anderes meint als sie sagt) und dass die Zusammenhänge zwischen xVelocity
und currentXvelocity
nicht wirklich transparent sind ...
In der Javadoc der
VelocityComponent
steht https://github.com/Dungeon-CampusMinden/Dungeon/blob/a10bc189942dbe31c31ecd83b7be947c7d1b73c9/game/src/core/components/VelocityComponent.java#L24-L26 - in der Javadoc desVelocitySystem
dann https://github.com/Dungeon-CampusMinden/Dungeon/blob/a10bc189942dbe31c31ecd83b7be947c7d1b73c9/game/src/core/systems/VelocitySystem.java#L22-L25Da die Werte innerhalb der Component nicht zusammenhängen, ist das ein netter Widerspruch :)
Der Chef-Entwickler (@AMatutat) würde für das Setzen der Geschwindigkeit eher
currentXVelocity
nutzen, undxVelocity
wird eher als eine Art Höchstgeschwindigkeit angesehen.Andererseits wird in den Beispielen die
currentXVelocity
gesetzt (erstes Codebeispiel im Quickstart unter "Held bewegen") bzw. diexVelocity
gesetzt über diePlayerComponent
daraus beim Update diecurrentXVelocity
bestimmt (zweites Codebeispiel im Quickstart unter "Held bewegen").Welche Methode ist denn nun die, die ich als Nutzer der API benutzen soll?
currentXVelocity
oderxVelocity
? Und was hat es mitpreviousXVelocity
auf sich?VERWIRREND!
Das muss besser abgestimmt und dokumentiert werden. Außerdem sollte es eine sinnvolle Umbenennung geben, so dass man als Nutzer weiss, welche der Methoden man denn nun aufrufen soll. Müssen wirklich drei Methoden in die API getan werden (es gibt ja auch noch
previousXVelocity()
...)? Und falls ja, sollten diese Methoden irgendwie gekoppelt werden, d.h. ein Setzen der aktuellen Geschwindigkeit aktualisiert automatisch den internen bisherigen/alten Wert?!