2013-10-13 3 views
9

그래서 OUYA 및 PC의 첫 번째 Android 제목으로 LibGDX를 사용하기 시작했습니다.하지만 LibGDX가있는 일부 문제가 있습니다. (모든 질문은 출처를 보면 대답 할 수 있지만 디자인 선택을 이해하려고 노력하고 있습니다.)LibGDX 좌표 시스템 및 그리기 스프라이트 이해

시작 좌표계. 나는이 프로젝트 설정 항아리를 사용하여 프로젝트를 생성하고 내 독서에서 이렇게

camera = new OrthographicCamera(1, h/w); 

같은 OrthographicCamera를 생성, 나는 LibGdx이 그래 0,0 및 위해 왼쪽 하단 모서리를 사용하는 것으로 알고 있습니다. 벌금. 원하는 경우 y down으로 변경하는 것이 매우 쉽지만 다음에 작성된 코드를 이해하지 못하고 있습니다.

작성된 기본 스프라이트의 경우 위치가 이와 같이 설정됩니다. 나는이 기본적인 프로그램을 실행하면

logoSprite.setOrigin(logoSprite.getWidth()/2, logoSprite.getHeight()/2); 
logoSprite.setPosition(-logoSprite.getWidth()/2, -logoSprite.getHeight()/2); 

, 나는 내가 추가 한 로고 이미지가 화면 중앙에 참조하십시오. 내가 이해하려고하는 이유는 값이 설정된 위치에서 음수 값을 갖는 이유와 왜 뷰 포트의 그래픽 w 및 h 대신에 스프라이트 너비와 높이를 사용하는 것입니까? 화면 너비와 높이로 변경하면 이미지가 화면 오른쪽 하단의 이상한 위치에 그려집니다.

내 다음 질문은 sprite.setSize와 sprite.setScale입니다. 둘의 차이점은 무엇입니까? setScale이 getWidth와 getHeight를 변경하지 않고 남겨둔다는 점을 제외하면 똑같은 것을하는 것으로 보입니다.

내 게임에서 패닝, 확대/축소 및 회전을 위해 2D 카메라를 많이 사용하기 때문에 코드 작성을 시작하기 전에 libgdx 프레임 워크에 대해 최대한 이해하려고 노력하고 있습니다.

참고로 게임 개발 및 수학 배경이 있으며 XNA를 사용하여 여러 2D 및 3D 게임을 만들었습니다. 나는 LibGdx가 OpenGL을 추상화하지 않았기 때문에 좌절감을 느낀다. 그리고 지금까지 내가 실험 해본 2D 드로잉은 그것이 있어야하는 것보다 더 혼란스러워 보인다!

또한 애니메이션에 척추를 사용할 계획입니다. y-up 또는 y-down을 사용하도록 내 선택을 변경해야합니까? "이미지"처음 선언 /로드 한 텍스처 인 경우

답변

7

에 대한 libgdx의 문서화를 통해 이동보기를 변경 당신의 뷰포트의 폭,

및 scrh가 뷰포트의 높이,

스프라이트가 화면의 중앙에있을 것입니다 이런 식으로

,

sprite.setsize는 .. 품질은 모든 장치 (hdpi.mdpi, xhdpi, LDPI)에서 잘 유지되도록 우리가 큰/작은 질감을 확장 할 때 사용되는 스프라이트의 크기와 sprite.setscale을 설정

필요가 없습니다에 사용됩니다 spine을 사용한다면 걱정하지 마시고 libgdx에서 원활하게 작동합니다 ..

+0

답장을 보내 주셔서 감사합니다. 원점을 텍스처의 중심으로 설정하여 그릴 때 이미지의 중심에 위치 할 것으로 예상했습니다. 이것은 XNA에서 작동하는 방식이지만 LibGDX는 항상 원점에 관계없이 왼쪽 하단 모서리에서 그려집니다. 다른 하나는 카메라가 0,0에 있었기 때문에 화면 중앙이 0,0입니다. 예제 코드는 camera.update 호출을 추가하지 않기 때문에 확대/축소 위치의 변경 사항이 적용되지 않았습니다. Spine에 관한 내 질문은 카메라를 y-down으로 전환하는 것과 직접 관련이있었습니다. 지역을 뒤집을 때처럼 척추 애니메이션을 뒤집을 수있는 방법이 있습니까? – jjhavokk

+0

예 애니메이션을 뒤집을 수 있습니다. libgdx에서 애니메이션을 뒤집어서 스프라이트에 넣은 다음이 image.flip (true, false)와 같은 스프라이트를 뒤집기를 원한다면; –

1

당신은 화면의 중앙으로 스프라이트의 중심을 할 수

logoSprite.setPosition(Gdx.graphics.getWidth()/2 - image.getWidth()/2, 
Gdx.graphics.getHeight()/2 - image.getHeight()/2); 

경우 그냥이 코드를 사용할 수 있습니다.

이상한 위치에 오는 이유는 카메라를 사용하고 있기 때문입니다.

logosprite.setposition(scrw/2-logosprite.getwidth()/2,scrh/2-logosprite.getheight/2); 

여기 scrw 당신의 만드는 방법이 작업을 수행하면 화면의 중앙에 스프라이트를 그릴려면 많은 단지 카메라 here

0

필자는 카메라의 위치를 ​​설정하고 update() 메소드를 호출해야했습니다. 그런 다음 카메라의 중심 (0,0)을 잊지 마십시오. 모든 것이 그렇게 배치되고 있습니다. 내 카메라 코드 :

private void cameralariUpdateEt() { 
     cameraGame.position.set(cameraGame.viewportWidth * 0.5f, 
       cameraGame.viewportHeight * 0.5f, 0); 
     cameraGame.update(); 

     cameraScore.position.set(cameraScore.viewportWidth * 0.5f, 
       cameraScore.viewportHeight * 0.5f, 0); 
     cameraScore.update(); 
    } 

내부에서이 메소드를 호출하십시오. render();