类的实例不会运行重写方法

时间:2017-05-21 10:28:58

标签: java class methods lwjgl game-engine

我有一个包和2个类: AbstractEntity Entity(实现AbstractEntityPlayer(扩展Entity

我有public void method called move()。在AbstracEntity中声明,@OverriddenEntity中声明为空白方法,@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()方法而不是被覆盖的方法。我不确定如何过于正确地重构这个实例呢?

2 个答案:

答案 0 :(得分:0)

结构应该是:

Player extends Entity
Entity extends AbstractEntity

您所指的实例应该是Player来调用播放器方法 Entity entity = new Player();

答案 1 :(得分:0)

我发现了我的错误,只是一个问题隐藏在代码折叠中的情况。玩家实体从未被添加,实体列表也被处理和渲染,而是单独渲染。我现在也添加了allEntities数组,它按预期运行。如果我只是打开我的代码折叠,就可以避免几个小时的挫败感。