マウスでクリックした場所に図形を描く
サンプルコード010304(クリックした場所に円を描く)をforkして、マウスイベントの練習をする。
MovieClipは、Spriteと違ってタイムラインがある、ということだが、何が違うのかよく分からない。MovieClipクラスを使わずに、Spriteクラスを使った場合でも動作した。つまり
class DrawCircle1 extends MovieClip
を
class DrawCirclw1 extends Sprite
としても変わらず動作する(ように見える)。同じ円を描くにしても、MovieClipの場合は時間軸があるということは、描画過程が見えるとか、そういうことかな。
クリックした場所に円と正方形を描くようにforkしたコードを変えてみた。今まで気づかなかったが、Graphicsクラスには三角形を描くメソッドがないのだな。
以下、変更したコード
// forked from 9re's クリックした場所に円を描く package { import flash.display.MovieClip; import flash.display.Sprite; import flash.events.MouseEvent; public class MouseClick extends Sprite { public function MouseClick() { stage.addEventListener(MouseEvent.CLICK, onClick); } private function onClick(e:MouseEvent):void { var nR:int = Math.ceil(Math.random() * 20) + 10; var color:int = Math.floor(Math.random() * 0xffffff); var ran:Number = Math.random() if (ran >= 0.5) { var oneFig:MovieClip = new DrawCircle1(e.stageX, e.stageY, nR, color); } else { var oneFig:MovieClip = new DrawRect1(e.stageX, e.stageY, nR, color); } addChild(oneFig); } } } import flash.display.MovieClip; class DrawCircle1 extends MovieClip { public function DrawCircle1(nX:int, nY:int, nR:int, color:int) { graphics.lineStyle(2, color); graphics.drawCircle(nX, nY, nR); } } class DrawRect1 extends MovieClip { public function DrawRect1(nX:int, nY:int, nR:int, color:int) { graphics.lineStyle(2, color); graphics.drawRect(nX, nY, nR, nR); } }
実行結果↓。マウスでクリックした場所に、円か四角がランダムに描画される。