0

我想我以前做过,但找不到代码。

Flash 与许多其他图形框架一样使用左上角作为坐标原点 (0,0),因为它是底层内存模型的惯例。

但是如果原点在舞台的中心,我的计算会非常简单,因为所有的游戏都围绕中心旋转,并且使用了大量的三角函数、角度等。

Stage::setOrigin( uint, uint );有没有类似或类似 的内置方法?

4

2 回答 2

3

创建一个覆盖 x 和 y setter 和 getter 的类来处理计算。舞台上的任何 MovieClips 都应该扩展这个新类。

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;
        }
    }
}

奖励:您可以随时更改原点值,因此它不必位于舞台的中心。

于 2010-04-29T19:35:49.833 回答
2

创建一个 MovieClip 或 Sprite,并将其作为根对象添加到舞台(而不是添加到舞台),位于 stage.width/2、stage.height/2。然后,当您将游戏对象添加到其中时。在该剪辑内的 0,0 处添加您的游戏对象,它们将位于舞台中央。

于 2010-01-16T22:51:36.363 回答