flash on 2011-4-20

by 0rafu0
♥0 | Line 37 | Modified 2011-04-20 08:39:16 | MIT License
play

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;

}
    }
    }
}