Android 无法将子对象附加到场景

Android 无法将子对象附加到场景,android,andengine,Android,Andengine,我正在尝试将文本对象附加到场景中,标题为“处理玩家死亡事件” 我有一个动画精灵,它扩展了玩家类。我创造了一个玩家 mPlayer = new Player(x, y, resourceManager.getVertexBufferObjectManager(), resourceManager.getCamera(), mPhysicsWorld) { @Override public void onDie() { if (!gameOverDisplayed)

我正在尝试将文本对象附加到场景中,标题为“处理玩家死亡事件”

我有一个动画精灵,它扩展了玩家类。我创造了一个玩家

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;
}
我还在
createScene()
方法中初始化了gameOverText

gameOverText = new Text(0, 0, resourceManager.getFontArial(), "Game Over!", mVBOM);
在此阶段,代码工作正常,文本游戏结束onDie()时,将显示strong>

@Override
public void onDie() {
    if (!gameOverDisplayed)
    {
        mCamera.setChaseEntity(null);
        gameOverText.setPosition(mCamera.getCenterX(), mCamera.getCenterY());
        attachChild(gameOverText);
        gameOverDisplayed = true;
    }
}
但是当我重新设计下面给出的
onDie()
方法时,文本游戏结束了onDie()时,不会显示strong>

@Override
public void onDie() {
    if (!gameOverDisplayed)
    {
        mCamera.setChaseEntity(null);
        gameOverText.setPosition(mCamera.getCenterX(), mCamera.getCenterY());
        attachChild(gameOverText);
        gameOverDisplayed = true;
    }
}
这种行为对我来说似乎很奇怪,因为代码是相同的。唯一的区别是,我在后面的
onDie()
方法中内联给出了代码


有人能帮我理解是什么导致了这种行为吗。logcat中没有写入与此相关的日志。

在第一个版本中,您从
Player
类中调用
displayGameOverText()
方法。但是我猜方法
displayGameOverText()
Player
类之外的某个地方。这就是为什么第二个版本不起作用的原因,因为行
attachChild(gameOverText)
实际上将
游戏超文本
附加到
玩家
而不是
场景

Player
似乎扩展了
Sprite
类,因此您可以随时将所需内容附加到播放器。每个
实体
(精灵、文本、矩形…)都可以附加到另一个
实体
或一个
场景
(场景也是一个实体)。但它并不总是具有相同的效果(甚至可能根本看不见)!所以我猜第二个版本就是这样。文本将附加到播放机,但播放机可能未附加到场景,或者文本不在屏幕上

当您将某个内容附加到某个实体(如将文本附加到播放器)时,该内容的位置始终相对于其父实体。因此,如果
播放器
位于场景附加位置(100100)的某个位置,并且文本附加在播放器的位置(50,50)–文本实际上位于场景中的位置(150150)

长话短说,一行
attachChild(游戏超文本)需要从场景中调用,而不是从播放器中调用


希望这有帮助

是的,你说得对。文本对象已附加到播放器实体。当我将文本对象附加到场景时,它工作正常
SceneManager.getInstance().getCurrentScene().attachChild(gameOverText)