forked from: forked from: forked from: forked from: flash on 2011-9-6
♥0 |
Line 125 |
Modified 2011-09-07 08:04:16 |
MIT License
archived:2017-03-30 22:06:21
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;
}
}