2017-05-21 40 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

在你的問題最後加上**編輯**部分 –

相關問題