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;
}

createScene()メソッドでgameOverTextも初期化しましたが、

gameOverText = new Text(0, 0, resourceManager.getFontArial(), "Game Over!", mVBOM);

この段階で、コードは正常に動作し、テキストゲーム オーバー! を呼び出すと表示されonDie()ます。

しかし、onDie()以下のようにメソッドを再設計すると、Text Game Over! 呼び出し時は表示されませんonDie()

@Override
public void onDie() {
    if (!gameOverDisplayed)
    {
        mCamera.setChaseEntity(null);
        gameOverText.setPosition(mCamera.getCenterX(), mCamera.getCenterY());
        attachChild(gameOverText);
        gameOverDisplayed = true;
    }
}

コードが同じであるため、この動作は奇妙に思えます。唯一の違いは、後者のonDie()方法でコードをインラインで指定したことです。

誰かがこの動作の原因を理解するのを手伝ってくれますか? これに関して logcat に書き込まれたログはありません。

4

1 に答える 1

1

最初のバージョンでは、クラスdisplayGameOverText()内からメソッドを呼び出します。しかし、メソッドはクラス外のどこかPlayerにあると思います。これが、2 番目のバージョンが機能しない理由です。これは、この行が実際にはを ではなくに接続しているためです。displayGameOverText()PlayerattachChild(gameOverText);gameOverTextPlayerScene

はクラスPlayerを拡張しているように見えるSpriteので、プレーヤーに好きなものを付けることができます。すべて(スプライト、テキスト、長方形...) を別のものまたは(シーンもエンティティ)Entityにアタッチできます。ただし、常に同じ効果があるとは限りません (またはまったく表示されない場合もあります)。だから私はそれが2番目のバージョンで起こることだと思います. テキストはプレーヤーにアタッチされますが、プレーヤーがシーンにアタッチされていないか、テキストが画面からはみ出しています。EntityScene

何かをエンティティにアタッチすると (テキストをプレーヤーに添付するなど)、その位置は常に親エンティティに対して相対的になります。したがって、Playerがシーンにアタッチされた位置 (100,100) のどこかにあり、テキストがプレーヤーの位置 (50,50) にアタッチされている場合、テキストは実際にはシーンの位置 (150,150) にあります。

簡単に言うと、ラインattachChild(gameOverText);はプレーヤー内からではなく、シーン内から呼び出す必要があります。

お役に立てれば!

于 2013-03-19T22:11:16.513 に答える