2011-10-03 37 views
1

我在Flash项目中有一个场景,我希望帧的顺序在运行时被随机化。我希望每一帧都只显示一次。我希望每个演讲的持续时间不变。什么是最简单的方法来随机化AS3中的帧的顺序而不重复?

我一直在玩弄一对夫妇的大卫·斯蒂勒的建议:

他们是有点过时(Void而不是voidthis._totalframes - 1而不是MovieClip.totalFrames),但主要听起来很合理。

尽管如此,该方法似乎并不理想。大卫的例子对少量帧序列非常有效。但我有大约100个单独的框架。

这样做的最好方法是什么?

我的心愿:

  1. 无需标记每个帧单独
  2. 理想的情况下,没有必要重复每帧
  3. 易上的代码来改变每个帧presention的持续时间

我并不是Flash的经验,所以我要求一些显然不可能的事情,但我很想看到关于如何继续进行的建议。

回答

1

没有太多的想法放进去,我会做这样的事情:

(未测试)

//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(); 
+0

这看起来相当好(不是在莫用闪光灯PC)。只要看看它,我可以看到一个遗漏:是否有一种普遍受到尊重的方法来管理每帧曝光的持续时间? –

+0

我想你可以让事件监听器变成一个计时器。您还需要检查帧阵列是否为空的时候:) –

+0

也许我误解了这个问题,但很有可能这个解决方案会在以随机顺序显示每一帧之前多次显示一帧。 –

相关问题