Actionscript 3 AS3编程动画循环问题

Actionscript 3 AS3编程动画循环问题,actionscript-3,loops,animation,Actionscript 3,Loops,Animation,我正在修补一个物体从左向右移动一段距离,然后从左到右一次又一次地重新开始 我很好奇它是如何工作的。目前我有一个简化的代码,其中“rect”应该循环到右边: ok, this is the code non simplified: function preload(e:Event):void{ var loadedBytes=loaderInfo.bytesLoaded; var totalBytes=loaderInfo.bytesTotal; var rect=Mo

我正在修补一个物体从左向右移动一段距离,然后从左到右一次又一次地重新开始

我很好奇它是如何工作的。目前我有一个简化的代码,其中“rect”应该循环到右边:

  ok, this is the code non simplified: function preload(e:Event):void{
    var loadedBytes=loaderInfo.bytesLoaded;
    var totalBytes=loaderInfo.bytesTotal;
    var rect=MovieClip(root).loader_rect;
    var startpos=rect.x=stage.x-rect.width;

       if(loadedBytes==totalBytes){
           removeEventListener(Event.ENTER_FRAME, preloader);
           gotoAndStop(2); 
       }
       else{ 
           rect.x+=3.5+loadedBytes/totalBytes; 
         if(rect.x>=stage.x+stage.width) rect.x=startpos  

           else rect.x+=3.5+loadedBytes/totalBytes; 
       }
} (I get no errors, just  the animation isn't working)

在我看来,这应该涵盖它。如果rect的位置大于200,则将其移动到0,否则在每帧上将其向右移动10px。但它所做的只是将rect向右移动几个像素,然后停止。为什么这不起作用,逻辑是否不正确?

以下代码行重置rect对象的x位置:

这意味着在每一帧上,rect移动到上面的位置,然后向右移动3.5+0到1像素之间的分数。然后将其向右移动3.5+0到1像素之间的分数

因此,在每一帧上,rect对象都会移动到

stage.x - rect.width + 3.5 * 2 + [percent loaded] * 2

因此,在加载过程中,rect看起来不会移动最多2个像素。

几个像素。你是说10?你能展示更多的代码吗?它是在一个单帧内还是什么的?是的,以像素为单位。代码在onEnterFrame中。问题是,它在测试时被触发,但功能不正常-它没有向右移动200像素的“rect”,而是只移动约5像素,然后停止。所以我想知道这段代码的逻辑是否不对。。你能展示更多的代码吗。。这是一个很难帮助的问题,因为你问题中的代码应该可以工作。好的,这是非简化代码:函数preload:Event:void{var loadedBytes=loaderInfo.bytesload;var totalBytes=loaderInfo.bytesTotal;var rect=MovieCliproot.loader_rect;var startpos=rect.x=stage.x-rect.width;ifloadedBytes==totalBytes{removeEventListenerEvent.ENTER_FRAME,preload;gotoAndStop2;}else{rect.x+=3.5+loadedBytes/totalBytes;ifrect.x>=stage.x+stage.width rect.x=startpos else rect.x+=3.5+loadedBytes/totalBytes;}我没有得到任何错误,只是动画不起作用。把它放在问题中,而不是放在注释中。很好的捕获。如果代码一定要重复,它周围是否存在onEnterFrame事件?现在想不出任何东西。@user3274901您可以在加载程序事件处理程序之外设置矩形的开始位置。例如,在启动加载程序,设置rect.x=stage.x-rect.width;。然后启动加载程序。我现在确实将它移到了外部,但现在当rect移到右侧时,它不会在到达stage.x+stage.width后返回startpos。我希望它保持左右循环,如何让它一次又一次地返回到开始位置?@user3274901,正如我所评论的那样d在上面的帖子中:如果stage.width指的是flash.display.stage,您可能想改用stage.stageWidth。stage.width会随着子元素位置的改变而改变。请将其视为一个橡皮筋,可以拉伸以适应所有子元素。如果将其中一个子元素移到原始边界之外,则边界将重新调整L计算。舞台宽度指的是舞台的实际宽度,不会因其子元素而改变。我会尝试一下,解释得很好,谢谢。这很有效,非常感谢所有的帮助。
stage.x - rect.width + 3.5 * 2 + [percent loaded] * 2