0

これは呼び出されると、パラメータとして渡された spritebatch を使用して menuscreen を描画する menuscreen クラスです。問題は、描画コマンドが 2 回目の実行に失敗することです (つまり、アプリケーションを再起動した後) が、他のすべての機能は完全に機能します (配置した位置をクリックすると、画面に配置したボタンを引き続き使用できます)。 )

public class MenuScreen extends Screen
{
    Texture Background,Playgame,Credits;
    Vector2 PlaygamePos,CreditsPos; 
    Rectangle PlaygameRect,CreditsRect,touchRect;

public MenuScreen() 
{
    Background = GameEngine.LoadTexture("Menu/bg.png");
    GameEngine.BackgroundTexture = Background;

    Playgame = GameEngine.LoadTexture("Menu/newgame.png");
    Credits = GameEngine.LoadTexture("Menu/credits.png");

    PlaygamePos = new Vector2(500,300);
    CreditsPos = new Vector2(500,200);

    PlaygameRect = new Rectangle(PlaygamePos.x,PlaygamePos.y,Playgame.getWidth(),Playgame.getHeight());
    CreditsRect = new Rectangle(CreditsPos.x,CreditsPos.y,Credits.getWidth(),Credits.getHeight());
}

@Override
public void Update(OrthographicCamera camera)
{
    if(GameEngine.isBackButton == true)
    {
        GameEngine.isBackButton = false;
        Gdx.app.exit();
    }

    if(GameEngine.isTouched() == true)
    {
        Vector3 touchPos = new Vector3();
        touchPos = GameEngine.TouchPos(camera);

        touchRect = new Rectangle(touchPos.x,touchPos.y,10,10);

        if(touchRect.overlaps(PlaygameRect))
        {
             SelectScreen = ScreenSelect.GamePlay;
        }
        else if(touchRect.overlaps(CreditsRect))
        {

        }
    }
}

@Override
public void Draw(SpriteBatch spriteBatch) 
{
    spriteBatch.draw(Credits,CreditsPos.x,CreditsPos.y);
    spriteBatch.draw(Playgame,PlaygamePos.x,PlaygamePos.y);
}

@Override
public void Resume() {
    // TODO Auto-generated method stub

}

@Override
public void Pause() {
    // TODO Auto-generated method stub

}

@Override
public void Dispose()
{

}

}

テクスチャと SpriteBatches を破棄しようとしても、どれも機能しませんでした!

4

1 に答える 1

0

ほとんどの場合、Java オブジェクトの有効期間 (アプリケーション プロセスの有効期間に関連付けられています) とテクスチャ オブジェクトの有効期間 (アクティビティの可視性に関連付けられている OpenGL コンテキストの有効期間に関連付けられています) が一致していません。アプリの「再起動」では、実際にアクティビティを終了しているだけで、アプリを「再起動」すると、Androidはプロセスをキャッシュし、同じプロセスで新しいアクティビティを開始していると思われます。この場合、有効な JavaTextureオブジェクトが得られますが、OpenGL コンテキストでそれが「指している」基になるバイトはなくなります (アクティビティが表示されなくなると OpenGL コンテキストが無効になるため)。

修正は、アクティビティの作成時にテクスチャを再ロードすることです。テクスチャを含むすべてのオブジェクト (およびテクスチャを含むオブジェクトを含むオブジェクトなど) がアクティビティのライフサイクルに関連付けられていることを確認することができます。

于 2012-09-06T16:00:07.283 に答える