2015-04-16 11 views
1

Мне нужно превратить некоторые картины в анимированную флеш-SWF/игру (ы), а кто-то другой превратит ее в приложение.Нужно выгрузить внешний swf из Array..cs4 as3

У меня есть анимация открытия - это приводит к меню, где вы можете выделить несколько вещей - но сейчас анимация просто воспроизводится в рамке, где пользователь выбрал Игры.

Я сделал игровое меню - при выборе игр - кнопка загружает определенную игру в пустой MC (Called emptymc - имя экземпляра emptymc_MC)

Игра загружает и охватывает весь экран, кроме панели меню на верхнем слое, которая всегда находится под ней в приложении. Я еще не сделал эти варианты - но это, скорее всего, будет звуковым переключением - посетите веб-сайт - купите полное приложение.

В идеале я хотел бы, чтобы это закончилось до последнего кадра, а затем выгрузили или удалили себя. Между тем, SWF раскрывается под ним. Моя проблема в том, что я не могу избавиться от импортированного SWF, даже когда загружаю новую версию в загрузчик.

stop(); 

bee.addEventListener(MouseEvent.CLICK, Click); 
function Click(event:MouseEvent):void { 
    gotoAndPlay(currentFrame+1); 
} 

bee.addEventListener(MouseEvent.CLICK,f); 
function f(e:Event):void{ 
var movieArray:Array = ["howmanybees1", "howmanybees2", "howmanybees3",]; 
var loader:Loader = new Loader(); 
var index:int = movieArray.length * Math.random(); 
var url:String = movieArray[index] + '.swf'; 
trace("Attempting to load", url); 
loader.load(new URLRequest(url)); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loaderComplete); 
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loaderIOError); 
addChild(loader); 

function loaderComplete(e:Event):void {  
    trace("Successfully loaded", url); 
    } function loaderIOError(e:IOErrorEvent):void {  
    trace("Failed to load", url);  
} 
    } 

** EDIT **

Вот мой текущий исходный код:

stop(); 


    bee.addEventListener(MouseEvent.CLICK, Click); 

    function Click(event: MouseEvent): void { 
     gotoAndPlay(currentFrame + 1); 
    } 


    bee.addEventListener(MouseEvent.CLICK, f); 

    function f(e: Event): void { 
     var movieArray: Array = ["howmanybees1", "howmanybees2", "howmanybees3", "howmanybees4", "howmanybees5", ]; 
     var loader: Loader = new Loader(); 
     var index: int = movieArray.length * Math.random(); 
     var url: String = movieArray[index] + '.swf'; 
     trace("Attempting to load", url); 
     loader.load(new URLRequest(url)); 
     loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplete); 
     loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loaderIOError); 
     stage.addEventListener("UnloadGame", unloadGame); 
     addChild(loader); 


     function loaderComplete(e: Event): void { 
      trace("Successfully loaded", url); 
     } 

     function loaderIOError(e: IOErrorEvent): void { 
      trace("Failed to load", url); 
     } 

     function unloadGame(e: Event): void { 
      trace("unloaded at last", url); 
      loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loaderComplete); 
      loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, loaderIOError); 
      loader.removeEventListener("UnloadGame", unloadGame); 
      removeChild(loader); 
      loader.unloadAndStop(); 
     } 
    } 
    sheepgamebtn.addEventListener(MouseEvent.CLICK, Click2); 

    function Click2(event: MouseEvent): void { 
     gotoAndPlay(currentFrame + 1); 
    } 


    sheepgamebtn.addEventListener(MouseEvent.CLICK, i); 

    function i(e: Event): void { 
     var movieArray: Array = ["sheep1"]; 
     var loader: Loader = new Loader(); 
     var index: int = movieArray.length * Math.random(); 
     var url: String = movieArray[index] + '.swf'; 
     trace("Attempting to load", url); 
     loader.load(new URLRequest(url)); 
     loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplete); 
     loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loaderIOError); 
     stage.addEventListener("UnloadGame", unloadGame); 
     addChild(loader); 

     function loaderComplete(e: Event): void { 
      trace("Successfully loaded", url); 
     } 

     function loaderIOError(e: IOErrorEvent): void { 
      trace("Failed to load", url); 
     } 

     function unloadGame(e: Event): void { 
      trace("unloaded at last", url) 
      loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loaderComplete); 
      loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, loaderIOError); 
      loader.removeEventListener("UnloadGame", unloadGame); 
      removeChild(loader); 
      loader.unloadAndStop(); 
     } 
    } 
+0

Вы сомневаетесь, много слишком многословны. Подумайте, как изменить его, просто включив минимум, необходимый для понимания вашей проблемы. Вы получите больше людей, доводя их до конца. – BadFeelingAboutThis

+0

Thankyou - Цените наконечник .. –

ответ

0

Загрузка нового SWF не влияет на ранее загруженного SWF на все (даже при использовании того же переменная). Вы должны сказать Flash, что делать.

Закончив с загруженным содержимым, вы должны сделать три вещи:

  1. Удалите его из дисплея:

    removeChild(loader); 
    
  2. Удалить любые обработчики событий, которые не слабо ссылаются:

    loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, loaderIOError); 
    
  3. Выгрузить погрузчик:

    loader.unloadAndStop(); 
    

После того, как эти вещи сделаны, вы можете использовать переменную и загружать в новое содержание.

EDIT

Вот пример того, ваш ребенок швейцарских франков вызвать выгрузку:

Внутри основной временной шкалы вашего нагруженного SWF Somewhere

function unloadGame():void { 
    if(stage) stage.dispatchEvent(new Event("UnloadGame")); 
} 

В ваш главный swf

loader.load(new URLRequest(url));    
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loaderComplete); 
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loaderIOError); 
stage.addEventListener("UnloadGame", unloadGame); 
addChild(loader); 

function unloadGame(e:Event):void { 
    loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,loaderComplete); 
    loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, loaderIOError); 
    loader.removeEventListener("UnloadGame", unloadGame); 
    removeChild(loader); 
    loader.unloadAndStop(); 
} 
+0

Это здорово, спасибо. Но как я могу сообщить Flash, что ext SWF закончен? Я думаю, что идеальная вещь была бы - если ребенок мог бы закрыть себя - все игры выйдут из экрана в конце - кажется, это аккуратный способ работать с несколькими играми/swf, которые будут использоваться. Извините, что я не понимаю - я новичок в AS3 и не использовал Flash в yesrs - –

+0

Это сильно зависит от характера загруженного swf. События - это хороший путь. Я обновлю ответ, чтобы показать вам пример. – BadFeelingAboutThis

+0

Ничего себе. Это восхитительно. Я буквально провел целый день, копируя коды с разных форумов, рубя и меняя их и пытаясь заставить их работать ... Вы приходите ... удар, прикололи его! Невероятная работа - спасибо. Меня всегда поражает, как вы, интернет-герои, всегда здесь, чтобы спасти потерянных и запутанных - интернет-ангелов ... ха-ха. Спасибо, что так много. Это также первый код, который я скопировал и вставил, который не купил ошибок на выходе. Я собираюсь дать себе некоторое время, чтобы попытаться поднять код и почему этот, в частности, работал .. :) Еще раз спасибо .. –