package {
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.utils.getTimer;
public class RotationExample extends Sprite {
private var rotatingObject: Shape; // 要旋转的对象
private var rotateSpeed: Number = 0;
private var time: Number = getTimer();
public function RotationExample() {
createRotatingObject();
addEventListener(Event.ENTER_FRAME, update);
}
// 创建旋转对象
private function createRotatingObject(): void {
rotatingObject = new Shape();
// 绘制一个矩形(注册点在中心)
rotatingObject.graphics.beginFill(0xFF0000);
rotatingObject.graphics.drawRect(-50, -30, 100, 60); // 中心在 (0,0)
rotatingObject.graphics.endFill();
// 设置初始位置
rotatingObject.x = stage.stageWidth / 2;
rotatingObject.y = stage.stageHeight / 2;
addChild(rotatingObject);
}
// 更新旋转
private function update(event: Event): void {
// t=FL
// 其中 t 是力矩,F 是作用力,L 是力臂(即力的作用点到旋转轴的垂直距离)
const F: Number = 10;
const L: Number = 1;
const t: Number = F * L;
// t=mr^2a
// 其中 t 是力矩,m 是质量, r 是质心到旋转轴的距离,a 是角加速度
// t=Ia
// 其中 t 是力矩,旋转惯量 I=mr^2, a 是角加速度
const m: Number = 10;
const r: Number = 1000;
const I: Number = m * r * r;
var dt = getTimer() - time;
time = getTimer();
var a: Number = t / I * (dt * dt);
a *= 180 / Math.PI;
rotateSpeed += a;
trace("a:" + a);
rotatingObject.rotation += rotateSpeed;
}
}
}