我有一个包和2个类:
AbstractEntity
Entity
(实现AbstractEntity
)
Player
(扩展Entity
)
我有public void method called move()
。在AbstracEntity
中声明,@Overridden
在Entity
中声明为空白方法,@Overridden
再次在Player
中声明,这是我对玩家的实际移动方法。但是,当我在主循环中调用此代码时:
for(Entity entity:allEntities){
entity.move();
renderer.processEntity(entity);
}
move方法在Entity类中实现: @覆盖 public void move(){ }
在播放器类中:
@Override
public void move(){
checkInputs();
rotY += currentTurnSpeed * DisplayManager.getFrameTimeSeconds();
float distance = currentSpeed * DisplayManager.getFrameTimeSeconds();
float dx = (float) (distance * Math.sin(Math.toRadians(rotY)));
float dz = (float) (distance * Math.cos(Math.toRadians(rotY)));
upwardsSpeed+= Gravity * DisplayManager.getFrameTimeSeconds();
float dy = upwardsSpeed * DisplayManager.getFrameTimeSeconds();
if(super.getPosition().y<TerrainHeight){
upwardsSpeed = 0;
dy = TerrainHeight - super.getPosition().y;
}
super.increasePosition(dx, dy, dz);
super.setRotation(new Vector4f(0f,(float) (Math.sin(Math.toRadians(-rotY/2))),0f,(float) Math.cos(Math.toRadians(-rotY/2))));
System.out.println("here");
}
这将执行空白move()
方法而不是被覆盖的方法。我不确定如何过于正确地重构这个实例呢?
答案 0 :(得分:0)
结构应该是:
Player extends Entity
Entity extends AbstractEntity
您所指的实例应该是Player
来调用播放器方法
Entity entity = new Player();
答案 1 :(得分:0)
我发现了我的错误,只是一个问题隐藏在代码折叠中的情况。玩家实体从未被添加,实体列表也被处理和渲染,而是单独渲染。我现在也添加了allEntities数组,它按预期运行。如果我只是打开我的代码折叠,就可以避免几个小时的挫败感。