Najprostszym sposobem jest przetłumaczyć obiekt, tak aby punkt 0,0 był środkiem, obrócić go, a następnie przełożyć z powrotem na pozycję. Nie jestem zaznajomiony z libGDX, ale powinna istnieć metoda agregowania trzech transformacji, co oznacza, że do obiektu jest stosowana tylko jedna zagregowana transformacja. Pamiętaj, że kolejność agregowania transformacji ma znaczenie.
O wiele bardziej skomplikowany sposób, który daje dokładnie taki sam wynik, polega na obliczeniu ilości przesunięcia utworzonego przez obrót i przeniesieniu obrazu z powrotem na jego pochodzenie. Nie rób tego w ten sposób. Łączenie trzech prostych transformacji jest drogą do osiągnięcia i jednym z najlepszych powodów zastosowania transformacji.
** Edytuj Patrząc na API obiekt Aktor ma metodę translate(). Użyj tego, aby przesunąć obraz, aby punkt 0,0 znajdował się pośrodku. W psuedokode;
x = this.getX();
y = this.getY();
cx = this.getWidth() * .5;
cy = this.getHeight() * .5;
this.translate(-(x+cx), -(y+cy)); // move so 0,0 is the centre of the Actor object
this.rotate(thisMuch); // rotate the Actor
this.translate((x+cx), (y+cy)); // move it back to its original location
Spowoduje to obrót obiektu w jego punkcie centralnym na miejscu. Wygląda na zawiłe, ale jest dość efektywne w praktyce, bardziej jeśli jesteś w stanie pracować bezpośrednio z macierzami (transformacjami), które będą napędzać te metody.
To było najprostsze rozwiązanie. Właśnie ustalam pochodzenie wewnątrz aktora w metodzie roll_onto_screen(). Dzięki chłopaki! –
Co się stanie, jeśli będę musiał ciągle obracać aktora lub grupę? – ManishSB
Po prostu obróć rotateAction do repeatAction niż i ustaw repeatAction jako Action Action. – Kedu