Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Рандомная загрузка разных swf (http://www.flasher.ru/forum/showthread.php?t=148175)

Ogat 23.12.2010 14:24

Рандомная загрузка разных swf
 
И снова здравствуйте!:)

Ситуация такая: есть пустая флэшка, куда я загружаю 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

можно както так набрасам код побыстрому
Код AS1/AS2:

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

Немного подправил под свои цели:
Код AS1/AS2:

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

Цитата:

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

Код AS1/AS2:

var usedSWFsArray = [false,false] //По числу свфок

На этапе загрузки свфки ставим в соответствующее этому айди место флаг true, а вместо взятия рандома говорим следующее
Код AS1/AS2:

do {
id= random(arr.length)
} while (usedSWFsArray[id] == true)

И на выходе получаем айди свф, который ещё не был использован.
Обнулять флаги можно по желанию - при загрузке новой свф, или, допустим, по событию, когда все свф уже по разу были загружены

AlexG77 21.06.2011 17:31

если честно, не совсем понял, как использовать в конкретном примере


Часовой пояс GMT +4, время: 16:34.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.