2014-04-03 2 views
0

libGdx로 게임을 만들고 MVC 패턴을 사용하려고합니다. 내 게임의 모델은 응용 프로그램의 렌더링 메서드 대신 항상 실행하려고합니다. 이 때문에 나는 libgdx에서 Game을 확장 한 클래스에서 이것을 수행했다 : 먼저 연속 렌더링을 false로 설정하고 렌더링 메소드를 호출한다. 내 gamesscreen을 내 모델의 수신기로 사용하고있다.렌더링 방법에서 아무 것도 그리지 않습니다. 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(); 


} ... 

내 모델에서는 끝 부분에서 내 gameScreen에 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()을 시작해야합니다.

관련 문제