2012-12-17 2 views
18

I 제대로 이해가 LibGDX는 addActions 방법을 이용하여 화상을 회전 :중간 점으로 libgdx에서 이미지 액터를 회전하는 방법은 무엇입니까?

this.addAction(parallel(rotateBy(360, 0.5f), moveTo(320, 100, 0.5f))); 

건이며, 그것이 점 = (0,0)의 이미지 의해 회전되고있다. 에 대한 방법은 중심점 개체의하여 이미지를 회전

이 있습니까 :

여기 내 질문? 중간에 끼워 넣은 다음 자동차 바퀴처럼 돌리는 것과 같은 것입니까? 모두 rotateByrotateTo 방법은 이미지 자체의 (0,0) 포인트를 설정.

답변

29

배우의 "출신"을 올바르게 설정해야합니다. 액터 API에서 원점이 위치에 상대적이며 스케일 및 회전에 사용된다는 것을 읽을 수 있습니다.

중간 점을 계산하고 원점을 중간 점으로 설정하십시오.

Actor a; 
.... 
a.setOrigin(a.getWidth()/2, a.getHeight()/2); 
+0

그것은 가장 쉬운 해결책이었습니다. roll_onto_screen() 메서드에서 Actor 내부의 원점을 설정하기 만하면됩니다. 고마워요! –

+0

배우 나 그룹을 계속 회전해야한다면 어떻게해야합니까? – ManishSB

+0

rotateAction을 repeatAction보다 더 많이 감싸고 actor 액션으로 repeatAction을 설정하면됩니다. – Kedu

3

가장 쉬운 방법은 0,0 포인트가 중심이되도록 오브젝트를 변환하고 회전시킨 다음 다시 위치로 변환하는 것입니다. libGDX에 익숙하지 않지만, 3 개의 변환을 집계하는 메소드가 있어야합니다. 즉, 하나의 집계 된 변환 만 오브젝트에 적용해야합니다. 변환을 집계하여 차이를 만드는 순서를 명심하십시오.

정확하게 똑같은 결과를주는 훨씬 더 복잡한 방법은 이미지를 회전시키고 이미지를 원점으로 되 돌리는 작업으로 생성 된 오프셋의 양을 계산하는 것입니다. 이런 식으로하지 마십시오. 세 가지 간단한 변환을 결합하는 것이 변환의 가장 좋은 이유 중 하나입니다.

** API을 보면 액터 객체에는 translate() 메소드가 있습니다. 0,0 포인트가 중앙에 오도록 이미지를 이동하려면이 옵션을 사용하십시오. psuedocode에서;

이렇게하면 개체가 그 중심점에서 회전하게됩니다. 복잡한 방식이지만 실제로는 매우 효율적입니다. 이러한 메서드를 구동 할 행렬 (변환)을 사용하여 직접 작업 할 수 있다면 더욱 그렇습니다.

+0

지도에서 x = 320 y = 100으로 이미지를 이동하려면 moveTo (320, 100, 0.5f) 메서드를 사용합니다. 나는 내가 ** 어떻게 ** 물체를 번역 할 것인가를 나는 생각하지 않는다. –

+0

마음에 든다. 이것은 libGDX에 대한 나의 첫 번째 모습이다 :-) 나는 내 대답을 상기에서 수정하고있다. –

3

다음은 어떻게 libgdx에서 액터를 회전시킬 수있는 간단한 방법입니다.당신의 필요에 따라,

img.setorigin(width/2,hieght/2); 

지금 당신은 시계 방향과 반 시계 방향으로 회전 할 수 있습니다 :

첫째, 당신은 원점을 설정해야

img.rotate(2f); 

또는

img.rotate(-2f); 
2

가장 쉬운 원산지 설정을 위해 찾은 가장 짧은 방법은 다음과 같습니다.

Actor a; 

... 

a.setOrigin(Align.center); 
관련 문제