Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.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
Flash 在没有重复的情况下,在AS3中随机化帧顺序的最简单方法是什么?_Flash_Actionscript 3_Random - Fatal编程技术网

Flash 在没有重复的情况下,在AS3中随机化帧顺序的最简单方法是什么?

Flash 在没有重复的情况下,在AS3中随机化帧顺序的最简单方法是什么?,flash,actionscript-3,random,Flash,Actionscript 3,Random,我在flash项目中有一个场景,我希望在运行时对帧的顺序进行随机化。我希望每个帧只显示一次。我希望每次演讲的持续时间保持不变 我一直在考虑David Stiller的几个建议: 它们有点过时了(Void而不是Void,这个。_totalframes-1而不是MovieClip.totalframes),但基本原理似乎很合理 尽管如此,这一方法似乎还不够理想。David的示例对于少量帧序列非常有效。但我有大约100个单独的帧 最好的方法是什么 我的愿望清单: 无需单独标记每个帧 理想情况下

我在flash项目中有一个场景,我希望在运行时对帧的顺序进行随机化。我希望每个帧只显示一次。我希望每次演讲的持续时间保持不变

我一直在考虑David Stiller的几个建议:

它们有点过时了(
Void
而不是
Void
这个。_totalframes-1
而不是
MovieClip.totalframes
),但基本原理似乎很合理

尽管如此,这一方法似乎还不够理想。David的示例对于少量帧序列非常有效。但我有大约100个单独的帧

最好的方法是什么

我的愿望清单:

  • 无需单独标记每个帧
  • 理想情况下,不需要在每个帧上重复代码
  • 易于更改每帧显示的持续时间

  • 我没有Flash方面的经验,所以我要求做一些显然不可能的事情,但我很想看看如何最好地继续进行。

    没有太多考虑,我会做这样的事情:

    (未测试)

    //在第1帧上,所有帧上都有一个透明层。第一帧可能应该是空的
    变量帧:数组=[];
    
    对于(var i:Number=1;i,如果没有太多考虑,我会这样做:

    (未测试)

    //在第1帧上,所有帧上都有一个透明层。第一帧可能为空
    变量帧:数组=[];
    
    对于(变量i:Number=1;它看起来非常棒(不是在mo上有flash的PC上)。但仅通过查看,我就可以看到一个遗漏:是否有一种普遍受人尊重的方法来管理每个帧曝光的持续时间?我想您可以将事件侦听器改为计时器。您还必须检查帧数组何时为空:)也许我误解了这个问题,但是这个解决方案很可能会在以随机顺序显示每一帧之前多次显示一帧。您如何计算32位套件?我存储所有需要显示的帧,然后在拾取时将它们从数组中删除。@Jonathanhedborg得到了它,我现在看到了。我的宝贝,这是OK非常好(不是在mo上有flash的PC上)。但是,只要看一下,我就可以看到一个遗漏:是否有一种普遍受人尊重的方法来管理每个帧曝光的持续时间?我想你可以将事件侦听器改为计时器。你还必须检查帧阵列何时为空:)也许我误解了这个问题,但是这个解决方案在以随机顺序显示每一帧之前,很可能会多次显示一帧。您如何理解32bitkit?我存储了所有需要显示的帧,然后在拾取时将它们从数组中删除。@Jonathanhedborg得到了,我现在看到了。我的错
    //On frame 1 on a clear layer present on all frames. First frame should probably be empty
    
    var frames:Array = [];
    for(var i:Number = 1; i<this.totalFrames, i++) {
      frames.push(i+1);
    }
    this.addEventListener(Event.ENTER_FRAME, frameFunc);
    function frameFunc(e:Event) {
      var frameNum:Number = Math.floor(Math.random()*frames.length);
      var frame:Number = frames[frameNum];
      frames[frameNum] = frames.pop(); //You could also use splice.
      gotoAndStop(frame);
    }
    
    stop();