7/24/2011 6:52:05 AM
Title:
How to add a TextField to a loader in Flash AS3 ?
Hi all ,
I have a loader that is loading thumbs using an xml file.This loader is being added to a movieclip called container_mc.The problem is that i want to add a textfield to be like a caption on every thumb.So iam adding it to the container_mc,but it is generating an error to me when calling this:
container_mc.addEventListener(MouseEvent.MOUSE_OVER, onOver);
function onOver(e:MouseEvent):void {
var my_thumb:Loader=Loader(e.target);
my_thumb.alpha=0.5;
}
and the error is that i cannot convert textfield to loader .So how can i solve this ?
this is my complete code :
import fl.controls.ProgressBar;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
var full_caption:TextField ;
var fullcontainer:MovieClip;
fullcontainer=new MovieClip();
fullcontainer.x=0;
fullcontainer.y=0;
var passedUpperLimit:Boolean=false;
var prevX:int=0;
var dirX:String="";
var speed:Number;
var padding:Number = 20;
function GetHorizontalDirection():String {
prevX=curX;
curX=stage.mouseX;
if (prevX>curX) {
dirX="left";
} else if (prevX < curX) {
dirX="right";
} else {
dirX="none";
}
return dirX;
}
var curX:int=0;
stage.addChild(fullcontainer);
var columns:Number;
var my_x:Number;
var my_y:Number;
var my_thumb_width:Number;
var my_thumb_height:Number;
var my_images:XMLList;
var my_total:Number;
var container_mc:MovieClip;
var preloaders_mc:MovieClip;
var full_mc:MovieClip;
var y_counter:Number=0;
var x_counter:Number=0;
var my_tweens:Array=[];
var container_mc_tween:Tween;
var full_tween:Tween;
var myXMLLoader:URLLoader = new URLLoader();
myXMLLoader.load(new URLRequest("gallery.xml"));
myXMLLoader.addEventListener(Event.COMPLETE, processXML);
function processXML(e:Event):void {
var myXML:XML=new XML(e.target.data);
columns=myXML.@COLUMNS;
my_x=myXML.@XPOSITION;
my_y=myXML.@YPOSITION;
my_thumb_width=myXML.@WIDTH;
my_thumb_height=myXML.@HEIGHT;
my_images=myXML.IMAGE;
my_total=my_images.length();
createContainer();
callThumbs();
myXMLLoader.removeEventListener(Event.COMPLETE, processXML);
myXMLLoader=null;
}
function createContainer():void {
container_mc = new MovieClip();
container_mc.x=my_x;
container_mc.y=my_y;
addChild(container_mc);
//var myColor:ColorTransform = fullcontainer.transform.colorTransform;
//myColor.color = 0xFF0000;
//container_mc.transform.colorTransform = myColor;
//container_mc.transform.colorTransform = myColor;
container_mc.addEventListener(MouseEvent.CLICK, callFull);
container_mc.addEventListener(MouseEvent.MOUSE_OVER, onOver);
container_mc.addEventListener(MouseEvent.MOUSE_OUT, onOut);
container_mc.buttonMode=true;
preloaders_mc = new MovieClip();
preloaders_mc.x=container_mc.x;
preloaders_mc.y=container_mc.y;
addChild(preloaders_mc);
}
function callThumbs():void {
for (var i:Number = 0; i < my_total; i++) {
var thumb_url=my_images[i].@THUMB;
var thumb_loader = new Loader();
thumb_loader.load(new URLRequest(thumb_url));
thumb_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, thumbLoaded);
thumb_loader.name=i;
thumb_loader.y = (my_thumb_width+10)*y_counter;
thumb_loader.x = (my_thumb_height+10)*x_counter;
if (y_counter+1<columns) {
y_counter++;
} else {
y_counter=0;
x_counter++;
}
var preloader_pb:ProgressBar = new ProgressBar();
preloader_pb.source=thumb_loader.contentLoaderInfo;
preloader_pb.x=thumb_loader.x;
preloader_pb.y=thumb_loader.y;
preloader_pb.width=my_thumb_width;
preloader_pb.height=my_thumb_height;
preloaders_mc.addChild(preloader_pb);
preloader_pb.addEventListener(Event.COMPLETE, donePb);
}
}
function thumbLoaded(e:Event):void {
var my_thumb:Loader=Loader(e.target.loader);
container_mc.addChild(my_thumb);
full_caption=new TextField();
full_caption.text="hello";
container_mc.addChild(full_caption);
fullcontainer.addChild(container_mc);
//fullcontainer.addEventListener(MouseEvent.MOUSE_MOVE,MoveGalleryLeft);
fullcontainer.addEventListener(Event.ENTER_FRAME, movefullcontainerThumbs);
my_tweens[Number(my_thumb.name)]=new Tween(my_thumb,"alpha",Strong.easeIn,0,1,0.5,true);
my_thumb.contentLoaderInfo.removeEventListener(Event.COMPLETE, thumbLoaded);
}
function callFull(e:MouseEvent):void {
var full_loader:Loader = new Loader();
var full_url=my_images[e.target.name].@FULL;
full_loader.load(new URLRequest(full_url));
full_loader.contentLoaderInfo.addEventListener(Event.INIT, fullLoaded);
var full_pb:ProgressBar = new ProgressBar();
full_pb.source=full_loader.contentLoaderInfo;
full_pb.x = (stage.stageWidth - full_pb.width)/2;
full_pb.y = (stage.stageHeight - full_pb.height)/2;
preloaders_mc.addChild(full_pb);
full_pb.addEventListener(Event.COMPLETE, donePb);
container_mc.removeEventListener(MouseEvent.CLICK, callFull);
container_mc.buttonMode=false;
container_mc.removeEventListener(MouseEvent.MOUSE_OVER, onOver);
container_mc.removeEventListener(MouseEvent.MOUSE_OUT, onOut);
container_mc_tween=new Tween(container_mc,"alpha",Strong.easeIn,1,0.5,0.5,true);
// full_caption.text = my_images[e.target.name].@CAPTION;
}
function fullLoaded(e:Event):void {
full_mc = new MovieClip();
full_mc.buttonMode=true;
addChild(full_mc);
var my_loader:Loader=Loader(e.target.loader);
full_mc.addChild(my_loader);
full_tween=new Tween(my_loader,"alpha",Strong.easeIn,0,1,0.5,true);
my_loader.x = (stage.stageWidth - my_loader.width)/2;
my_loader.y = (stage.stageHeight - my_loader.height)/2;
my_loader.addEventListener(MouseEvent.CLICK,removeFull);
my_loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, fullLoaded);
}
function removeFull(e:MouseEvent):void {
var my_loader:Loader=Loader(e.currentTarget);
full_tween=new Tween(my_loader,"alpha",Strong.easeOut,1,0,0.5,true);
full_tween.addEventListener(TweenEvent.MOTION_FINISH, tweenFinished);
container_mc_tween=new Tween(container_mc,"alpha",Strong.easeOut,0.5,1,0.5,true);
}
function donePb(e:Event):void {
var my_pb:ProgressBar=ProgressBar(e.target);
preloaders_mc.removeChild(my_pb);
my_pb.removeEventListener(Event.COMPLETE, donePb);
}
function tweenFinished(e:TweenEvent):void {
var my_loader:Loader=Loader(e.target.obj);
my_loader.unload();
full_mc.removeChild(my_loader);// This line was removeChid(my_loader), just add full_mc before it.
removeChild(full_mc);
full_mc=null;
container_mc.addEventListener(MouseEvent.CLICK, callFull);
container_mc.buttonMode=true;
container_mc.addEventListener(MouseEvent.MOUSE_OVER, onOver);
container_mc.addEventListener(MouseEvent.MOUSE_OUT, onOut);
var my_tween:Tween=Tween(e.target);
my_tween.removeEventListener(TweenEvent.MOTION_FINISH, tweenFinished);
}
function onOver(e:MouseEvent):void {
var my_thumb:Loader=Loader(e.target);
my_thumb.alpha=0.5;
}
function onOut(e:MouseEvent):void {
var my_thumb:Loader=Loader(e.target);
my_thumb.alpha=1;
}
//function MoveGalleryLeft(e:MouseEvent) {
//
//
// var xDirection:String=GetHorizontalDirection();
// var startDragPosition=((my_thumb_width*5)+40);
// var horizantalThumbs=(my_thumb_width)*(Math.floor(my_total/columns)-1);
// var space=10*(Math.floor(my_total/columns)-1);
// var upperLimit=(horizantalThumbs+space);
//
// if ((fullcontainer.mouseX)>upperLimit) {
// passedUpperLimit=true;
// //trace('ok');
//// trace(fullcontainer.mouseX);
//// trace(upperLimit);
//// fullcontainer.removeEventListener(MouseEvent.MOUSE_MOVE,MoveGalleryLeft);
//
// }
//
//
// if ((fullcontainer.mouseX>startDragPosition&&fullcontainer.mouseX<=upperLimit)&&passedUpperLimit==false&&xDirection=='right') {
//
// fullcontainer.x-=10;
//
// }
// var downlimit=fullcontainer.x;
// if(xDirection=='left'&&fullcontainer.mouseX>fullcontainer.x&&mouseX<=(stage.stageWidth/2)-600)
// {
//
// fullcontainer.x+=10;
// }
//
//}
function movefullcontainerThumbs(event:Event):void
{
if ( mouseY > fullcontainer.y && mouseY < fullcontainer.y + fullcontainer.height)
{//vertically over fullcontainer
if (mouseX < stage.stageWidth / 2 - padding * 2 && mouseX > 0)
{//left of stage explicitly
speed = -(mouseX - (stage.stageWidth / 2 - padding * 2)) / 8;
}
else if (mouseX > stage.stageWidth / 2 + padding * 2 && mouseX < stage.stageWidth)
{//right of stage explicitly
speed = -(mouseX - (stage.stageWidth / 2 + padding * 2)) / 8;
}
else
{
speed = 0;
}
fullcontainer.x += speed;
//fullcontainer limits
if (fullcontainer.x < - fullcontainer.width + stage.stageWidth - padding)
{//if scrolled too far left
fullcontainer.x = - fullcontainer.width + stage.stageWidth - padding;
}
else if (fullcontainer.x > padding)
{//if scrolled to far right
fullcontainer.x = padding;
}
}
}
Rayan
Points: 700
Posts:0
7/24/2011 7:16:46 AM
try the following code and it should work. I have added another movie in the container movie so that loader does not replace its root.
function thumbLoaded(e:Event):void {
var my_thumb:Loader=Loader(e.target.loader);
//new code this will add another movie for loader
var loader_mc:MovieClip = new MovieClip();
container_mc.addChild(loader_mc);
loader_mc.addChild(my_thumb);
//
full_caption=new TextField();
full_caption.text="hello";
container_mc.addChild(full_caption);
fullcontainer.addChild(container_mc);
7/24/2011 10:02:56 AM
Thanks Rayan but it is still generating the same error.