java Ashley ECS迭代系统未处理实体族
不知何故,我无法让IteratingSystem
工作。在更新过程中,我仔细检查是否存在实体,它返回的值大于0。但这意味着processEntity
会被调用,但它永远不会运行
//...
import net.madmenyo.teststuff.AshleyTest.components.MovementComponent;
import net.madmenyo.teststuff.AshleyTest.components.PositionComponent;
//...
public class MovementSystem extends IteratingSystem {
private ComponentMapper<PositionComponent> pm;
private ComponentMapper<MovementComponent> mm;
public MovementSystem () {
super(Family.all(PositionComponent.class, MovementComponent.class).get());
pm = ComponentMapper.getFor(PositionComponent.class);
mm = ComponentMapper.getFor(MovementComponent.class);
}
@Override
public void processEntity (Entity entity, float deltaTime) {
System.out.println("Process moveSystem");
PositionComponent position = pm.get(entity);
MovementComponent movement = mm.get(entity);
position.x += movement.velocityX * deltaTime;
position.y += movement.velocityY * deltaTime;
}
@Override
public void update(float deltaTime) {
Engine engine = getEngine();
int count = engine.getEntitiesFor(Family.all(PositionComponent.class, MovementComponent.class).get()).size();
}
}
好的,对于更新方法中的每个计数,它应该在每次更新引擎时运行ProcessEntity
。因为update被调用,所以引擎被更新,因为count > 0
它应该是处理实体的,但是它从来没有被调用过。通过在运行时检查引擎,它还包含我定义的族的多个实体
# 1 楼答案
processEntity(...)
由我没有调用的父更新方法调用。容易修复一旦我再看一遍,我就把它放在这里以防万一