Question

i've a 3d carousel script..when one of the instance is clicked, it will load an external swf(with close_btn in it) as its content..it worked all fine...the problem is how do i remove the externally loaded swf with the close_btn...this is my code in my main timeline :

var centerX:Number = stage.stageWidth / 2;
var centerY:Number = stage.stageHeight / 2;
var radiusX:Number = 180;
var radiusY:Number = 50;
var speed:Number = 0.1;
var minSpeed:Number = -0.15;
var maxSpeed:Number = 0.15;
var rangeSpeed:Number = maxSpeed - minSpeed;
var minY:Number = centerY - radiusY;
var maxY:Number = centerY + radiusY;
var rangeY:Number = maxY - minY;
var minScale:Number = 0.5;
var maxScale:Number = 1.2;
var rangeScale:Number = maxScale - minScale;
var my_loader:Loader = new Loader();
var itemArray:Array =[perkhidmatan, misi, tentang, members];
var fileNames : Array = ["perkhidmatan.swf", "misi.swf", "tentang.swf","members.swf",];


var canvas:MovieClip = new MovieClip();
addChild(canvas);

for (var i:Number = 0; i < itemArray.length; i++)
{
canvas.addChild(itemArray[i]);
itemArray[i].buttonMode = true;
itemArray[i].addEventListener(MouseEvent.CLICK, goToURL);
itemArray[i].itemAngle = Math.PI * 2 / itemArray.length * i;
itemArray[i].addEventListener(Event.ENTER_FRAME, animate);
}

function goToURL(e:MouseEvent):void {
for (var i:int = 0; i < itemArray.length; i++) {
if (e.currentTarget == itemArray[i]) {
    my_loader.load(new URLRequest(fileNames[i]));
    trace(fileNames[i]);
    trace(my_loader);
    addChild(my_loader);
    itemArray[i].mouseEnabled = false;
    itemArray[i].alpha = 0.5;
} else {
    itemArray[i].mouseEnabled = true;
    itemArray[i].alpha = 1;
}
}
}

function animate(e:Event):void
{
speed = mouseX / stage.stageWidth * rangeSpeed + minSpeed;
e.currentTarget.x = Math.cos(e.currentTarget.itemAngle) * radiusX + centerX;
e.currentTarget.y = Math.sin(e.currentTarget.itemAngle) * radiusY + centerY;
e.currentTarget.itemAngle += speed;
itemArray.sortOn("y");




for(var i:Number = 0; i < itemArray.length; i++)
{
canvas.setChildIndex(itemArray[i], i);
var pct:Number = (itemArray[i].y - minY) / rangeY;
var scale:Number = pct * rangeScale + minScale;
itemArray[i].scaleX = itemArray[i].scaleY = scale;
}
}
Was it helpful?

Solution

Ok it sounds like you want to add a click listener to a display object inside the loaded swf that when clicked will remove the loaded swf from the stage.

So here's what I would do:

function goToURL(e:MouseEvent):void {
    for (var i:int = 0; i < itemArray.length; i++) {
        if (e.currentTarget == itemArray[i]) {
            my_loader.contentLoaderInfo.addEventListener( Event.COMPLETE. onLoaderComplete );
            my_loader.load(new URLRequest(fileNames[i]));
            trace(fileNames[i]);
            trace(my_loader);
            //addChild(my_loader); //do not add the loader to this display object
            itemArray[i].mouseEnabled = false;
            itemArray[i].alpha = 0.5;
        } else {
            itemArray[i].mouseEnabled = true;
            itemArray[i].alpha = 1;
        }
    }
}

function onLoaderComplete( e:Event ):void {
    //set a variable called _loadedSwf as type MovieClip at the top
    _loadedSwf = e.target.content;
    _loadedSwf.close_btn.addEventListener( MouseEvent.CLICK, removeLoadedSwf );
    addChild( _loadedSwf );
}

function removeLoadedSwf( e:MouseEvent ):void {
    removeChild( _loadedSwf );
}

I haven't tested this but I believe that is what you are looking for? Either way hope this helps you out!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top