※現在、「wonderfl build flash online」求人コンテンツ制作に関してのアンケートを実施中です!みなさまのお力添えを頂いて、続々とアンケート結果が集まっていますが、まだまだ募集しております。ご協力のほど、どうぞよろしくお願いいたします!

wonderfl運営事務局
→アンケートページ(※ログインしてからお答えいただけるようになっています。)

 notice: Flash editor updated! Join the development! Thanks to MiniBuilder


FORKED
  1. // forked from tmn's flash on 2009-7-16
  2. //参考文献「ActionScript3.0 アニメーション」Keith Peters 永井 勝則
  3. package{
  4.     import flash.display.Sprite;
  5.     import flash.display.StageAlign;
  6.     import flash.display.StageScaleMode;
  7.     import flash.events.Event;
  8.     import flash.events.MouseEvent;
  9.     
  10.     import funnel.*;
  11.     
  12.     [SWF(backgroundColor="0xFFFFFF", frameRate="30")]
  13.     public class ballballball extends Sprite{
  14.         private var ball:Ball;
  15.         private var ball1:Ball;
  16.         private var vx:Number;
  17.         private var vy:Number;
  18.         private var spring:Number = 0.05;
  19.         private var gravity:Number = .5;
  20.         private var oldX:Number;
  21.         private var oldY:Number;
  22.         
  23.         private var gio:Gainer;
  24.         private var flasher0:Osc;
  25.         private var flasher1:Osc;
  26.         
  27.         private var balls:Array;
  28.         private var numBalls:Number = 10;
  29.         
  30.         public function ballballball(){
  31.             init();
  32.         }
  33.         
  34.         private function init():void{
  35.             stage.scaleMode = StageScaleMode.NO_SCALE;
  36.             stage.align = StageAlign.TOP_LEFT;
  37.             
  38.             balls = new Array();
  39.             for(var i:uint = 0; i < numBalls; i++){
  40.                 var ball:Ball = new Ball(Math.random() * 30 + 20, Math.random() * 0xFFFFFF);
  41.                 ball.x = Math.random() * stage.stageWidth;
  42.                 ball.y = Math.random() * stage.stageHeight;
  43.                 ball.vx = Math.random() * 6 - 3;
  44.                 ball.vy = Math.random() * 6 - 3;
  45.                 addChild(ball);
  46.                 ball.addEventListener(MouseEvent.MOUSE_DOWN, onMousedown);
  47.                 balls.push(ball);
  48.             }
  49.             addEventListener(Event.ENTER_FRAME, onEnterframe);
  50.             gio = new Gainer();
  51.             
  52.             flasher0 = new Osc(Osc.IMPULSE, 11001);
  53.             gio.digitalOutput(0).filters = [flasher0];
  54.             
  55.             flasher1 = new Osc(Osc.IMPULSE,11001);
  56.             gio.digitalOutput(1).filters = [flasher1];
  57.             
  58.         }
  59.         
  60.         private function onEnterframe(event:Event):void{
  61.             var left:Number = 0;
  62.             var right:Number = stage.stageWidth;
  63.             var top:Number = 0;
  64.             var bottom:Number = stage.stageHeight;
  65.             
  66.             for(var i:uint = 0; i < numBalls - 1; i++){
  67.                 var ball0:Ball = balls[ i ];
  68.                 
  69.                 for(var j:uint = 0; j < numBalls; j++){
  70.                     var ball1:Ball = balls[ j ];
  71.                     var dx:Number = ball1.x - ball0.x;
  72.                     var dy:Number = ball1.y - ball0.y;
  73.                     var dist:Number = Math.sqrt(dx * dx + dy * dy);
  74.                     var minDist:Number = ball0.radius + ball1.radius;
  75.                     
  76.                     if(dist < minDist){
  77.                         var angle:Number = Math.atan2(dy, dx);
  78.                         var tx:Number = ball0.x + Math.cos(angle) * minDist;
  79.                         var ty:Number = ball0.y + Math.sin(angle) * minDist;
  80.                         var ax:Number = (tx - ball1.x) * spring;
  81.                         var ay:Number = (ty - ball1.y) * spring;
  82.                         ball0.vx -= ax;
  83.                         ball0.vy -= ay;
  84.                         ball1.vx += ax;
  85.                         ball1.vy += ay;
  86.                     }
  87.                     
  88.                 }
  89.                 
  90.             }
  91.             
  92.             for(i = 0; i < numBalls; i++){
  93.                 var ball:Ball = balls[ i ];
  94.                 move(ball);
  95.             }
  96.         }
  97.         
  98.         private function move(ball:Ball):void{
  99.             ball.y += ball.vy;
  100.             
  101.             if(ball.x + ball.radius > stage.stageWidth){
  102.                 ball.x = stage.stageWidth - ball.radius;
  103.                 ball.vx *= -1;
  104.             } else if(ball.x - ball.radius < 0){
  105.                 ball.x = ball.radius;
  106.                 ball.vx *= -1;
  107.             }
  108.             
  109.             if(ball.y + ball.radius > stage.stageHeight){
  110.                 ball.y = stage.stageHeight - ball.radius;
  111.                 ball.vy *= -1;
  112.                 flasher0.reset();
  113.                 flasher0.start();
  114.                 gio.digitalOutput(0).value = 1;
  115.             } else if (ball.y - ball.radius < 0){
  116.                 ball.y = ball.radius;
  117.                 ball.vy *= -1;
  118.                 flasher1.reset();
  119.                 flasher1.start();
  120.                 gio.digitalOutput(1).value = 1;
  121.             }
  122.         }
  123.         
  124.         private function onMousedown(event:MouseEvent):void{
  125.             for(var i:uint = 0; i < balls.length; i++){
  126.                 if(balls[i] == Ball(event.target)){
  127.                     oldX = Ball(event.target).x;
  128.                     oldY = Ball(event.target).y;
  129.                     stage.addEventListener(MouseEvent.MOUSE_UP, onMouseup);
  130.                     Ball(event.target).startDrag();
  131.                     removeEventListener(Event.ENTER_FRAME, onEnterframe);
  132.                     addEventListener(Event.ENTER_FRAME, trackVelocity);
  133.                 }
  134.             }
  135.             for(var n:Number = 0; n < 4; n++){
  136.                 gio.digitalOutput(n).value = 0;
  137.             }
  138.         }
  139.         
  140.         //ボールを離した時、enterFrameハンドラを入れ替え、trackVelocityを削除し、onEnterFrameを追加
  141.         private function onMouseup(event:MouseEvent):void{
  142.             for(var i:uint = 0; i < balls.length; i++){
  143.                 if(balls[i] == Ball(event.target)){
  144.                     stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseup);
  145.                     Ball(event.target).stopDrag();
  146.                     removeEventListener(Event.ENTER_FRAME, trackVelocity);
  147.                     addEventListener(Event.ENTER_FRAME, onEnterframe);
  148.                 }
  149.             }
  150.         }
  151.         
  152.         //ボールの現在のx, y位置からそれぞれoldX,oldYを引き=現在の速度が分かる → その値をvx, vyに保持 oldX, oldYをボールの現在位置に再設定
  153.         private function trackVelocity(event:Event):void{
  154.             for(var i:uint = 0; i < balls.length; i++){
  155.                 if(balls[i] == event.target){
  156.                     vx = Ball(event.target).x - oldX;
  157.                     vy = Ball(event.target).y - oldY;
  158.                     oldX = Ball(event.target).x;
  159.                     oldY = Ball(event.target).y;
  160.                 }
  161.             }
  162.         }
  163.     }
  164. }
  165. import flash.display.Sprite;
  166.     
  167. class Ball extends Sprite{
  168.     public var radius:Number;
  169.     public var color:uint;
  170.     public var vx:Number = 0;
  171.     public var vy:Number = 0;
  172.         
  173.     public function Ball(radius:Number = 10, color:uint = 0xFFFFFF){
  174.         this.radius = radius;
  175.         this.color =  color;
  176.         init();
  177.     }
  178.         
  179.     public function init():void{
  180.             graphics.beginFill(color);
  181.             graphics.drawCircle(00, radius);
  182.             graphics.endFill();
  183.     }
  184. }
noswf
Get Adobe Flash Player