我正在尝试将文本对象附加到场景,如标题“处理播放器死事件” http://www.matim-dev.com/full-game-tutorial---part-13.html
我有一个AnimatedSprite扩展了Player类。我创建了一个播放器,
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()
时显示。但是当我重新设计如下所示的
onDie()
方法时,文本游戏结束了!调用onDie()
时不显示。@Override
public void onDie() {
if (!gameOverDisplayed)
{
mCamera.setChaseEntity(null);
gameOverText.setPosition(mCamera.getCenterX(), mCamera.getCenterY());
attachChild(gameOverText);
gameOverDisplayed = true;
}
}
由于代码相同,这种行为对我来说似乎很奇怪。唯一的不同是,我在后一种
onDie()
方法中内联给出了代码。有人可以帮助我了解造成此问题的原因。在logcat中没有与此相关的日志。
最佳答案
在第一个版本中,您从displayGameOverText()
类中调用Player
方法。但是我想方法displayGameOverText()
在Player
类之外。这就是第二个版本不起作用的原因,因为行attachChild(gameOverText);
实际上将gameOverText
附加到Player
而不是Scene
。Player
似乎扩展了Sprite
类,因此您可以将想要的内容附加到播放器上。每个Entity
(精灵,文本,矩形...)都可以附加到另一个Entity
或Scene
(场景也是一个实体)。但是它并不总是具有相同的效果(或者甚至根本不可见)!因此,我猜这就是第二版中发生的情况。文本将附加到播放器,但是播放器未附加到场景,或者文本不在屏幕上。
当您将某物附加到实体(例如将文本附加到播放器)时,该物的位置始终相对于其父实体。因此,如果Player
位于场景所在的位置(100,100)处,并且文本位于播放器的位置(50,50)处,则文本实际上位于场景上的位置(150,150)。
长话短说,attachChild(gameOverText);
行需要从场景内部而不是播放器内部进行调用。
希望这可以帮助!
关于android - 无法将 child 附加到场景,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15506906/