在ActionScript 3中旋转圆圈

时间:2012-10-14 23:29:20

标签: actionscript-3 flash actionscript

我试图以每秒顺时针方向移动蓝色圆圈(bcircle)中的红色圆圈(bcircle.rcircle)。我尝试在timer事件处理程序(redClockwise)中更改红色圆圈(bcircle.rcircle)的x和y坐标。我对此表示感谢。感谢。

我目前的代码如下......

package
{
    import flash.display.*;
    import flash.utils.Timer;
    import flash.events.TimerEvent;


    public class blueCircles extends MovieClip
    {
        public var bcircle:MovieClip = new MovieClip();
        public var rcircle:MovieClip = new MovieClip();
        private var timer:Timer = new Timer(1000,10);

        public function blueCircles()
        {
            createCircles();
            timer.start();
            timer.addEventListener(TimerEvent.TIMER, redClockwise);

        }
        private function createCircles():void
        {

            for (var i:Number=0; i<=9; i++)
            {
                var bcircle:MovieClip = new MovieClip();
                var bxpos:int = 20;
                var bypos:int = 20;

                bcircle.graphics.beginFill(0x0033CC);
                bcircle.graphics.drawCircle(bxpos,bypos,15);
                bcircle.graphics.endFill();
                bcircle.y = (30 + 10) * i;
                addChild(bcircle);

                //var rcircle:MovieClip = new MovieClip();
                bcircle.rcircle = new Shape();
                var rxpos:int = 15;
                var rypos:int = 25;

                bcircle.rcircle.graphics.beginFill(0xFF0000);
                bcircle.rcircle.graphics.drawCircle(rxpos,rypos,5);
                bcircle.rcircle.graphics.endFill();
                rcircle.y = (30 + 10) * i;
                bcircle.addChild(bcircle.rcircle);
            }
        }
        public function redClockwise(e:TimerEvent):void 
        {
            trace("Call");

            //bcircle.rcircle.rotation += 50;
            bcircle.rcircle.x += 50 * Math.PI/180;
            bcircle.rcircle.y += 50 * Math.PI/180; 
            //rcircle.rotation = 50;

        }

    }

}

1 个答案:

答案 0 :(得分:1)

几点:

  1. 您需要在类级别存储对bcircle的引用,以便您可以在redClockwise()方法中引用它。你完成了那种,但如果你密切注意,你会注意到你在createCircles()内实际做的是创建一个名为bcircle的新局部变量并使用它,而不是引用类级别的定义。
  2. 由于您有多个圈子,因此单个班级定义不起作用。您需要创建一个数组,并将每个圆圈存储在其中,以便您可以遍历该数组并更新所有圆圈。
  3. 您的计时器只会运行10次。这可能是有意的,但我想我会指出这一点。
  4. 沿圆形路径移动的逻辑无效。你在这里所做的一切都是在起始位置的东南方向移动。你需要使用sin和cos来移动我想要的方式。这个想法将定位红色圆圈,使它们位于蓝色的中心,然后使用一个值(可能是rotation)来偏移红色圆圈的位置,使其偏离蓝色圆圈的中心,基于它的半径和前面提到的值,从中间右侧获得角度。
  5. 你在一堂课中做得太多了。创建一个类“DualCircle”或类似的东西,并在那里管理红色圆圈的运动以及每个的外观。仅使用文档类来创建和定位每个元素。这将降低您尝试做的事情的复杂性。