Come modificare l'origine di coordinate in fase di Flash con Actionscript?
-
21-09-2019 - |
Domanda
Credo di aver fatto questo prima, ma non riesco a trovare il codice.
Flash come molti altri framework grafiche usano l'angolo in alto a sinistra come l'origine (0,0) coordinare, perché è come il modello di memoria di base è per convenzione.
Ma sarebbe davvero semplice per i miei calcoli, se l'origine è stata al centro del palco, perché tutto il gioco ruota intorno al centro e usa un sacco di trigonometria, angoli, ecc
C'è qualche metodo incorporato come Stage::setOrigin( uint, uint );
o qualcosa del genere?
Soluzione
Crea una MovieClip o Sprite e aggiungere che alla fase come oggetto principale (invece di aggiungere allo stage) presso Stage.width / 2, Stage.height / 2. Poi, quando si aggiungono gli oggetti di gioco per che, invece. Aggiungere gli oggetti di gioco al 0,0 all'interno del clip e saranno centrate sul palco.
Altri suggerimenti
Creare una classe che sostituisce il x e y setter e getter per gestire i calcoli. Eventuali MovieClips sul palco dovrebbe estende questa nuova classe.
package {
// imports
public class MyDisplayObject extends DisplayObject
{
private var originX:Number = 0;
private var originY:Number = 0;
public function MyDisplayObject() {
// constructor stuff
originX = stage.stageWidth / 2;
originY = stage.stageHeight / 2;
}
override public function set x($x:Number):Void {
super.x = originX + $x; // use super to avoid these setters and getters
}
override public function set y($y:Number):Void {
super.y = originY + $y;
}
override public function get x():Number {
return super.x - originX;
}
override public function get y():Number {
return super.y - originY;
}
}
}
Bonus:. È possibile modificare i valori di origine ogni volta che si desidera, in modo che non ha bisogno di essere al centro della scena