0

AS3 で、ステージの左側の列に直径 30 ピクセルの円を 10 個追加する簡単なメソッドを作成しようとしています。最初の円は左上隅に表示され、最後の円は右下隅に表示されます。 . ここで何か助けていただければ幸いです。ありがとう。

私の現在のコードは次のとおりです。 - 現在、配置なしで 10 個の円を返すだけです。

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

    public class Circles extends MovieClip
    {
        private var timer:Timer = new Timer(100, 10);

        public function Circles()
        {

            timer.addEventListener(TimerEvent.TIMER, createCircles);
            timer.start();
        }
        private function createCircles(e:TimerEvent):void
        {
            var bcircle:MovieClip = new MovieClip();
            var xpos:int = 0;
            var ypos:int = 0;

                bcircle.graphics.beginFill(0x0033CC);
                bcircle.graphics.drawCircle(xpos,ypos,15);
                bcircle.graphics.endFill();
                bcircle.x = Math.random() * stage.stageWidth;
                bcircle.y = Math.random() * stage.stageHeight;
                addChild(bcircle);
        }

    }

}
4

2 に答える 2

0
bcircle.x = Math.random() * stage.stageWidth;
bcircle.y = Math.random() * stage.stageHeight;

これらの線は、ステージに追加されたときに各円が配置される場所を制御するため、注意が必要な線です。

円の直径 = 30px、ステージの高さ (例) = 400px。30 は 400 の 13.33 倍 (400/30) になるため、各円は最後の円より 13.3 ピクセル下に配置する必要があります。

すでにステージ上にある円の数をカウントする変数を保存し、それを使用して 13.3 を掛けて適切なy値を見つけることができます。

var i:int = 0;
private function createCircles(e:TimerEvent):void
{
    var bcircle:MovieClip = new MovieClip();
    var xpos:int = 0;
    var ypos:int = 0;

    bcircle.graphics.beginFill(0x0033CC);
    bcircle.graphics.drawCircle(xpos,ypos,15);
    bcircle.graphics.endFill();
    bcircle.x = 0;
    bcircle.y = (30 + 13.3) * i; // First circle placed at 0, Second placed at 43.3...
    i++; // Increment i each time function is called
    addChild(bcircle);
}

同様の方法を適用して、xi が 10 に達したら (10 個の円が配置された)、各円の位置をインクリメントし、トリガーを使用してこれを検出できます。if(i == 10)

于 2012-10-12T13:25:50.477 に答える
0

これは役立つかもしれません...

package {
  import flash.display.Graphics;
  import flash.display.Sprite;
  import flash.events.TimerEvent;
  import flash.utils.Timer;

  public class Circles extends Sprite {

    private const _circles:Array = []; // reusable container
    private var _timer:Timer;

    public function Circles() {
      _timer = new Timer(1000, 10);
      _timer.addEventListener(TimerEvent.TIMER, timer_timerHandler);
      _timer.addEventListener(TimerEvent.TIMER_COMPLETE, timer_timerCompleteHandler);

      _timer.start();
    }

    private function createCircle():Sprite {
      const sprite:Sprite = new Sprite();

      drawCircleInGraphics(sprite.graphics);

      addChild(sprite);

      return sprite;
    }

    private function drawCircleInGraphics(graphics:Graphics, color:uint = 0x0033CC, radius:uint = 15):void {
      graphics.beginFill(color);
      graphics.drawCircle(0, 0, radius);
      graphics.endFill();
    }

    private function createNewCircleAndPositionIt():void {
      _circles[_circles.length] = createCircle();

      if (_circles.length > 1) {
        const last:Sprite = _circles[_circles.length - 1],
            predecessor:Sprite = _circles[_circles.length - 2];

        last.x = predecessor.x + 30;
        last.y = predecessor.y + 30;
      }
    }

    private function timer_timerHandler(event:TimerEvent):void {
      createNewCircleAndPositionIt();
    }

    private function timer_timerCompleteHandler(event:TimerEvent):void {
      _timer.removeEventListener(TimerEvent.TIMER, timer_timerHandler);
      _timer.removeEventListener(TimerEvent.TIMER_COMPLETE, timer_timerCompleteHandler);
      _timer = null;
    }
  }
}
于 2012-10-12T13:46:36.280 に答える