2014-01-30 2 views
5

저는 여기에서 아주 명백한 것이 빠져 있다고 확신합니다. 그러나 초보자이므로 제발 부탁하지 마십시오. 내 문제는 화면보다 작은 뷰포트가있는 스테이지가 있다는 것입니다. 이제 Sprite.draw (SpriteBatch)를 사용하여 직접 화면에 Sprite를 그립니다. Sprite와 스테이지의 위치는 겹치지 않습니다. 무대는 잘 그려져 있지만 Sprite는 표시되지 않습니다. render-method에서 stage.draw() 부분을 주석 처리하면 Sprite가 표시됩니다. libGdx : 스테이지가있을 때 스프라이트가 그려지지 않습니다.

코드

: 이 내 렌더링 - 방법 :

: 나는 카메라와 무대를 초기화, 여기

@Override 
public void render(float delta) { 
    Gdx.gl.glClearColor(0.851f, 0.894f, 0.992f, 1f); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    camera.update(); 

    stage.act(delta); 

    batch.setProjectionMatrix(camera.combined); 
    batch.begin(); 
    stage.draw(); 
    logoSprite.draw(batch); 
    batch.end(); 
} 

(stageHeight도는 5분의 3 * 화면의 높이를 int입니다) 여기

camera = new OrthographicCamera(); 
    camera.setToOrtho(false, SwapItGame.WIDTH, SwapItGame.HEIGHT); 
    stage = new Stage(); 
    stage.setViewport(1080, stageHeight, true, 0, 0, 1080, stageHeight); //The button part of the menu takes up 3 fifth of the Height of hte screen 
    stage.setCamera(camera); 

내 스프라이트 초기화 (스프라이트의 위치 값이 다소 복잡, 그냥 무시 그것은 무대 위에 확실합니다.) :

 logoSprite = skin.getSprite("logo"); 
     logoSprite.setPosition((SwapItGame.WIDTH-logoSprite.getWidth())/2, (SwapItGame.HEIGHT-stageHeight-logoSprite.getHeight())/2 + stageHeight); 

같은 화면에 스프라이트와 무대를 둘 수 있습니까? 아니면 근본적으로 잘못된 것을하고 있습니까?

+0

다른 우리가 GLAS 볼로보고 우리가 오히려 길어 – BennX

+0

를 추측 할 수 있는지 볼 필요가 ... 코드를 게시하지만, 당신이 도움이된다면 나는 물론 그것을 할 수 있습니다. – tomet

+0

그러면 스프라이트를 추가하는 부분과 렌더링 부분을 보여줍니다. 우리가 당신이 잘못한 것을 보지 못하기 때문에 코드가 없으면 당신을 도울 수 없습니다. – BennX

답변

10

한번에 일괄 작업 위

stage.draw(); 

이동

stage.draw(); 
batch.setProjectionMatrix(camera.combined); 
batch.begin(); 
logoSprite.draw(batch); 
batch.end(); 
+0

그게 효과가 있어요. 감사. 왜 그것이 효과가 있는지 설명 할 수 있습니까? – tomet

+4

스테이지에 자체 배치가 있기 때문에 참으로 좋습니다! 그래서 당신은 당신이'stage.draw()'를 사용하여 당신의 배치를 끝내야한다. 그렇지 않으면 일괄 처리와 concurency 있습니다. – BennX

+0

잘 모르겠습니다 :) batch.begin() batch.end()는 화면에 물건을 그려주는 코드 블록입니다.이 프로세스에 영향을 줄 수있는 stage.draw()가 있습니다. – taytay

1

나는이 오래 알고 있지만, 경우에 당신은 할 수 없습니다 또는 (당신의 stage.draw를 이동하지 않으려는) 메서드를 호출하기 만하면 stage.draw() 바로 전에 batch.end()를 호출 한 다음 즉시 배치를 다시 시작합니다. 내 게임의 여러 가지 상황에 대해 별도의 게임 화면 상태를 사용하고 스테이지를 이동하려고했습니다. 주위에 그것은 내 수업 시간에 다른 것들을 깨뜨 렸기 때문에 마침내 그냥 시도해 보았습니다. 매력처럼 작동하여 도움이되었습니다. 위의 솔루션이 쉽게 작동하지 않는 경우 나에게 도움이됩니다.

batch.end(); 
stage.draw(); 
batch.begin(); 
관련 문제