java - Ashley ECS IteratingSystem 不处理实体系列
问题描述
不知何故,我无法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();
}
}
Afaik,对于 update 方法中的每个计数,它应该在ProcessEntity
每次更新引擎时运行。由于 update 被调用,引擎被更新并且因为count > 0
它应该处理实体,但它从未被调用。通过在运行时检查引擎,它还包含我定义的系列的多个实体。
解决方案
processEntity(...)
由我没有调用的父更新方法调用。一旦我再次查看它就很容易修复,我只是把它留在这里以防万一。
@Override
public void update(float deltaTime) {
super.update(deltaTime); // <-- call parent update
}
推荐阅读
- chisel - 什么机制可以在 chisel3 详细说明中显示组件 ID
- javascript - 如何使用流分析存储传入事件的 UDF 返回值?
- javascript - 如何在尚未满足条件时执行一系列控制
- excel - 即使使用新的空白工作簿,Excel 也会警告“此工作簿包含链接”
- c# - 单选按钮始终选中项目显示 False
- elasticsearch - 带有打印机的设备监控状态的 ElasticSearch 数据可视化
- python - 将类应用于列表中的项目
- visual-studio - Visual Studio 2019 中的 Emacs 键绑定
- apache-spark - Spark Streaming如何保证多个foreachRDD的顺序
- javascript - 单击表单的搜索按钮时从 API 获取数据并在 React JS 的另一个页面上显示数据