forked from: forked from: forked from: forked from: flash on 2011-9-6

by bradsedito
♥0 | Line 125 | Modified 2011-09-07 08:04:16 | MIT License
play

ActionScript3 source code

/**
 * Copyright bradsedito ( http://wonderfl.net/user/bradsedito )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/or4j
 */

// forked from shuetsu's forked from: forked from: forked from: flash on 2011-9-6
// forked from shuetsu's forked from: forked from: flash on 2011-9-6
// forked from shuetsu's forked from: flash on 2011-9-6
// forked from shuetsu's flash on 2011-9-6
package {
    import flash.display.AVM1Movie;
    import flash.events.Event;
    import flash.display.Sprite;
    [SWF(width=465, height=465, frameRate=60)]
    public class FlashTest extends Sprite {
        private const count:int = 10;
        private var balls:Array = new Array();
        
        public function FlashTest() {
            for(var i:int = 0; i < count; i++) {
                var ball:Ball = new Ball(
                  Math.random()*465,
                  Math.random()*465,
                  Math.random()*40+20,
                  Ball.getSpeed(),
                  Ball.getSpeed());
                balls.push(ball);
             }

            addEventListener(Event.ENTER_FRAME, onEnter);
        }
        
        private function onEnter(e:Event):void
        {
            graphics.clear();
            var ball:Ball;
            var _ball:Ball;
            for each(ball in balls) {
                ball.draw(this);
                ball.move();
            }
            for each(ball in balls) {
                for each(_ball in balls) {
                    if (balls.indexOf(ball) < balls.indexOf(_ball)){
                        ball.hit(_ball);
                    }
                }
                ball.reflect();
            }
        }
    }
}
import flash.display.Sprite;
import flash.display.Graphics;
import flash.filters.BlurFilter;

class Ball {
    public const shadows:int = 10;
    public var posX:Number;
    public var posY:Number;
    public var shadowX:Array = new Array();
    public var shadowY:Array = new Array(); 
    public var radian:Number;
    public var hitting:Array = new Array();
    public var speedX:Number;
    public var speedY:Number;
    public var sprites:Array = new Array();
    
    public function Ball(posX:Number, posY:Number, radian:Number, speedX:Number, speedY:Number){
        this.posX = posX;
        this.posY = posY;
        this.radian = radian;
        this.speedX = speedX;
        this.speedY = speedY;
        for(var i:int = 0;i < shadows;i++){
            var sprite:Sprite = new Sprite();
            sprite.graphics.lineStyle(5, 0xFF8F00);
            sprite.graphics.drawCircle(0, 0, radian);
            if (i < shadows - 1){
                sprite.filters = [new BlurFilter((shadows - i) * 2, (shadows - i) * 2)];
            }
            sprites.push(sprite);
        }
    }
    
    public function draw(canvas:Sprite):void {
        for(var i:int = 0;i < shadowX.length;i++){
            var sprite:Sprite = sprites[i];
            sprite.x = shadowX[i];
            sprite.y = shadowY[i];
            canvas.addChild(sprite);
            
        }
    }
    
    public function move():void {
        shadowX.push(posX);
        shadowY.push(posY);
        if(shadowX.length >= shadows) {
            shadowX.shift();
            shadowY.shift();
        }
        posX += speedX;
        posY += speedY;
    }
    
    public function reflect():void {
        if(posX >= 465 - radian) { 
             speedX = -getSpeed();
        } else if(posX <= radian) {
             speedX = getSpeed();
        }
        if(posY >= 465 - radian) {
             speedY = -getSpeed();
        } else if(posY <= radian) {
             speedY = getSpeed();
        }
    }
    
    public function hit(ball:Ball):void {
        var dX:Number = (posX - ball.posX);
        var dY:Number = (posY - ball.posY);
        if(Math.sqrt(dX * dX + dY * dY) <= (radian + ball.radian)) {
             if(hitting.indexOf(ball) == -1) {
                  var temp:Number;
                  temp = speedX;
                  speedX = ball.speedX;
                  ball.speedX = temp;
                  temp = speedY;
                  speedY = ball.speedY;
                  ball.speedY = temp;
                  hitting.push(ball);
              }
         } else {
              var i:int = hitting.indexOf(ball);
              if (i >= 0){
                  hitting.splice(i, 1);
              }
         }
    }
    
    public static function getSpeed():Number {
        return Math.random() * 5 + 1;
    }

}