2017-05-21 22 views
0

我有一个包和2类: AbstractEntity Entity(实现AbstractEntityPlayer(其延伸Entity实例的一类将不运行的重写方法

我有public void method called move()。这是在AbstracEntity宣布,在Entity为空白方法和@Overridden@Overridden再次Player的播放器,我实际的招法。然而,当我把这个代码在我的主循环:

for(Entity entity:allEntities){ 
    entity.move(); 
    renderer.processEntity(entity); 
} 

Move方法在实体类实现: @Override 公共无效移动(){}

和播放机类如:

@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

请包括'Entity'类和'Player'类的相关代码(即两个类中的'move()'的实现)。 – Eran

+0

这两个实现都添加了,该方法被调用的实体从实体数组中拉出,但是作为玩家类添加。 – Peter

回答

0

结构应该是这样的:

Player extends Entity 
Entity extends AbstractEntity 

和实例,你指的应该调用播放器的方法是Player
Entity entity = new Player();

0

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

+1

在你的问题最后加上**编辑**部分 –

相关问题