2013-03-12 2 views
0

Мой основной класс добавлен в этап моей .fla, и я хочу удалить и повторно добавить/«перезапустить» класс, когда он завершит анимацию. Все мои анимации происходят в Main и добавляются в дерево отображения внутри Main. Как я могу запустить функцию finishNow() из Main.as?Как вызвать функцию внутри .FLA из класса AS

.fla файл:

var run:Main = new Main(this); 
stage.addChild(run); 

function finishNow() { 
    stage.removeChild(run); 
    var run:Main = new Main(this); 
    stage.addChild(run); 
} 

Main.as файл:

var stageHolder:Object; 

public function Main(stageHolderTemp) { 
     stageHolder = stageHolderTemp; 
     trace(stageHolder); 
} 

function callFinishFunction():void { 
    // how to call finishNow() function from .fla file here 
} 

EDIT: Разработка программы изменилась. Все еще пытаюсь сделать то же самое (вызов функции finishNow(), но теперь он находится в Program.as). Все работает нормально, за исключением ошибки для program.finishNow();:

ТипError: Ошибка # 1009: Невозможно получить доступ к свойству или методу ссылки на нулевой объект.

Файл .fla:

Теперь не содержит никакого кода. Он связан с Program.as.

Program.as файл:

package { 

    import flash.display.MovieClip; 

    public class Program extends MovieClip { 


     public function Program() { 

      startNow(); 
     } 

     function startNow() { 
      var run:Main = new Main(this); 
      addChild(run); 
     } 

     function finishNow() { 
      removeChild(run); 
      var run:Main = new Main(this); 
      addChild(run); 
     } 

    } 

} 

Main.as Файл:

package { 

    import flash.display.Sprite; 

    public class Main extends Sprite 
    { 

     var stageHolder:Object; 
     public var program:Program; 

     public function Main(stageHolderTemp) { 
      stageHolder = stageHolderTemp; 
      trace(stageHolder); 

      someFunctionsThatDrawGraphics(); 
     } 

     function callFinishFunction():void { 
      // how to call finishNow() function from Program.as file here? 
      program.finishNow(); 
     } 

    } 
} 

ответ

0

Если ваш .fla связан Main.as файл, вы можете прямо называется. попробуйте это:

public function Main() { 
     finishNow(); 
} 

enter image description here

.fla код

function testFunction() 
{ 
    trace("111"); 
} 

.as файл

package { 

    import flash.display.MovieClip; 


    public class Main extends MovieClip { 


     public function Main() { 

      testFunction(); 
     } 
    } 

} 
+0

Когда я попробуйте вызвать 'finishNow();'/'testFunction();' он приходит с ошибкой 1180: вызов возможно неопределенного встреченного hod addFrameScript. Мой основной AS-класс уже расширяет Sprite, поэтому он не может продлить MovieClip (нужно ли это для вызова функции?) – ArrayOutOfBounds

+0

вы должны знать разные спрайты и MovieClip. sprite не имеет фреймворка. В отличие от объекта Sprite, объект MovieClip имеет временную шкалу. поэтому, если вы хотите вызвать функцию в.fla должен расширить MovieClip. –

+0

Хорошо, я изменил Sprite на MovieClip, но он дает ArgumentError: Ошибка # 1063: несоответствие счетчика аргументов на Main(). Ожидаемое 1, получено 0. Анимации, которые тянулись в Main, больше не появляются. – ArrayOutOfBounds

0

Вы можете вызвать addframeScript вызвать функцию FLA.

0

На самом деле, не нужно создавать объект класса каждый раз. Этого будет достаточно для вызова функции в этом классе каждый раз.

Но ваш вопрос .. Попробуйте это ....

your Document Class

В program.as

var run:Main = new Main(this); 
    run.addEventListener("FINISH",finishNow); 
    addChild(run); 
    function finishNow(e:Event) 
    { 
    } 

В Main.as,

function callFinishFunction():void 
{ 
    dispatchEvent(new Event("FINISH")); 
}