Какой самый простой способ рандомизировать порядок кадров в AS3 без повторов? - PullRequest
1 голос
/ 03 октября 2011

У меня есть сцена во флэш-проекте, где я хочу, чтобы порядок кадров был рандомизирован во время выполнения.Я хочу, чтобы каждый кадр показывался ровно один раз.Я хочу, чтобы продолжительность каждой презентации была постоянной.

Я играл с парой предложений Дэвида Стиллера:

Они немного устарели (Void вместо void,this._totalframes - 1, а не MovieClip.totalFrames), но принципал кажется надежным.

Тем не менее, подход кажется менее оптимальным.Примеры Дэвида работают очень хорошо для небольшого числа последовательностей кадров.Но у меня есть около 100 отдельных кадров.

Каков наилучший способ сделать это?

Мой список пожеланий:

  1. Нет необходимости маркировать каждый кадр отдельно
  2. В идеале, нет необходимости повторять код для каждого кадра
  3. Легко изменить продолжительность представления каждого кадра

Я не имею опыта работы с Flash, поэтому я спрашиваюза что-то явно невозможное, но мне было бы интересно увидеть предложения о том, как лучше поступить.

1 Ответ

1 голос
/ 03 октября 2011

Не задумываясь, я бы сделал что-то вроде этого:

(не тестировалось)

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