2013-03-19 191 views
2

我想標題處理球員模具事件http://www.matim-dev.com/full-game-tutorial---part-13.html無法孩子附加到現場

下給出我有延伸Player類的AnimatedSprite到文本對象附加到一個場景。我創建通過,玩家

mPlayer = new Player(x, y, resourceManager.getVertexBufferObjectManager(), resourceManager.getCamera(), mPhysicsWorld) 
{ 
    @Override 
    public void onDie() { 
     if (!gameOverDisplayed) 
     { 
      displayGameOverText(); 
     } 
    } 
}; 

displayGameOverText()方法給出,

private void displayGameOverText() 
{ 
    mCamera.setChaseEntity(null); 
    gameOverText.setPosition(mCamera.getCenterX(), mCamera.getCenterY()); 
    attachChild(gameOverText); 
    gameOverDisplayed = true; 
} 

我也初始化gameOverText在createScene()方法,

gameOverText = new Text(0, 0, resourceManager.getFontArial(), "Game Over!", mVBOM); 

在這個階段的代碼作品罰款和文本遊戲結束!當調用onDie()時顯示

但是,當我重新設計onDie()方法,如下所示,文字遊戲結束!當調用onDie()時,不顯示

@Override 
public void onDie() { 
    if (!gameOverDisplayed) 
    { 
     mCamera.setChaseEntity(null); 
     gameOverText.setPosition(mCamera.getCenterX(), mCamera.getCenterY()); 
     attachChild(gameOverText); 
     gameOverDisplayed = true; 
    } 
} 

這種行爲在我看來很奇怪,因爲代碼是相同的。唯一的區別是我已經在後面的onDie()方法中給出了內聯代碼。

有人能幫我理解是什麼導致了這種行爲。 logcat中沒有寫入關於此的日誌。

回答

1

在第一個版本中,您可以從Player類中調用displayGameOverText()方法。但我想方法在Player類之外。這就是爲什麼第二個版本不起作用的原因,因爲attachChild(gameOverText);行實際上將gameOverText附加到Player而不是Scene

Player似乎延伸Sprite類,所以你可以附加你想要的任何東西給玩家。每個Entity(Sprite,Text,Rectangle ...)可以附加到另一個EntityScene(場景也是一個實體)。但它並不總是有相同的效果(甚至可能根本不可見)!所以我想這就是第二個版本發生的情況。文本被附加到播放器上,但是播放器沒有附加到場景中,或者文本不在屏幕上。

當你給一個實體附加某些東西(比如你的文本給玩家)時,那個東西的位置總是相對於它的父實體。因此,如果Player位於場景附近的位置(100,100),並且文本附加在位置(50,50)處給玩家 - 文本實際上位於場景中的位置(150,150)。

長話短說,行attachChild(gameOverText);需要從場景內調用,而不是從玩家內部調用。

希望這有助於!

+0

是的,你是對的。 Text對象被連接到Player實體。當我將Text對象附加到場景時,它可以正常工作'SceneManager.getInstance()。getCurrentScene()。attachChild(gameOverText);' – 2013-03-20 15:53:55