PDA

Просмотр полной версии : Рандомная загрузка разных swf


Ogat
23.12.2010, 14:24
И снова здравствуйте!:)

Ситуация такая: есть пустая флэшка, куда я загружаю 8 swf (A, Aex, B, Bex, C, Cex, D, Dex). Проблема заключается в том, что мне нужно, чтобы они загружались туда рандомными парами (A-Aex, B-Bex и т.д.) через определенные промежутки времени. То есть в результате была следующая последовательность:

- любая swf из A, B, C, D

через 8 секунд

- любая swf из Aex (если предыдущая была A), Bex (если предыдущая была B) и т.д.

через 8 секунд цикл начинается заново (и было бы вообще круто, если бы заново был рандом, но не та же пара:))

Может быть сделать 4 папки и грузить флэшки попарно оттуда? Но нужно, чтобы первая обязательно грузилась A, B, C или D

Может я вообще сильно заморачиваюсь и все можно реализовать легко и просто?

Не могу никак склеить пары вместе, так как бережем трафик. При этом не могу сделать прямую последовательность, так как некоторые клипы рискуют быть не увиденными никогда.

Я заранее благодарю всех откликнувшихся, я вам уже обязана сильно-сильно:)

lexa2000lexa
23.12.2010, 15:20
можно както так набрасам код побыстромуvar arr:Array = ["A","B","C"]
var locRoot:MovieClip = this
function loadContent(id:String):Void{
trace(id)
var url:String = id+".swf"
var contener:MovieClip = locRoot.createEmptyMovieClip("contenerload",locRoot.getNextHighestDepth());
var contentMcl:MovieClipLoader = new MovieClipLoader();
contentMcl.addListener(locRoot)
locRoot.onLoadInit = function(mc){
if(id.length==1){
setTimeout(loadContent,8000,(id+"ex"))
}else{
setTimeout(loadContent,8000,nameSwf())
}
}

contentMcl.loadClip(url,contener);
}
var nameswf:String = arr[random(arr.length)]
loadContent(nameswf)
function nameSwf():String {
var id:Number = random(arr.length)
if(nameswf!=arr[id]){
nameswf = arr[id]
return arr[id];
}else{
if(id==arr.length){
return arr[id-1];
}else{
return arr[id+1];
}
}
}

Ogat
23.12.2010, 16:45
lexa2000lexa :eek:не ожидала такой заботы! спасибо огромееенннеееейшееее, гениально просто ура ура ура:) (море эмоций)

AlexG77
21.06.2011, 14:02
Немного подправил под свои цели:
var arr:Array = ["rb1","rb2","rb3","rb4","rb5"]
var locRoot:MovieClip = this
function loadContent(id:String):Void{
trace(id)
var url:String = id+".swf"
var contener:MovieClip = locRoot.createEmptyMovieClip("contenerload",locRoot.getNextHighestDepth());
var contentMcl:MovieClipLoader = new MovieClipLoader();
contentMcl.addListener(locRoot)
locRoot.onLoadInit = function(mc){
if(id.length==1){
setTimeout(loadContent,10000)
}else{
setTimeout(loadContent,10000,nameSwf())
}
}

contentMcl.loadClip(url,contener);
}
var nameswf:String = arr[random(arr.length)]
loadContent(nameswf)
function nameSwf():String {
var id:Number = random(arr.length)
if(nameswf!=arr[id]){
nameswf = arr[id]
return arr[id];
}else{
if(id==arr.length){
return arr[id];
}else{
return arr[id];
}
}
}

но получается так, что один и тот же ролик может загрузиться три-четрыре раза подряд. Как прописать условие, чтобы после ролика грузился обязательно любой другой?

BuKT
21.06.2011, 16:06
Как прописать условие, чтобы после ролика грузился обязательно любой другой?
Что-нибудь типа:

var usedSWFsArray = [false,false] //По числу свфок
На этапе загрузки свфки ставим в соответствующее этому айди место флаг true, а вместо взятия рандома говорим следующее
do {
id= random(arr.length)
} while (usedSWFsArray[id] == true)
И на выходе получаем айди свф, который ещё не был использован.
Обнулять флаги можно по желанию - при загрузке новой свф, или, допустим, по событию, когда все свф уже по разу были загружены

AlexG77
21.06.2011, 17:31
если честно, не совсем понял, как использовать в конкретном примере