2013-03-19 193 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