複数目標のバネの運動です。周りの青いボールに真中の緑のボールがゴムで固定されているように見えます。周りの青いボールだけマウスでドラック&ドロップで動かすことができます。
色々実験してみてわかった結果
摩擦係数に関してfriction
- 1に近い値(0.9だと)ツルツルな動き
- 0に近い値(0.1だと)べったりとして動き
- 1を超えるとバネで振れながら大きくなる
- マイナスになると膨張
スプリングに関してspring
- 1に近い値(0.9だと)高速に振れるブルブル
- 0に近い値(0.1だと)のっそりと収束
- 1を超えるとガチガチ1.6以上は膨張
- マイナスになると膨張
//ハンドル付きボールのハネ運動スクリプト
var spring:Number = 0.1;
var friction:Number = 0.8;
var numHandles:Number = 3;
//センターボールの作成
var ball:Ball = new Ball(40, 0x006600);
addChild(ball);
//ハンドルの配列制御
var handles = new Array();
for(var i:int=0; i<numHandles; i++){
var handle:Ball = new Ball(10, 0x0000ff);
handle.x = Math.random() * stage.stageWidth;
handle.y = Math.random() * stage.stageHeight;
addChild(handle);
handle.addEventListener(MouseEvent.MOUSE_DOWN, onPress);
handles.push(handle);
}
addEventListener(Event.ENTER_FRAME, onEnterFrame);
addEventListener(MouseEvent.MOUSE_UP, onRelease);
//フレーム毎の処理
function onEnterFrame(e:Event):void {
//ボールの生成部分
for(var i:int = 0; i<numHandles; i++){
var handle:Ball = handles[i] as Ball;
//ボールの動き
ball.vx += (handle.x - ball.x) * spring;
ball.vy += (handle.y - ball.y) * spring;
}
ball.vx *= friction;
ball.vy *= friction;
ball.x += ball.vx;
ball.y += ball.vy;
//線の生成
graphics.clear();
graphics.lineStyle(1);
for(i = 0; i<numHandles; i++){
graphics.moveTo(ball.x, ball.y);
graphics.lineTo(handles[i].x, handles[i].y);
}
}
//マウスを押したとき
function onPress(e:MouseEvent):void {
e.target.startDrag();
}
//マウスを離したとき
function onRelease(e:MouseEvent):void {
stopDrag();
}






関連する記事