バネチェーン
ボールを複数にしてつなげたやつ。
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;
public class SpringBallChain extends Sprite {
private const NUM_BALLS:uint = 3;
private var balls:Array = new Array();
private var targetPt:Point;
private var spring:Number = 0.01;
private var friction:Number = 0.95;
private var gravity:Number = 1;
public function SpringBallChain() {
init();
}
private function init():void {
targetPt = new Point(stage.stageWidth/2, stage.stageHeight/2);
for (var i:int = 0; i < NUM_BALLS; i++) {
var ball:Ball = new Ball(20, 0xFFFFFF);
ball.x = stage.stageWidth/2;
ball.y = stage.stageHeight/2;
balls.push(ball);
addChild(ball);
}
stage.addEventListener(MouseEvent.CLICK, onStageClick);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onStageClick(e:MouseEvent):void {
targetPt.x = mouseX;
targetPt.y = mouseY;
}
private function onEnterFrame(e:Event):void {
graphics.clear();
graphics.lineStyle(1, 0xFFFFFF);
for (var i:int = 0; i < NUM_BALLS; i++) {
if (i == 0) {
ballMove(balls[i], targetPt.x, targetPt.y);
graphics.moveTo(balls[0].x, balls[0].y);
graphics.lineTo(balls[1].x, balls[1].y);
} else {
ballMove(balls[i], balls[i-1].x, balls[i-1].y, true);
graphics.moveTo(balls[i-1].x, balls[i-1].y);
graphics.lineTo(balls[i].x, balls[i].y);
}
}
}
private function ballMove(ballA:Ball, targetX:Number, targetY:Number, grv:Boolean = false):void {
var dx:Number = targetX - ballA.x;
var dy:Number = targetY - ballA.y;
var ax:Number = dx * spring;
var ay:Number = dy * spring;
ballA.vx += ax;
ballA.vy += ay;
if (grv) ballA.vy += gravity;
ballA.vx *= friction;
ballA.vy *= friction;
ballA.x += ballA.vx;
ballA.y += ballA.vy;
}
}
}
2009 年 11 月 30 日 10:04 AM | category : ActionScript3.0