Il modo più semplice è tradurre l'oggetto in modo che il punto 0,0 sia il centro, ruotarlo e quindi riportarlo in posizione. Non ho familiarità con libGDX, ma dovrebbe esserci un metodo per aggregare le tre trasformazioni, il che significa che si applica solo l'unica trasformazione aggregata al proprio oggetto. Tieni presente l'ordine con cui aggreghi le trasformazioni, fa la differenza.
Un modo molto più complicato che dà esattamente lo stesso risultato comporta il calcolo della quantità di scostamento creata dalla rotazione e la conversione dell'immagine alla sua origine. Non farlo in questo modo. Combinare tre semplici trasformazioni è la strada da seguire e uno dei migliori motivi per utilizzare le trasformazioni.
** Modifica Guardando il API l'oggetto attore ha un metodo translate(). Usare questo per spostare l'immagine in modo che il punto 0,0 sia al centro. In psuedocode;
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
In questo modo l'oggetto ruoterà sul suo punto centrale, sul posto. Sembra complicato, ma è abbastanza efficiente in pratica, a maggior ragione se sei in grado di lavorare direttamente con le matrici (trasformazioni) che guideranno questi metodi.
fonte
2012-12-17 20:49:07
Questa era la soluzione più semplice. Sto solo impostando l'origine all'interno dell'Actor nel metodo roll_onto_screen(). Grazie ragazzi! –
Cosa succede se devo ruotare continuamente un attore o un gruppo? – ManishSB
Basta ruotare l'azione rotateAction in repeatAction rispetto a, e impostare repeatAction come action degli attori. – Kedu