flash on 2010-7-27
♥0 |
Line 128 |
Modified 2010-07-30 21:32:03 |
MIT License
archived:2017-03-20 02:56:31
ActionScript3 source code
/**
* Copyright pon ( http://wonderfl.net/user/pon )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/lYr7
*/
package {
import flash.geom.Point;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.Sprite;
import flash.display.StageScaleMode
import flash.display.StageAlign
import flash.display.StageQuality
public class FlashTest extends Sprite {
private const G:Number=0.6;
private const M:Number=0.99;
private const V:Number=-0.8;
private const R:Number=6;
private var list:Array=[];
private var focus:Ball=null
public function FlashTest() {
// write as3 code here..
stage.quality=StageQuality.LOW;
stage.scaleMode=StageScaleMode.NO_SCALE
stage.align=StageAlign.TOP_LEFT
stage.addEventListener(MouseEvent.MOUSE_DOWN,creat);
stage.addEventListener(MouseEvent.MOUSE_UP,release);
addEventListener(Event.ENTER_FRAME,enter);
}
private function creat(e:MouseEvent):void{
if(e.target!=e.currentTarget)return
focus=new Ball()
list.push(focus);
addChild(focus)
}
private function release(e:MouseEvent):void{
focus.active();
focus=null;
}
private function enter(e:Event):void{
var ball:Ball
for(var i:uint=0;i<list.length;i++){
ball=list[i]
if(!ball._active)continue
ball.x+=(ball.vx*=M);
ball.y+=(ball.vy*=M);
ball.vy+=G;
if(ball.y>=stage.stageHeight-ball.r){
ball.y=stage.stageHeight-ball.r
ball.vy*=V
}
if(ball.x<=ball.r){
ball.x=ball.r
ball.vx*=V
}else if(ball.x>=stage.stageWidth-ball.r){
ball.x=stage.stageWidth-ball.r
ball.vx*=V
}
ball.rotation+=ball.vx;
ball.rotation+=ball.vy;
ball.point.x=ball.x
ball.point.y=ball.y
}
var _x:int
var _y:int
for(i=0;i<list.length;i++){
var kou:Ball=list[i]
for(var n:uint=i+1;n<list.length;n++){
var otu:Ball=list[n];
var sa:Number=(kou.r+otu.r)-Point.distance(kou.point,otu.point)
if(sa>0){
_x=kou.x>otu.x?1:-1;
_y=kou.y>otu.y?1:-1;
kou.x+=sa/R*_x;
kou.vx+=sa/R*_x;
otu.x-=sa/R*_x;
otu.vx-=sa/R*_x;
kou.y+=sa/R*_y;
kou.vy+=sa/R*_y;
otu.y-=sa/R*_y;
otu.vy-=sa/R*_y;
}
}
}
}
}
}
import flash.events.MouseEvent;
import flash.geom.Point;
import flash.events.Event;
import flash.display.Sprite;
class Ball extends Sprite{
public var vx:Number=0;
public var vy:Number=0;
public var r:Number
public var point:Point=new Point();
public var _active:Boolean=false
public function Ball(){
graphics.beginFill(0x000000,1);
graphics.drawCircle(0,0,100);
graphics.beginFill(0xFFFFFF,1);
graphics.drawRoundRect(-40,-70,20,20,4,4);
graphics.drawRoundRect(20,-70,20,20,4,4);
scaleX=scaleY=0.1
addEventListener(Event.ENTER_FRAME,size);
}
private var pl:Number=0.05;
private function size(e:Event):void{
scaleX += pl;
scaleY += pl;
if(scaleX>=2 || scaleX<=0.1)pl*=-1
vx=(root.stage.mouseX-x)/5
vy=(root.stage.mouseY-y)/5
r=scaleX*100;
x=root.stage.mouseX;
y=root.stage.mouseY;
}
public function active():void{
removeEventListener(Event.ENTER_FRAME,size);
r=scaleX*100;
addEventListener(MouseEvent.MOUSE_DOWN,down)
_active=true
}
private function down(e:MouseEvent):void{
_active=false
startDrag()
stage.addEventListener(MouseEvent.MOUSE_UP,up)
}
private function up(e:MouseEvent):void{
_active=true
stage.removeEventListener(MouseEvent.MOUSE_UP,up)
stopDrag()
}
}