Как изменить начало координат в сцене Flash с Actionscript? - PullRequest
0 голосов
/ 17 января 2010

Я думаю, что делал это раньше, но не могу найти код.

Вспышка, так как многие другие графические каркасы используют верхний левый угол в качестве начала координат (0,0), потому что такова базовая модель памяти.

Но для моих расчетов было бы действительно проще, если бы источник находился в центре сцены, потому что вся игра вращается вокруг центра и использует много тригонометрии, углов и т. Д.

Есть ли какой-нибудь встроенный метод, например Stage::setOrigin( uint, uint ); или что-то подобное?

Ответы [ 2 ]

3 голосов
/ 29 апреля 2010

Создайте класс, который переопределяет установщики и получатели 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;
        }
    }
}

Бонус: вы можете изменить исходные значения в любое время, чтобы они не были в центре сцены.

2 голосов
/ 17 января 2010

Создайте MovieClip или Sprite и добавьте его на сцену в качестве корневого объекта (вместо добавления на сцену) в stage.width / 2, stage.height / 2. Затем, когда вы добавляете свои игровые объекты к этому вместо этого. Добавьте свои игровые объекты на 0,0 внутри этого клипа, и они будут центрированы на сцене.

...