Danke für deinen Beitrag.
Bei mir sieht das für das Beispiel ähnlich aus:
Components_
- MoveComponent(Direction)
- TurnComponent
...
- SpeedComponent ... TextureC. etc.
Systeme:
- InputSystem (Gibt MoveComponent an die Spieler Entity)
- MovementSystem (Berechnet anhand von MoveComponent und Speed die neue Positon)
- ReachedTargetSystem (Prüft ob das Ziel erreicht wurde und entfernt MoveComponent)
- WorldSystem (Hat Wissen über alle für den Spieler sichtbare Entities, "Tile"Entities, "Enemy"Entities.. usw, wird für Collisions-Abfragen benutzt.)
Kannst du mir die InputComponent genauer erklären.
Derzeit hatte ich im InputSystem Eingaben verarbeitet und durch einen MoveCommand eine MoveComponent an die Spieler Entity geschickt.
Übrigens habe ich gerade herausgefunden wie ich auf das Hinzufügen und das Löschen von Components via Listener reagieren kann. Ashley bietet das doch.
Da aber nicht sehr clean"code" verpackt kommt man nicht so einfach drauf.
Man kann ein EntityListener mit einer Family bei der Engine registrieren und es wird entityAdded oder entityRemoved auch geworfen wenn nur eine der Components aus der Family entfernt wird und dadurch die Family nicht mehr matched.
Da muss man erstmal drauf kommen. Für mich sieht das so aus, als würde hier nur auf das Hinzufügen und Löschen einer Entity aus der Engine reagiert werden.
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
private static final Family FAMILY = Family.all(
WorldPositionComponent.class,
MoveComponent.class).get();
//...
engine.addEntityListener(FAMILY, new EntityListener() {
@Override
public void entityAdded(Entity entity) {
System.out.println("added");
}
@Override
public void entityRemoved(Entity entity) {
System.out.println("removed");
}
});
|