Как изменить начало координат на сцене Flash с помощью Actionscript?
-
21-09-2019 - |
Вопрос
Кажется, я делал это раньше, но не могу найти код.
Flash, как и многие другие графические платформы, использует верхний левый угол в качестве начала координат (0,0), поскольку по соглашению именно так работает базовая модель памяти.
Но для моих расчетов было бы проще, если бы начало координат было в центре сцены, потому что вся игра вращается вокруг центра и использует много тригонометрии, углов и т. д.
Есть ли какой-нибудь встроенный метод, например Stage::setOrigin( uint, uint );
или что-то вроде того?
Решение
Создайте MovieClip или Sprite и добавьте его на сцену в качестве корневого объекта (вместо добавления в сцену) по адресу stage.width/2, stage.height/2.Затем, когда вы вместо этого добавите к нему свои игровые объекты.Добавьте игровые объекты в точку 0,0 внутри этого клипа, и они будут центрированы на сцене.
Другие советы
Создайте класс, который переопределяет методы установки и получения x и y для обработки вычислений.Любой мувиклип на сцене должен расширять этот новый класс.
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;
}
}
}
Бонус:вы можете изменить исходные значения в любое время, поэтому они не обязательно должны находиться в центре сцены.