0

我试图每秒以顺时针方向移动蓝色圆圈(bcircle)内的红色圆圈(bcircle.rcircle)。我尝试在计时器事件处理程序(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;

        }

    }

}
4

1 回答 1

1

几点:

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