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)代码>