Hallo,
ich habe ein , wie ich dachte, relativ einfaches Problem.
Ich habe ein Array vom Typ einer abstrakten Oberklasse. Dort ist maximal ein Element jeder Subklasse speichern ... Ich möchte eine Methode schreiben, durch welche man den Klassennamen übergeben kann und dann das ensprechende Objekt von dieser Klasse zurückbekommt mit dem richtigem Typ.
Das sind zwei Möglichkeiten, die mir so eingefallen sind. Beide sehen mir aber nicht nach super Programmierstil aus, sondern eher nach einer Zwischenlösung. Darüber hinaus, wird mein Spiel dadurch enorm verlangsamt. Es ist dann plötzlich in Zeitlupe ... ich kann mir aber nicht vorstellen, dass es davon kommt oO
Die Methode hat man vorher so aufgerufen:
PositionComponent position = (PositionComponent) manager.getComponent(entity, PositionComponent.class);
Mit der Änderung so:
PositionComponent position = manager.getComponent(entity, PositionComponent.class);
ich habe ein , wie ich dachte, relativ einfaches Problem.
Ich habe ein Array vom Typ einer abstrakten Oberklasse. Dort ist maximal ein Element jeder Subklasse speichern ... Ich möchte eine Methode schreiben, durch welche man den Klassennamen übergeben kann und dann das ensprechende Objekt von dieser Klasse zurückbekommt mit dem richtigem Typ.
Java:
private HashMap<Entity, ArrayList<EntityComponent>> entities;
@SuppressWarnings("unchecked")
public <T extends EntityComponent> T getComponent(Entity entity, Class<T> type) {
for(EntityComponent component: this.entities.get(entity)) {
if(component.getClass() == type)
return (T)component;
}
return null;
}
Java:
private HashMap<Entity,ArrayList<EntityComponent>> entities;
public <T extends EntityComponent> T getComponent(Entity entity, Class<T> type) {
for(EntityComponent component: this.entities.get(entity)) {
if(component.getClass() == type)
return type.cast(component);
}
return null;
}
Das sind zwei Möglichkeiten, die mir so eingefallen sind. Beide sehen mir aber nicht nach super Programmierstil aus, sondern eher nach einer Zwischenlösung. Darüber hinaus, wird mein Spiel dadurch enorm verlangsamt. Es ist dann plötzlich in Zeitlupe ... ich kann mir aber nicht vorstellen, dass es davon kommt oO
Die Methode hat man vorher so aufgerufen:
PositionComponent position = (PositionComponent) manager.getComponent(entity, PositionComponent.class);
Mit der Änderung so:
PositionComponent position = manager.getComponent(entity, PositionComponent.class);