Jan 23 2009

AS3 Creating Custom Event Listeners

Category: ClassesHadi Tavakoli @ 8:50 pm

Maybe you have heard a lot about creating custom listeners, well, doing this is very easy in AS3 now! At least it will look simple when you figure out how! But from my personal experience, I don't think it would be a good idea on some occasions. first let's see how the custom listeners will be created using dispatchEvent Here is what I was going to do initially (I changed my mind later!). I was trying to build a class for loading external files into our movie so it will make the job easier without forcing me to deal with the Loader and URLRequest classes each time. I was hoping on creating a class where I can simply load something like this:

var myImageLoader:ImageLoader = new ImageLoader("00.jpg", this); 

so I wrote the class like below considering all the different listeners that you may want to deal with when loading an external file.


		  
		  
		  
		  
		  
		  
		

As you see, we get the input as one url which will be the address of the file to be loaded and a movieclip target where we want to place the loaded content to. I have used the good dispatchEvent event to create custom listeners with a new name so it enables me to create new listeners. and I could use the new listeners like below


		  
		  
		  
		  
		  
		  
		

Very nice and clean idea you might think, yeah? OK, I used to agree with this too, but nope, forget about it! :( let me get you to the point quickly, Your custom ProgressEvent will NOT work! I'm not sure if it's right to say this for sure, but I tested this in different ways for a thousand times, but it simply won't work and will just send it's properties, bytesTotal and bytesLoaded always zero "0"! which makes it impossible to build any preloader using your custom listener! I also tried digging in the web but I didn't manage to find any article or anything talking about this little issue. Maybe it's a possible bug in AS3 and how dispatchEvent works? I really don't know. I hope someone can give some idea about this. but anyway, in my case, I don't have time to spend more time on this! So I decided to create a function for this reason and pass parameters of whatever I wish to load into the function directly and use the listeners directly. Oh, don't take this wrong, other custom listeners will work just fine and the problem seems to be with the ProgressEvent only. so if you are not going to use the progress event, you will still be able to create your own custom listeners in a separated class. But I personally rather create a function now as it will help me out of the headache at least. if anyone has a better experience with this, please do let me know. I'm going to get back to my Box class and clean it up with an almost stand alone function for taking care of the loading process of external files. hmm, I don't feel satisfied with having to do it with a function in every class I may need something to load... but I have to do this until I find a work around the problem.  

Problem Solved!

January 25th, 2009
ok, I need to edit my post and correct the ImageLoader class we had built before. Below will be the correct class as in my last post I didn't sent the necessary information via dispatchEvent! So there's NO bug with ProgressEvent :) I was just an idiot not to fining the right answer.


		  
		  
		  
		  
		  
		  
		

The only unsolved question in my mind are bubbles and cancelable which I see them a lot of places but can't understand what they mean exactly yet. I will post an article when I did. Anyhow, I think it's a good idea now to use the ImageLoader class because soon we need to create some extended classes from this ImageLoader to load images in Bitmaps... Regards, Hadi

post updated on http://www.emstris.com/2009/02/custom-event-listener-final/

Tags: , , , , , , ,