我正在尝试将Text对象附加到标题处理玩家死亡事件 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()
时会显示文字 Game Over!。
但是当我重新设计下面给出的onDie()
方法时,调用onDie()
时不会显示文字游戏结束!。
@Override
public void onDie() {
if (!gameOverDisplayed)
{
mCamera.setChaseEntity(null);
gameOverText.setPosition(mCamera.getCenterX(), mCamera.getCenterY());
attachChild(gameOverText);
gameOverDisplayed = true;
}
}
这种行为对我来说很奇怪,因为代码是一样的。唯一的区别是我在后一种onDie()
方法中内联了代码。
有人可以帮助我了解导致此行为的原因。 logcat中没有关于此的日志。
答案 0 :(得分:1)
在第一个版本中,您可以在displayGameOverText()
类中调用Player
方法。但我想方法displayGameOverText()
位于Player
类之外的某个地方。这就是为什么第二个版本不起作用的原因,因为行attachChild(gameOverText);
实际上将gameOverText
附加到Player
而不是Scene
。
Player
似乎扩展了Sprite
类,因此您可以将所需内容附加到播放器上。每个Entity
(精灵,文本,矩形......)都可以附加到另一个Entity
或Scene
(场景也是一个实体)。但它并不总是具有相同的效果(甚至可能根本不可见)!所以我想这就是第二版中发生的事情。文本附加到播放器,但播放器未附加到场景,或文本不在屏幕上。
当您向实体附加某些内容(例如您的文本到播放器)时,该内容的位置始终与其父实体相关。因此,如果Player
位于场景附近的位置(100,100)并且文本附加在位置(50,50)给玩家 - 则文本实际上位于场景中的位置(150,150)。 / p>
长话短说,行attachChild(gameOverText);
需要从场景内调用,而不是从播放器内调用。
希望这有帮助!