forked from: spring02
forked from spring02 (diff: 79)
研究室内勉強会: バネその2
ActionScript3 source code
/**
* Copyright hacker_aft9cz2z ( http://wonderfl.net/user/hacker_aft9cz2z )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/riH8
*/
// forked from sakef's spring02
/*
研究室内勉強会: バネその2
*/
package
{
import flash.display.Sprite;
import flash.events.Event;
[SWF(width="465", height="465", backgroundColor="0x000000", frameRate="30")]
public class bane02 extends Sprite
{
private var ary:Array;
public function bane02()
{
ary=[];
var ball:BaneBall;
for(var i:int=0; i < 10; i++)
{
var x:Number= 40 * i + 40;
var y:Number=stage.stageHeight/2;
ball=new BaneBall(x,y);
ball.x=x;
ball.y=y;
addChild(ball);
ary.push(ball);
}
for(var i:int=0; i < 10; i++)
{
var x:Number= 40 * i + 40;
var y:Number=stage.stageHeight/2 + 40;
ball=new BaneBall(x,y);
ball.x=x;
ball.y=y;
addChild(ball);
ary.push(ball);
}
for(var i:int=0; i < 10; i++)
{
var x:Number= 40 * i + 40;
var y:Number=stage.stageHeight/2 - 40;
ball=new BaneBall(x,y);
ball.x=x;
ball.y=y;
addChild(ball);
ary.push(ball);
}
addEventListener(Event.ENTER_FRAME, onFrame);
}
private function onFrame(e:Event):void
{
for(var i:int=0; i < ary.length; i++) (ary[i]as BaneBall).update();
}
}
}
import flash.display.Shape;
import flash.utils.*;
class BaneBall extends Shape
{
private var tx:Number;
private var ty:Number;
private var vx:Number;
private var vy:Number;
private var k:Number;
private var f:Number
private var limit:Number=150;
private var rx:Number = Math.random()*200+200;
private var ry:Number = Math.random()*300+200;
private var mass:Number = Math.random()*0.5 + 0.5;
public function BaneBall(xx:Number, yy:Number)
{
tx=xx;
ty=yy;
k=0.035;//0.04 + 0.02 * Math.random();
f=0.75;//0.8 + 0.15 * Math.random();
vx=vy=0;
graphics.beginFill(0x00ffff * Math.random(), 1);
graphics.drawCircle(0, 0, 5);
graphics.endFill();
}
public function update():void
{
//vx+=(stage.mouseX - x) * k;
//vy+=(stage.mouseY - y) * k;
var xx:Number = x - stage.mouseX;
var yy:Number = y - stage.mouseY;
var dist:Number = Math.sqrt( xx * xx + yy * yy );
if(dist < limit)
{
var angle:Number = Math.atan2(xx,yy);
if(xx <= 0 && yy <= 0)
{
vx += Math.cos(angle)*(1-(dist/limit))*(5/mass);
vy += Math.cos(angle)*(1-(dist/limit))*(5/mass);
}
else if(xx > 0 && yy < 0)
{
vx -= Math.cos(angle)*(1-(dist/limit))*(5/mass);
vy += Math.cos(angle)*(1-(dist/limit))*(5/mass);
}
else if(xx < 0 && yy > 0)
{
vx -= Math.cos(angle)*(1-(dist/limit))*(5/mass);
vy += Math.cos(angle)*(1-(dist/limit))*(5/mass);
}
else if(xx >= 0 && yy >= 0)
{
vx += Math.cos(angle)*(1-(dist/limit))*(5/mass);
vy += Math.cos(angle)*(1-(dist/limit))*(5/mass);
}
}
vx+=(tx - x) * k;
vy+=(ty - y) * k;
x+=vx + Math.sin(getTimer()/rx)*0.5;
y+=vy + Math.cos(getTimer()/ry)*0.5;
vx*=f;
vy*=f;
}
}
