「AS3による数学・物理学表現[入門編]」のプログラムをASファイルのみで記述2
Case01 「徐々に近づく」計算式を活用したインタラクティブな動き
Flash Math & Physics Design:ActionScript 3.0による数学・物理学表現[入門編]
- 作者: 古堅真彦
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2008/12/25
- メディア: 大型本
- 購入: 18人 クリック: 319回
- この商品を含むブログ (35件) を見る
/* ActionScript3.0による数学・物理学表現[入門編] pp.12-31 「徐々に近づく」計算式を活用したインタラクティブな動き 変更点 ・変数名 koko→here ・flaファイルのドキュメント設定は[SWF(・・・)]で記述 わざわざTimerEventにする必要はあるのかな・・・? ENTERFRAMEじゃダメ? Timerの方がミリ秒単位で指定できるからいい、ってことなのかな。 */ package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.geom.Point; import flash.utils.Timer; [SWF(backgroundColor = "#000000", width = "1024", height = "640", frameRate="30")] public class math01yukkuri_1 extends Sprite { private var rollovered:Boolean = false; private var timer:Timer; //インスタンス private var ball:Sprite; private var wline:Sprite; private var obj:Array; public function math01yukkuri_1() { makeObject(); this.ball.addEventListener(MouseEvent.ROLL_OVER, onROver); this.ball.addEventListener(MouseEvent.ROLL_OUT, onROut); timer = new Timer(33); timer.addEventListener(TimerEvent.TIMER, loop); timer.start(); } public function makeObject():void{ //インスタンスの生成 //白いボール ball = new Sprite(); ball.graphics.beginFill(0xffffff,1); ball.graphics.drawCircle(0,0,20); ball.graphics.endFill(); ball.x = 100; ball.y = stage.stageHeight/2; this.addChild(ball); //白い直線 wline = new Sprite(); wline.graphics.lineStyle(1,0xffffff,1); wline.graphics.moveTo(0,stage.stageHeight/2); wline.graphics.lineTo(stage.stageWidth,stage.stageHeight/2); this.addChild(wline); //10個のボール obj = new Array(); for(var i:int = 0; i<10 ; i++){ var sp:Sprite = new Sprite(); sp.graphics.beginFill(0xffffff * Math.random(), 1); sp.graphics.drawCircle(0,0,20); sp.graphics.endFill(); sp.x = this.stage.stageWidth/2; sp.y = this.stage.stageHeight/2; obj.push(sp); this.addChild(sp); } } public function onROver(e:MouseEvent):void{rollovered = true;} public function onROut(e:MouseEvent):void{ rollovered = false;} public function loop(e:TimerEvent):void{ for(var i:Number = 0 ; i<obj.length ; i++){ var here:Point = new Point(); if(rollovered){ if(i == 0){ here.x = this.ball.x + 80; here.y = this.ball.y; }else{ here.x = obj[i-1].x + 80; here.y = obj[i-1].y; } } else{ if(i == 0){ here.x = this.stage.stageWidth + 140; here.y = this.stage.stageHeight/2 - 140; }else{ here.x = obj[i-1].x; here.y = obj[i-1].y; } } //ここで徐々に動かしてる //8で割る部分の値が大きいほど遅く、小さいほど早く動く obj[i].x += (here.x - obj[i].x)/8; obj[i].y += (here.y - obj[i].y)/8; } } } }