[2 days left] What’s wrong with your cloud strategy? Learn why multicloud solutions matter with Nimble Storage.Register Now

x
?
Solved

Need some help with a nice clean load script

Posted on 2003-11-25
9
Medium Priority
?
284 Views
Last Modified: 2010-04-03
I'm afraid it's been a little while since I had to do any scripting in Flash and am looking for some advice/code for setting this up in the cleanest, most efficient way possible. Please excuse the overly detailed approach to this question.

preliminary
------------------------------------------->
Right now I have seperated my movie into 5 seperate files. The main movie really just contains a background and some text that stays consistent throughout. The other four movies are made up of one image each, and some accompaning text. I have gotten the largest of the 4 image files down to around 37k.

files:

welcome.swf ( this is the main movie with the background layer )

and the 4 image file movies:
welcomeComm.swf
welcomeData.swf
welcomeEvents.swf
welcomeOnline.swf

objective
------------------------------------------------->
I'd like to fade in welcomeComm.swf, display it for aprox. 5 seconds, fade it out and fade in welcomeData.swf and so on.

my initial approach
------------------------------------------------->

Not sure if this is the best way to do this, but I went the route of having four seperate named instances of an empty clips to load my swf into using loadMovie. ( I'm used to loading to levels instead of targets)

So frame 1 of my main movie just loads each swf into their respective clips and then sets each of their alphas to zero
Frame 2 has stop action on it and brings up the alpha on the first clip to 100 ( at this point I havent done any of the fade in/out stuff)
Frame 3 puts the alpha of the first clip back to zero and brings up the next and so on and so on. ( you get the picture - I hope)

To handle the five seconds thing, I just made a simple timer clip, aptly named 'timer' that would tell the root to go to the next frame when it got to 5.

the problem(s)
------------------------------------------------>
 - I'm still not totally convinced that what I've done so far is the most efficient approach.
 - I haven't figured out the best way to take care of the fade in/out this - whether I should do this by tweening in each individual swf, or if I could make another action clip that could change the alpha via actionscript. ( does one increase file size more than the other?)
- using my current method of basically a timed slide show :p when  I get to the end and want to start over, nothing is shown.

I'm going to put a bunch of points on this one as I'm looking for the cleanest, fastest loading, expandable ( if I want to add more image files) options.

Before anybody posts, my fla's can be downloaded here http://www.donorchoice.com/flash.zip

Thanx in advance, sorry for the ramble
Nick


0
Comment
Question by:nickleplated
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 4
9 Comments
 
LVL 1

Author Comment

by:nickleplated
ID: 9822064
Too much detail? Nobody wants to touch this one?

well I'm working on a fader clip anyway.

let me know if you have any ideas...

n
0
 
LVL 27

Expert Comment

by:negatyve
ID: 9822148
I have deleted everything from your "welcome" fla, except the dotted line and the raster text.
Used only script ending with:

sample: http://www.negatyve.com/EE/externalSwfSlide/welcome.html
source: http://www.negatyve.com/EE/externalSwfSlide/externalSwfSlide.zip

>expandable ( if I want to add more image files) options.

external swf list come from an xml file, loaded at runtime. by this time it is:

=======================================
<?xml version="1.0" encoding="UTF-8"?>
<slides>
      <item src="welcomeEvents.swf"      />
      <item src="welcomeOnline.swf"      />
      <item src="welcomeData.swf"      />
      <item src="welcomeComm.swf"      />
</slides>
========================================

to expand it, you just need to add a new item this way (no fla editing involved):

=======================================
<?xml version="1.0" encoding="UTF-8"?>
<slides>
      <item src="welcomeEvents.swf"      />
      <item src="welcomeOnline.swf"      />
      <item src="welcomeData.swf"      />
      <item src="welcomeComm.swf"      />
      <item src="new_slide_file_name.swf"      />
</slides>
========================================

Everythin is managed by this code:

stop();
SWFSlider = {path:this};
SWFSlider.init = function()
{
      this.data_xml = new XML();
      this.data_xml.ignoreWhite = true;
      this.data_xml.path = this;
      this.data_xml.onLoad = function(success)
      {
            if(success){
                  this.path.initSlide();
            } else {
                  trace("XML FILE MISSING");
            }
      };
      this.data_xml.load("slides.xml");
};
SWFSlider.initSlide = function()
{
      var nodes = this.data_xml.firstChild.childNodes;
      this.slide_array = [];
      for(var i = 0; i < nodes.length; i++){
            this.slide_array.push(nodes[i].attributes["src"]);
      }
      this.curSlide = -1;
      this.maxSlide = this.slide_array.length;
      delete this.data_xml;
      this.nextSlide();
};
SWFSlider.nextSlide = function()
{
      if(this.curSlide < this.maxSlide - 1){
            this.curSlide++;
      } else {
            this.curSlide = 0;
      }
      this.loader.removeMovieClip();
      this.loader = this.path.createEmptyMovieClip("pic_loader", 15000);
      this.loader._alpha = 0;
      this.loader.loadMovie(this.slide_array[this.curSlide]);
      clearInterval(this.intervalID);
      this.intervalID = setInterval(this, "preloadSlide", 20);
};
SWFSlider.preloadSlide = function()
{
      var car = this.loader.getBytesLoaded();
      var tot = this.loader.getBytesTotal();
      if(car >= tot && tot > 4){
            clearInterval(this.intervalID);
            this.intervalID = setInterval(this, "fadeInSlide", 20);
      }
};
SWFSlider.fadeInSlide = function()
{
      if(this.loader._alpha < 100){
            this.loader._alpha++;
      } else {
            clearInterval(this.intervalID);
            this.intervalID = setInterval(this, "stopSlide", 5000);
      }
};
SWFSlider.stopSlide = function()
{
      clearInterval(this.intervalID);
      this.intervalID = setInterval(this, "fadeOutSlide", 20);
};
SWFSlider.fadeOutSlide = function()
{
      if(this.loader._alpha > 0){
            this.loader._alpha--;
      } else {
            clearInterval(this.intervalID);
            this.nextSlide();
      }
};

SWFSlider.init();
0
 
LVL 1

Author Comment

by:nickleplated
ID: 9822229
I have to say that is absolutetly beautiful!

just playing with it now ;)

N
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
LVL 1

Author Comment

by:nickleplated
ID: 9822239
Your example works perfectly!

Is it possible to have the first image load already faded in?


Can I also ask why, when I try to put the main welcome.swf into a different page, it loads the main, but not any of the other layers?
If I just look at it from the html file that flash generates, it loads everything fine.....

wtf?

N
0
 
LVL 27

Accepted Solution

by:
negatyve earned 2000 total points
ID: 9822273
>I have to say that is absolutetly beautiful!

cheers, mate! :)

>when I try to put the main welcome.swf into a different page, it loads the main, but not any of the other layers?

ok, try to figure out this situation:

folder/welcome.html
folder/innerFolder/welcome.swf
folder/innerFolder/welcomeEvents.swf
folder/innerFolder/welcomeOnline.swf
folder/innerFolder/welcomeData.swf
folder/innerFolder/welcomeComm.swf

with welcome.swf embedded in welcome.html

when welcome.swf tries to load:

<item src="welcomeEvents.swf"     />

it cannot find it, because it uses the html page path, not the swf one. so, you should change your xml file to:

=======================================
<?xml version="1.0" encoding="UTF-8"?>
<slides>
    <item src="innerFolder/welcomeEvents.swf"     />
    <item src="innerFolder/welcomeOnline.swf"     />
    <item src="innerFolder/welcomeData.swf"     />
    <item src="innerFolder/welcomeComm.swf"     />
</slides>
========================================


>Is it possible to have the first image load already faded in?

yep. just change the old script with this one:

stop();
SWFSlider = {path:this};
SWFSlider.init = function()
{
      this.data_xml = new XML();
      this.data_xml.ignoreWhite = true;
      this.data_xml.path = this;
      this.data_xml.onLoad = function(success)
      {
            if(success){
                  this.path.initSlide();
            } else {
                  trace("XML FILE MISSING");
            }
      };
      this.data_xml.load("slides.xml");
};
SWFSlider.initSlide = function()
{
      var nodes = this.data_xml.firstChild.childNodes;
      this.slide_array = [];
      for(var i = 0; i < nodes.length; i++){
            this.slide_array.push(nodes[i].attributes["src"]);
      }
      this.curSlide = -1;
      this.maxSlide = this.slide_array.length;
      delete this.data_xml;
      this.loader = this.path.createEmptyMovieClip("pic_loader", 15000);
      this.nextSlide();
};
SWFSlider.nextSlide = function()
{
      if(this.curSlide < this.maxSlide - 1){
            this.curSlide++;
      } else {
            this.curSlide = 0;
      }
      this.loader.loadMovie(this.slide_array[this.curSlide]);
      clearInterval(this.intervalID);
      this.intervalID = setInterval(this, "preloadSlide", 20);
};
SWFSlider.preloadSlide = function()
{
      var car = this.loader.getBytesLoaded();
      var tot = this.loader.getBytesTotal();
      if(car >= tot && tot > 4){
            clearInterval(this.intervalID);
            this.intervalID = setInterval(this, "fadeInSlide", 20);
      }
};
SWFSlider.fadeInSlide = function()
{
      if(this.loader._alpha < 100){
            this.loader._alpha++;
      } else {
            clearInterval(this.intervalID);
            this.intervalID = setInterval(this, "stopSlide", 5000);
      }
};
SWFSlider.stopSlide = function()
{
      clearInterval(this.intervalID);
      this.intervalID = setInterval(this, "fadeOutSlide", 20);
};
SWFSlider.fadeOutSlide = function()
{
      if(this.loader._alpha > 0){
            this.loader._alpha--;
      } else {
            clearInterval(this.intervalID);
            this.loader.removeMovieClip();
            this.loader = this.path.createEmptyMovieClip("pic_loader", 15000);
            this.loader._alpha = 0;
            this.nextSlide();
      }
};
SWFSlider.init();
0
 
LVL 1

Author Comment

by:nickleplated
ID: 9822326
MMMMMMMM.....sooo nice.

C'Mon now...you mod'd that from something you already had done..... so nice, colour me very happy :)

I made the changes you suggested. As I also wanted to keep the xml file with the rest of the swfs, I changed the  this.data_xml.load("slides.xml"); line to reflect the 'inner folder' aswell...


working like a charm!

Cheers!
N
0
 
LVL 27

Expert Comment

by:negatyve
ID: 9822343
>I made the changes you suggested. As I also wanted to keep the xml file
>with the rest of the swfs, I changed the  this.data_xml.load("slides.xml");

that's a good mod too, well done!

>C'Mon now...you mod'd that from something you already had done

I do swear on my name that I made it now from scratches.. :)

>working like a charm!

really glad you like it!

cheers!
0
 
LVL 1

Author Comment

by:nickleplated
ID: 9822372
just looking at your site > wishing there was an english version ( or that I could read italian!)

(just got married in Positano in October > love italy very much - driving in italy is one of my new favourite things!)

Thanx again,
N
0
 
LVL 27

Expert Comment

by:negatyve
ID: 9824258
>just got married in Positano in October > love italy very much -

congratulations!! :)

>driving in italy is one of my new favourite things!)

ahhaha, you definetely like danger!! :)
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I know the transition can be hard. We got used to the ease of use ActionScript 2 had, but honestly, it became problematic later on, especially if designers were involved in the project and found it easy to add code as they saw fit. So, this artic…
While working over numerous projects I often had the requirement for doing a screen capture in AS3.0. Unfortunately I found no "ready made" solutions in google search that suited my requirements. But I did come across some great resources which help…
The goal of the tutorial is to teach the user how to live broadcast using Flash Media Live Encoder and connecting it to YouTube to broadcast. Log into your Youtube account, choose live stream settings, start live stream from Flash Media Live Enc…
The goal of the tutorial is to teach the user how to set there setting in Adobe Flash Media Live Encoder and YouTube for optimal video and audio quality.
Suggested Courses

656 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question