Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 帧平滑码_Actionscript 3_Animation - Fatal编程技术网

Actionscript 3 帧平滑码

Actionscript 3 帧平滑码,actionscript-3,animation,Actionscript 3,Animation,好吧,这可能是关于actionscript我不了解的一些非常基本的东西,但我似乎无法用它取得任何进展 我有一些代码可以在ENTER_FRAME循环中平滑动画: private var m_lastTime:Number; private var clock_speed:Number = 5; private function frameLoop(evt:Event):void { var currTime:int = getTimer(); va

好吧,这可能是关于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圈的速度向右移动

所以它们都是数字类型,跟踪显示它们的值大致相同。为什么一个能移动MC而另一个不能


谢谢你的建议

首次使用时,
m\u lastTime
没有初始值。如果在声明var时初始化它,
var m_lastTime:Number=getTimer()
它可以工作。

在第一个循环中,
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);

听起来好像您遇到了一些int转换错误。你能试着改变
private-var-clock\u-speed:Number=5
专用var时钟速度:数字=5.0?啊,好的。你是说第一次通过循环时,m_lastTime为null,这使得deltaTime为NaN,然后当我把它加到旋转时,它变成NaN?所以下一次通过循环,即使m_lastTime现在是实数,因此deltaTime现在是实数,旋转将始终是NaN,因为NaN+5==NaN?是吗?差不多。NaN可能很棘手,因为它是数字的有效值,不会抛出错误。但是,它仍然可能导致应用程序中出现意外行为。