ランダム移動する円

円を生成するクラスを作ってみた(写経だけど).

ぱっと書いてみて,呼び出し側のステージ上でなんで円が動くのか?
一瞬思考が止まった.
どうやら,Circleクラス内の描画用(x,y)の領域サイズを変える事で
内部に描画した円を動かしているらしい.
円の座標自体を動かすもんだと先入観を持って望んだための躓きポイント.

sp.graphics.drawCircle(0,0,rand(20,60));

で座標が(0,0)って指定に引っかかって良かったと思う.

自戒の意味を込めて引っかかったコードを晒してみる.*1

public class Circle extends Sprite {
  public function Circle() {
    x = Math.random()*640;
    y = Math.random()*480;
    
    _speedX = rand(-8,8);
    _speedY = rand(-8,8);
    
    /*
     * x, yの座標位置に対して(0,0)の位置に円を描く
     */
    var sp:Sprite = new Sprite();
    sp.graphics.beginFill(Math.random()*0xFFFFFF);
    sp.graphics.drawCircle(0,0,rand(20,60));
    sp.graphics.endFill();
    addChild(sp);
    addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
  }

  private var _speedX:Number;
  private var _speedY:Number;

 // コールバック関数.座標域を変更する.
  private function onEnterFrameHandler(event:Event):void {
    limit();
    x += _speedX;
    y += _speedY;
  }

  // ステージをはみ出した場合は反転
  private function limit():void {
    if(x < 0 || x > 640 ) {
      _speedX *= -1;
    }
    if(y < 0 || y > 480 ) {
      _speedY *= -1;
    }
  }

  // 指定範囲に収まる乱数を返す
  private function rand(min:Number, max:Number):Number{
    var randValue:Number = Math.random()*(max-min)+min;
    return randValue;
  }
}

*1:はてな記法ActionScriptがあってもいいと思うんだ.