2014-04-03 108 views
0

我想用libGdx做一個遊戲並使用MVC模式。我有一個我的遊戲模型,我打算一直在運行,而不是從應用程序的渲染方法。正因爲如此,我在我的課上完成了這個任務,從libgdx繼承了Game: 首先,我將連續渲染設置爲false,並調用渲染方法,我使用我的遊戲屏幕作爲模型的偵聽器。渲染方法沒有繪製任何東西JAVA LibGDX

public class MyGame extends Game { 

GameModel model; 
GameScreen gs; 

@Override 
public void create() { 
    Gdx.graphics.setContinuousRendering(false); 
    Gdx.graphics.requestRendering(); 
    model = new GameModel(); 
    gs = new GameScreen(this, model); 
    model.addPCL(gs); 
    setScreen(gs); 
    model.runGame(); 


} ... 

在我的模型我只是想一個簡單的循環,其中在最後我解僱一個PropertyChangeEvent我gameScreen。一切工作正常,我有調試打印,顯示我的遊戲渲染方法被調用,propertychange工作正常。問題在於繪圖應該在我的渲染方法中發生時,而不是繪製一切只是崩潰,直到模型中的循環結束。然後,我的渲染方法被窗口上的輸入改變(如果我移動鼠標或點擊等)被調用,並且繪圖現在正在顯示。

在我的GameScreen類中,我已經嘗試使用Gdx.graphics.requestRendering(),它似乎沒有做任何事情,這裏我的debbuggin打印甚至沒有出現。 我也嘗試使用MyGame類來觸發它的渲染方法,這至少顯示我的調試打印。

@Override 
public void propertyChange(PropertyChangeEvent evt) { 
    System.out.println("Event recieved"); 
    myGame.render(); 
    //Gdx.graphics.requestRendering(); 
} 
@Override 
public void render(float delta) { 
    System.out.println("mapscreen render beginning: " + delta); 
    Gdx.gl.glClearColor(0, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    // Stuff that should be drawn happens here  
} 

有誰知道什麼可以引起我的渲染方法被調用,但爲什麼它不是真正在做什麼它說,它應該在的方法嗎?爲什麼不是Gdx.graphics.requestRendering()甚至觸發我的調試打印?

回答

0

是你的model.runGame();阻止操作?如果是這樣,create()方法永遠不會結束。因此LibGDX主線程停留在那裏。但是LibGDX線程需要在後臺運行。

也許你應該在另一個線程中啓動model.runGame()。