0
이 문제는 Windows에서만 발생합니다. 리눅스에서 잘 돌아 간다.왜 LWJGL이 Windows에서 이전과 현재 gameState간에 깜박입니까?
나는 스택 기반의 상태 관리 시스템을 가지고있다. 한 상태에서 다른 상태로 전환하면 디스플레이가 이전 상태와 현재 상태 사이에서 깜박입니다. 버퍼 중 하나와 거의 비슷하게 이전 상태를 표시하고 현재 상태와 번갈아 표시합니다. 여기
은 처음 상태 초기화는, 그릴, 그리고 종료 코드 :init
이 상태가 처음로드draw
는
호출 될 때 호출 새 상태가 스택 맨 위에 놓이기 전에.pause
가 호출 될 때마다 루프private void init() { glEnable(GL_TEXTURE_2D); glShadeModel(GL_SMOOTH); glDisable(GL_DEPTH_TEST); glDisable(GL_LIGHTING); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearDepth(1); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glViewport(0,0,Game.getGameConfig().getDisplayWidth(),Game.getGameConfig().getDisplayHeight ()); glMatrixMode(GL_MODELVIEW); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0,Game.getGameConfig().getDisplayWidth(), Game.getGameConfig().getDisplayHeight(), 0, 1, -1); glMatrixMode(GL_MODELVIEW); } public void draw() { GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT); mainMenu.draw(); Display.update(); } public void pause() { glDisable(GL_BLEND); glDisable(GL_TEXTURE_2D); }
이 새로운 상태를로드하는 방법입니다 : 여기
private void init()
{
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glDisable(GL_DEPTH_TEST);
glDisable(GL_LIGHTING);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth(1);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glViewport(0,0,Game.getGameConfig().getDisplayWidth(),Game.getGameConfig().getDisplayHeight());
glMatrixMode(GL_MODELVIEW);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0,Game.getGameConfig().getDisplayWidth(), Game.getGameConfig().getDisplayHeight(), 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
}
public void draw() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
titleFont.drawString((Game.getGameConfig().getDisplayWidth()/2)-(titleFont.getWidth(titleText)/2),
(Game.getGameConfig().getDisplayHeight()/2) - (titleFont.getHeight()/2) ,
titleText,Color.orange);
if(showStartText)
{
pressStartFont.drawString((Game.getGameConfig().getDisplayWidth()/2)-(pressStartFont.getWidth(pressStartText)/2),
(Game.getGameConfig().getDisplayHeight()/2) - (titleFont.getHeight() - 100),
pressStartText, Color.orange);
}
}
public void pause() {
glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);
}
그리고
다음 gameState 코드입니다.제 1 상태 호출 :
여기 super.sm.push(new MainMenu(super.sm));
가에서 StateManager이다 (sm
) 코드 :
public void draw()
{
if(!states.empty())
{
states.peek().draw();
}
Display.update();
}
: 메인 게임 루프는에서 StateManager이 메소드를 호출
public void push(GameState state)
{
if(!states.empty())
{
states.peek().pause();
}
states.push(state);
state.enter();
}
fli 윈도우즈에서 상태가 달라 지나요?
상태를 바꿀 때 버퍼를 제거해야 할 수도 있습니다. 그렇게 할 수있는 방법이 있습니까? – ZeroDivide
처음으로 상태를 전환 한 후 두 프레임 모두 그려지는 기능이 있습니까? –
나는 그렇게 생각하지 않는다. 상태 관리자는 상당히 견고하며, 리눅스에서 왜 제대로 작동하는지 설명하지는 않습니다. – ZeroDivide