?
Solved

Load PNG into Flash Library for ActionScript

Posted on 2009-05-12
6
Medium Priority
?
1,413 Views
Last Modified: 2013-11-11
Is there a way to load an external PNG file into the Flash library at runtime and then add an identifier to it dynamically so that I could attach the image to various movie clips?  I don't want to loadMovie('file.png',mc) over and over again.  I'd like to just load the PNG file once, give it a reference name, and then use the name to attach the image to numerous movie clips.

I'D LIKE TO LOAD THE PNG FILE ONCE:::

var logo_loader = new MovieClipLoader();
var logoListener:Object = new Object();
logo_loader.addListener(logoListener);
logoListener.onLoadInit = function(target:MovieClip) {target.forceSmoothing = true;}
logo_loader.loadClip( source_url, [some movie clip that I can reference later]  );

AND THEN USE THE LOADED PNG LIKE THIS::

for (i=0; i<10; i++) {
      logo = story_holder.attachMovie('[ movie clip with loaded PNG]','my_png_button',i);
      logo._x = 10;
      logo._y = 5;
}

I'm trying to avoid loading and re-loading the same PNG when it only needs to be loaded once and then referenced.  I'm more familiar with loading PNG assets that are already in the library at runtime, but in this case I need to load the PNG and then attach the reference name when the swf first loads.

Can this be done?
0
Comment
Question by:marcparillo
[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
6 Comments
 
LVL 39

Expert Comment

by:blue-genie
ID: 24372003
I don't think this is possible. what you can do is load it at runtime off stage and access it that way.
0
 
LVL 3

Author Comment

by:marcparillo
ID: 24373266
So, I would load the PNG into a movie clip off stage and then attach that off-stage movie clip containing the PNG to any other movie clip?
0
 
LVL 39

Accepted Solution

by:
blue-genie earned 800 total points
ID: 24375330
yeah you could do that by referencing the movieclip it's loaded into.
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 37

Assisted Solution

by:CyanBlue
CyanBlue earned 400 total points
ID: 24375474
I don't think you can duplicate the movieClip that contains the loaded image...  It'll need to be reloaded everytime you need it...  Glad to be proven wrong...  I'd love to have that feature...

CyanBlue
0
 
LVL 22

Assisted Solution

by:rascalpants
rascalpants earned 800 total points
ID: 24378121
I believe duplicateMovieClip() is what you are looking for in AS 2.0  

for AS 3.0, you can use Senocular's DupilcateDisplayObject class...

http://www.senocular.com/flash/actionscript.php?file=ActionScript_3.0/com/senocular/display/duplicateDisplayObject.as


or you could create a Singleton Class that loads the PNG, and then you call a method in the Singleton class that gets the Movieclip reference, and then you use addChild to push it to the display stack of the individual Movieclip that needs the PNG.


that sounded overly complex, but it really isn't.


more specifics would help...


rp / ZA
0
 
LVL 22

Expert Comment

by:rascalpants
ID: 24379588
also, if you are allowed to take the PNG and turn it into a SWF, then you could use the below code to make it work for you...

Lets say the PNG is loaded into a movieclip and the export for Actionscript is checked... the example assumes you named it "TheLogo"

then you load in the SWF with the normal Loader class, and then you use the applicationDomain by referencing the class name you gave it in the external SWF...  in this case "TheLogo".

then you can create a new instance of that class...  

FYI... this is all AS3.


rp / ZA


import flash.display.Loader;
import flash.system.ApplicationDomain;
 
var logoURL:String = "TheLogo.swf";
var total:int = 10;
 
var logoLoader = new Loader();
logoLoader.load( new URLRequest( logoURL ) );
 
logoLoader.contentLoaderInfo.addEventListener(Event.INIT, logoLoader_OnInit, false, 0, true);
 
function logoLoader_OnInit( evt:Event ):void
{
	logoLoader.contentLoaderInfo.removeEventListener(Event.INIT, logoLoader_OnInit);
	
	// "TheLogo" is the class name given in the library properties panel
	var logo:Class = evt.target.applicationDomain.getDefinition("TheLogo");
 
	for( var i:int = 0; i < total; ++i )
	{
		var tempL:DisplayObject = new logo();
		
		tempL.x = Math.ceil( Math.random() * 400 );
		tempL.y = Math.ceil( Math.random() * 400 );
		
		this.addChild( tempL );
	}
}

Open in new window

0

Featured Post

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.

Question has a verified solution.

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

This article describes a solution to a problem of subloading one movie into another when they have different SWF versions. Sometime back, I was working on an ActionScript project while I came across an interesting fact which I would like to share…
In my long career of working as an actionscript developer, I had spent sleepless night often working hard to solve some small problems which actually took a lot of my development time; later found out the solutions to be a line or two. Here are s…
The goal of the tutorial is to teach the user how to how to record live broadcast.
The goal of the tutorial is to teach the user how to select the video input device. Make sure you have an input device that in connected and work and recognized by Adobe Flash Media Live Encoder and select it in the “video input” menu.
Suggested Courses

719 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