2009-03-19 3 views
0

У меня есть этот код слайд-шоу AS3, который загружает XML со списком изображений. Что я ищу, это способ пропустить часть XML и просто загрузить все изображения в папку «изображения»?Загрузить изображения из папки в слайд-шоу

Как добавить константу boolean, которая решает, следует ли воспроизводить изображения случайным образом или нет? const RANDOM: boolean = true; ...

// import tweener 
import caurina.transitions.Tweener; 

// delay between slides 
const TIMER_DELAY:int = 2000; 
// fade time between slides 
const FADE_TIME:Number = 1; 

// flag for knowing if slideshow is playing 
var bolPlaying:Boolean = true; 
// reference to the current slider container 
var currentContainer:Sprite; 
// index of the current slide 
var intCurrentSlide:int = -1; 
// total slides 
var intSlideCount:int; 
// timer for switching slides 
var slideTimer:Timer; 
// slides holder 
var sprContainer1:Sprite; 
var sprContainer2:Sprite; 
// slides loader 
var slideLoader:Loader; 
// url to slideshow xml 
var strXMLPath:String = "slideshow.xml"; 
// slideshow xml loader 
var xmlLoader:URLLoader; 
// slideshow xml 
var xmlSlideshow:XML; 

function initSlideshow():void { 
    // create new urlloader for xml file 
    xmlLoader = new URLLoader(); 
    // add listener for complete event 
    xmlLoader.addEventListener(Event.COMPLETE, onXMLLoadComplete); 
    // load xml file 
    xmlLoader.load(new URLRequest(strXMLPath)); 

    // create new timer with delay from constant 
    slideTimer = new Timer(TIMER_DELAY); 
    // add event listener for timer event 
    slideTimer.addEventListener(TimerEvent.TIMER, nextSlide); 

    // create 2 container sprite which will hold the slides and 
    // add them to the masked movieclip 
    sprContainer1 = new Sprite(); 
    sprContainer2 = new Sprite(); 
    mcSlideHolder.addChild(sprContainer1); 
    mcSlideHolder.addChild(sprContainer2); 

    // keep a reference of the container which is currently 
    // in the front 
    currentContainer = sprContainer2; 
} 

function onXMLLoadComplete(e:Event):void { 
    // create new xml with the received data 
    xmlSlideshow = new XML(e.target.data); 
    // get total slide count 
    intSlideCount = xmlSlideshow..image.length(); 
    // switch the first slide without a delay 
    switchSlide(0); 
} 

function fadeSlideIn(e:Event):void { 
    // add loaded slide from slide loader to the 
    // current container 
    addSlideContent(); 

    // check if the slideshow is currently playing 
    // if so, show time to the next slide. If not, show 
    // a status message 
    if(bolPlaying) { 
    } else { 
    } 
    // fade the current container in and start the slide timer 
    // when the tween is finished 
    Tweener.addTween(currentContainer, {alpha:1, time:FADE_TIME, onComplete:onSlideFadeIn}); 
} 

function onSlideFadeIn():void { 
    // check, if the slideshow is currently playing 
    // if so, start the timer again 
    if(bolPlaying && !slideTimer.running) 
     slideTimer.start(); 
} 

function switchSlide(intSlide:int):void { 
    // check if the last slide is still fading in 
    if(!Tweener.isTweening(currentContainer)) { 
     // check, if the timer is running (needed for the 
     // very first switch of the slide) 
     if(slideTimer.running) 
      slideTimer.stop(); 
     // change slide index 
     intCurrentSlide = intSlide; 
     // check which container is currently in the front and 
     // assign currentContainer to the one that's in the back with 
     // the old slide 
     if(currentContainer == sprContainer2) 
      currentContainer = sprContainer1; 
     else 
      currentContainer = sprContainer2; 
     // hide the old slide 
     currentContainer.alpha = 0; 
     // bring the old slide to the front 
     mcSlideHolder.swapChildren(sprContainer2, sprContainer1); 
     // delete loaded content 
     clearLoader(); 
     // create a new loader for the slide 
     slideLoader = new Loader(); 
     // add event listener when slide is loaded 
     slideLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, fadeSlideIn); 
     // load the next slide 
     slideLoader.load(new URLRequest(xmlSlideshow..image[intCurrentSlide][email protected])); 
    } 
} 

function nextSlide(e:Event = null):void { 
    // check, if there are any slides left, if so, increment slide 
    // index 
    if(intCurrentSlide + 1 < intSlideCount) 
     switchSlide(intCurrentSlide + 1); 
    // if not, start slideshow from beginning 
    else 
     switchSlide(0); 
} 

function previousSlide(e:Event = null):void { 
    // check, if there are any slides left, if so, decrement slide 
    // index 
    if(intCurrentSlide - 1 >= 0) 
     switchSlide(intCurrentSlide - 1); 
    // if not, start slideshow from the last slide 
    else 
     switchSlide(intSlideCount - 1); 
} 

function clearLoader():void { 
    try { 
     // get loader info object 
     var li:LoaderInfo = slideLoader.contentLoaderInfo; 
     // check if content is bitmap and delete it 
     if(li.childAllowsParent && li.content is Bitmap){ 
      (li.content as Bitmap).bitmapData.dispose(); 
     } 
    } catch(e:*) {} 
} 

function addSlideContent():void { 
    // empty current slide and delete previous bitmap 
    while(currentContainer.numChildren){Bitmap(currentContainer.getChildAt(0)).bitmapData.dispose(); currentContainer.removeChildAt(0);} 

    // create a new bitmap with the slider content, clone it and add it to the slider container 
    var bitMp:Bitmap = new Bitmap(Bitmap(slideLoader.contentLoaderInfo.content).bitmapData.clone()); 
    currentContainer.addChild(bitMp); 
} 

// init slideshow 
initSlideshow(); 

ответ

1

Если вы используете PHP на вашем сервере что-то вроде

header('Content-type: applicaiton/xml;charset=utf-8'); 
$dir = dir('images'); 
echo '<images>', "\n"; 
foreach ($dir as $file) { 
    if ($file == '.' || $file == '..') { 
     continue; 
    } 
    echo '<image>', $file, '</image>', "\n"; 
} 
echo '</images>'; 

должен сделать трюк.

Просто укажите свое приложение для слайд-шоу в PHP-скрипте, и оно создаст список динамически.

0

Ну вы могли бы просто интегрировать XML в ActionScript, если вы хотите, чтобы пропустить загрузку:

var xmlSlideshow:XML = <images><image /><image /></ images>; 

В случае, если вы хотите, чтобы пропустить, а вы можете назвать изображения на определенным образом, чтобы вы могли слепо загрузить их (image0.jpg, image1.jpg, и т. д.), пока ваша последовательность загрузки не вызовет ошибку (которую вы поймаете, конечно), поскольку imageN не существует (это грязно хоть!).

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

+0

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

+0

Создайте массив с индексами и перетасуйте его. –

+0

Как бы я это сделал? Я ноб. –

0

Если вы не используете Flash-приложение через AIR, у вас нет доступа к системе, поэтому вы не можете прочитать все содержимое папки.

Вы можете использовать PHP или ваш язык на стороне сервера, чтобы читать содержимое папки и конструировать xml, который вы загрузите.

Просто измените strXMLPath на http://example.com/yourphpfile.php и он загрузится как документ xml. Вы должны изменить тип mimetype на mimetype="application/xml".