2012-09-06 78 views
0

退出後,屏幕無法第二次啓動這是menuscreen類,當被調用時將使用作爲參數傳遞的spritebatch繪製menuscreen。問題在於繪圖命令無法第二次執行(即,在我們重新啓動應用程序之後),而所有其他功能都可以正常工作(如果單擊放置在屏幕上的位置,您仍然可以使用我們放置在屏幕上的按鈕)安卓(libgdx)

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沒有工作!

回答

0

很有可能您遇到了Java對象(與應用程序進程的生命週期相關)的生命週期與紋理對象的生命週期(與綁定到可見性的OpenGL上下文的生命週期有關的活動)。在應用程序「重新啓動」時,我懷疑你實際上是退出了活動,並且當你「重新啓動」你的應用程序時,Android正在緩存該進程並在同一進程中啓動一個新的活動。在這種情況下,您將擁有一個有效的Java Texture對象,但它在OpenGL上下文中「指向」的底層字節已消失(因爲當Activity不再可見時,OpenGL上下文無效)。

修復是在活動創建時重新加載紋理。您可以確保所有包含紋理的對象(以及包含包含紋理的對象的對象等)都綁定到Activity生命週期。