Forked from: indiana's forked from: みずたまふわふわ diff:1 forked from: forked from: みずたまふわふわ amp_green forked:0favorite:0lines:70license : MIT License modified : 2011-12-06 13:54:47 Embed Tweet // forked from indiana's forked from: みずたまふわふわ // forked from shohei909's みずたまふわふわ // forked from shohei909's forked from: クラスのマウスイベント(?) // forked from wass's クラスのマウスイベント(?) /* たのしそうだったからforkした。 */ package { import flash.display.*; import flash.events.Event; import flash.text.*; import frocessing.color.ColorHSV; [SWF(frameRate="30", width="465", height="465")] public class MyFirstAnimation extends Sprite { private var _cles:Vector.<Circle> = new Vector.<Circle>(); public function MyFirstAnimation() { graphics.beginFill(0); graphics.drawRect(0, 0, 465, 465); // クラスCircleのインスタンスを作る for(var i:uint = 0; i < 50; i++ ){ var color:ColorHSV = new ColorHSV(i*7.2,0.7,0.1); var cle:Circle = new Circle(-i+60,color.value,0.5); cle.x = cle.y = 465 / 2; addChild(cle).blendMode = "add"; _cles.push(cle); } // 1フレーム毎に実行する処理にenterFrameHandlerを追加する addEventListener(Event.ENTER_FRAME, enterFrameHandler); } // フレーム毎に行われる処理 [25行目で登録される] private function enterFrameHandler(e:Event):void { // 1フレーム分動かす for each(var cle:Circle in _cles){ cle.move(); } } } } import flash.display.Sprite; import flash.events.MouseEvent; class Circle extends Sprite { public var vx:Number = 0; public var vy:Number = 0; public var radius:Number; public var fillColor:uint; public var sp:Number; public var drag:Boolean = false; //現在ドラッグ中かどうか? // コンストラクタ public function Circle(_radius:Number, _fillColor:uint = 0xff0000, _sp:Number = 5) { // 塗り_fillColor, 半径_radiusの円 graphics.beginFill(_fillColor); graphics.drawCircle(0, 0, _radius); graphics.endFill(); addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); // 押したボタンが離された時にonMouseUp()を呼び出す addEventListener(MouseEvent.MOUSE_UP, onMouseUp); // 半径の大きさをパブリックな変数に保存しておく //パブリック=保持する変数? ほかから参照できる変数? //パブリックはほかから参照できる変数 radius = _radius sp=_sp } // 1フレーム分の動き public function move():void { if( drag == false ){ //ドラッグしてないときだけ動かす。 var rd : Number; x += vx; y += vy; rd = Math.atan2(y-stage.mouseY,stage.mouseX-x); vx +=-Math.cos(rd)*sp; vy += Math.sin(rd)*sp; vx *= 0.99; vy *= 0.99; if (x+radius < 0 ) x=465+radius ; if (x-radius > 465) x=-radius ; if (y+radius < 0 ) y=465+radius ; if (y-radius > 465) y=-radius ; } } //こことしたの二行です private function onMouseDown(e:MouseEvent):void{ startDrag(); drag = true; //drag中に自分で動かないようにする } private function onMouseUp(e:MouseEvent):void{ stopDrag(); drag = false; //dragが終わったので自分で動くようにする。 } } Code Fullscreen Preview Fullscreen