好吧,这可能是我不了解 actionscript 的非常基本的东西,但我似乎无处可去。
我有一些代码可以平滑 ENTER_FRAME 循环中的动画:
private var m_lastTime:Number;
private var clock_speed:Number = 5;
private function frameLoop(evt:Event):void
{
var currTime:int = getTimer();
var deltaTime:Number = ( currTime - this.m_lastTime ) * 0.001;
this.m_lastTime = currTime;
//trace(deltaTime.toString() + "," + (deltaTime * clock_speed).toString());
// why you no work?
var n:Number = clock_speed * deltaTime;
trace(n);
mcClockHand.rotation += .18;// Number(deltaTime * clock_speed);
如您所见,我正在计算帧之间的时间增量,并将其乘以速度常数。我想出了一个数字值并将其追踪到输出窗口。它在 0.14 和 0.19 之间波动,平均为 0.18。
如果我使用该值来抵消时钟指针 MC 的旋转,它永远不会移动。 如果我使用如上所示的常数 0.18,它会以每 30 秒大约 1 圈的速度向右移动。
所以它们都是 Number 类型,跟踪显示它们的值大致相同。为什么一个可以移动 MC 而另一个不能?
感谢您的任何建议!
最佳答案
在您的第一个循环中,deltaTime
的第一次计算结果为 NaN
,因为 this.m_lastTime
为空。从那里,您的代码试图增加一个不是数字的对象。一个简单的解决方案是在声明时将 m_lastTime
变量设置为 0
:
private var m_lastTime:Number = 0;
更好的解决方案是检查计算结果是否为 NaN 的情况。
var n:Number = clock_speed * deltaTime;
if (isNaN(n)) n = 0;
trace(n);
mcClockHand.rotation += n;// Number(deltaTime * clock_speed);
关于actionscript-3 - 帧平滑代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8417136/