0

赤い円 (bcircle.rcircle) を青い円 (bcircle) 内で毎秒時計回りに動かそうとしています。タイマー イベント ハンドラ (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 に答える