flash on 2011-4-20
♥0 |
Line 37 |
Modified 2011-04-20 08:39:16 |
MIT License
archived:2017-03-20 00:46:22
ActionScript3 source code
/**
* Copyright 0rafu0 ( http://wonderfl.net/user/0rafu0 )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/5Zca
*/
package {
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
// --------------------------------------------
// 初期化
// --------------------------------------------
var fx = 200; // 始点の x 座標
var fy = 100; // 始点の y 座標
var rot = 0; // 重りの角度
var rot_spd = 0; // 角速度
var length = 150; // 紐の長さ
var g = 0.5; // 重力加速度
public function FlashTest() {
// write as3 code here..
// --------------------------------------------
// 毎フレーム実行されるイベント
// --------------------------------------------
stage.addEventListener(Event.ENTER_FRAME,function(){
// 現在の重りの位置
var rad = rot * Math.PI / 180;
var px = fx + Math.cos(rad) * length;
var py = fy + Math.sin(rad) * length;
// 重力移動量を反映した重りの位置
var vx = px - fx;
var vy = py - fy;
var t = -(vy * g)/(vx * vx + vy * vy);
var gx = px + t * vx;
var gy = py + g + t * vy;
}
// 2つの重りの位置の角度差
var r = Math.atan2(gy - fy,gx - fx) * 180 / Math.PI;
// 角度差を角速度に加算
var sub = r - rot;
sub -= Math.floor(sub / 360.0) * 360.0;
if(sub <-180.0) sub += 360.0;
if(sub > 180.0) sub -= 360.0;
rot_spd += sub;
// 摩擦
// rot_spd *= 0.995;
// 角度に角速度を加算
rot += rot_spd;
// 新しい重りの位置
rad = rot * Math.PI / 180;
px = fx + Math.cos(rad) * length;
py = fy + Math.sin(rad) * length;
// 重りの座標
this._x = px;
this._y = py;
}
}
}
}