Topic: loaders un darbs ar atmiņu

ir slaidiņš ar nedaudz bildēm (<10)
ciklā secīgi tiek tās ielādētas

function switchSlide(e:Event):void {
...
slideLoader = new Loader();
slideLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, fadeSlideOut);
slideLoader.load(new URLRequest(imagePath+intCurrentSlide+".jpg"));
}

pēc tam seko efekts (fadeSlideOut)
kurā tiek
currentContainer.addChild(slideLoader.content);
tad tas tiek tweenots un
swapots: mcSlideHolder.swapChildren(sprContainer2, sprContainer1);

un atkal viss no sākuma.


spriežot pēc procesa, flash nodot servirim nemitīgus pieprasījumus pēc tām bildēm. kā uzlabot kodu lai bildes tiktu ielādētas masīvā un ņemtas no tā.

txs jau iepriekš

Re: loaders un darbs ar atmiņu

Saglaba tos masiva

piemera vienkarshi bilde tiek saglabata mainigaja
imgFile = URLRequest(imagePath+intCurrentSlide+".jpg"));

Re: loaders un darbs ar atmiņu

respektīvi, ja paļaujamies uz loģiku, tad rakstam
imgFile[intCurrentSlide] = URLRequest(imagePath+intCurrentSlide+".jpg")); ?

kā ir jānodeklarē šis imgFile? pietiks ar parastu var imgFile:Array;?

kā pārbauddīt vai tāds imgFile[intCurrentSlide] ir jau ielādējies?
if (imgFile[intCurrentSlide] == true) {   uzkaras ar nulles objekta kļūdu sad

Last edited by spaiks (2010-06-30 17:10:14)

Re: loaders un darbs ar atmiņu

Lai Flash`ā ievietotu bildes ielādējot attālināti jāizmanto Loader() kopā ar URLRequest

ACTIONSCRIPTS Code:
 
var imgFile:Array = new Array(10);//10 = rezervētais elementu skaits masīvā
imgFile[intCurrentSlide] = new Loader();
imgFile[intCurrentSlide].load(new URLRequest(imagePath+intCurrentSlide+".jpg"));
imgFile[intCurrentSlide].contentLoaderInfo.addEventListener(Event.COMPLETE,BildeIeladejas);
 
private function BildeIeladejas(e:Event):void{
e.currentTarget.contentLoaderInfo.removeEventListener(Event.COMPLETE,BildeIeladejas);
//daram, kas jadara pec bildes ielades, piem. addChild(e.currentTarget.content);
}
 

īsti nezinu kā tev tur viss tiek darīts, bet no šitā vari mēģināt saprast, kā saglabāt attālināti ielādētās bildes masīvā.

i came, i saw, i added a custom AS3 class...

Re: loaders un darbs ar atmiņu

super, sanāca.
varētu pat ielikt šo te savu slidšova kodu, kurš mc konteinerī tweeno bildes, ja kādam interesē

p.s.
no kurienes šis izlīda? currentTarget - es gan viņu neizmantoju.
p.p.s
e.currentTarget.contentLoaderInfo.removeEventListener(Event.COMPLETE,BildeIeladejas);

remove listeners ir vēlams vai obligāts?

Re: loaders un darbs ar atmiņu

izlīda laukā kkāds jocīgs gļuks, plēšu matus jau visu dienu

 
// import tweener
import caurina.transitions.Tweener;

// delay between slides
const TIMER_DELAY:int = 1000;
// fade time between slides
const FADE_TIME:int =    2;
var imagePath:String = "images/";
var intSlideCount:int = 5;
// reference to the current slider container
var currentContainer:Sprite;
// index of the current slide
var intCurrentSlide:int = 0;

var slideTimer:Timer;
// slides holder
var sprContainer1:Sprite;
var sprContainer2:Sprite;
// slides loader
var slideLoader:Loader;
// url to slideshow xml

var imgFile:Array = new Array(intSlideCount);


function init():void {
    // create new timer with delay from constant
    slideTimer = new Timer(TIMER_DELAY);
    // add event listener for timer event
    slideTimer.addEventListener(TimerEvent.TIMER, switchSlide);
    
    // 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;
    switchSlide(null);
}
    

function fadeSlideIn(e:Event):void {
    currentContainer.addChild(imgFile[intCurrentSlide].content);
    trace(currentContainer.getChildAt(0).name);
    Tweener.addTween(currentContainer, {alpha:1, time:FADE_TIME, transition:"easeInOutCubic", onComplete:function() { slideTimer.start(); } });
}

function switchSlide(e:Event):void {
    // check, if the timer is running (needed for the
    // very first switch of the slide)
    if(slideTimer.running)
        slideTimer.stop();
    
    // check if we have any slides left and increment
    // current slide index
    if(intCurrentSlide  < intSlideCount)
        intCurrentSlide++;
    // if not, start slideshow from beginning
    else
        intCurrentSlide = 1;
    
    // 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) {
        trace (" currentContainer = sprContainer1");
        currentContainer = sprContainer1;
    }else{
        trace (" currentContainer = sprContainer2;");
        currentContainer = sprContainer2;
    }
    // hide the old slide
        currentContainer.alpha = 0;
    // bring the old slide to the front
    mcSlideHolder.swapChildren(sprContainer1, sprContainer2);
    
    if (imgFile[intCurrentSlide] == null) {
        trace ("ieladejam " + intCurrentSlide);
        // create a new loader for the slide
        imgFile[intCurrentSlide] = new Loader();
        imgFile[intCurrentSlide].contentLoaderInfo.addEventListener(Event.COMPLETE,fadeSlideIn);
        imgFile[intCurrentSlide].load(new URLRequest(imagePath+intCurrentSlide+".jpg" ));
    } else {
        trace ("izmantojam " + intCurrentSlide);
        fadeSlideIn(null);
    }
    
}


// init slideshow
init();

treisings dod:
currentContainer = sprContainer1
ieladejam 1
instance14
currentContainer = sprContainer2;
ieladejam 2
instance24
currentContainer = sprContainer1
ieladejam 3
instance14
currentContainer = sprContainer2;
ieladejam 4
instance24
currentContainer = sprContainer1
ieladejam 5
instance14
currentContainer = sprContainer2;
izmantojam 1
instance24
currentContainer = sprContainer1
izmantojam 2
instance30                     <----  lūk šajā brīdī flašā uz mirkli pavīd vecais konteiners (3.jpg bilde)
currentContainer = sprContainer2;
izmantojam 3
instance38
currentContainer = sprContainer1
izmantojam 4
instance44
currentContainer = sprContainer2;
izmantojam 5
instance14   <---- un šajā brīdī arī
currentContainer = sprContainer1
izmantojam 1
instance24

Re: loaders un darbs ar atmiņu

atrisinājās ar šo pasākumu: http://www.flash.lv/community/post/12694/#p12694