0

这是 menuscreen 类,调用时将使用作为参数传递的 spritebatch 绘制菜单屏幕。问题是绘图命令第二次无法执行(即在我们重新启动应用程序之后),而所有其他功能都可以正常工作(如果我们单击放置它的位置,您仍然可以使用我们放置在屏幕上的按钮)

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 上下文的生命周期相关,而 OpenGL 上下文的生命周期与 Activity 的可见性相关)最有可能遇到了不匹配的问题。在应用程序“重新启动”时,我怀疑您实际上只是退出了 Activity,并且当您“重新启动”您的应用程序时,Android 正在缓存该进程并在同一进程中启动一个新的 Activity。在这种情况下,您将拥有一个有效的 JavaTexture对象,但它在 OpenGL 上下文中“指向”的底层字节已经消失(因为当 Activity 不再可见时,OpenGL 上下文无效)。

修复是在活动创建时重新加载纹理。您可以确保所有包含纹理的对象(以及包含包含纹理的对象的对象等)都与 Activity 生命周期相关联。

于 2012-09-06T16:00:07.283 回答