2014-01-07 2 views
0

Итак, у меня есть код, подобный этому (это для демонстрационных целей):Как запустить код внутри функции события для прослушивателя ENTER_FRAME, который не запускается после каждого кадра?

addEventListener(Event.ENTER_FRAME, enterFrameFunction); 

    function enterFrameFunction(e:Event):void{ 

    if(sampleMovieClip1.hitTestObject(sampleMovieClip2)){ 
    runAFunctionIDontWantToBeRunOnEveryFrame(); 
    } 

    } 

Проблема заключается в том, что для того, чтобы проверить погоду sampleMovieClip2 будет сталкиваясь с sampleMovieClip1, мне нужно, чтобы проверить его каждый кадр с enterFrameFunction, поэтому любой код, который я помещал внутри этой функции, запускает каждый кадр, тест возвращает true, но мне нужен runAFunctionIDontWantToBeRunOnEveryFrame(); чтобы запустить его только один раз.

Мне удалось это сделать, добавив переменную, чтобы определить, было ли условие истинным раньше, но у меня возникают осложнения с этим сейчас, и мне хотелось бы знать, есть ли другой, менее утомительный способ получения результата , Что-то вроде прослушивателя событий для проверки логического возвращения true?

ответ

0

Как только произойдет сбой, вы должны удалить прослушиватель событий.

removeEventListener(Event.ENTER_FRAME, enterFrameFunction); 

В противном случае ваш только другое решение будет

addEventListener(Event.ENTER_FRAME, enterFrameFunction); 

    function enterFrameFunction(e:Event):void{ 

    if(sampleMovieClip1.hitTestObject(sampleMovieClip2)&&!alreadyHit){ 
     alreadyHit=true; 
     runAFunctionIDontWantToBeRunOnEveryFrame(); 
    } else { 
     alreadyHit=false; 
    } 
    } 

Это есть проблема незаходимого его обратно к ложному, нон-стоп, когда он не попал, но что делать с проблемой?

+0

Это хорошее решение, но на самом деле это не помогает мне в моем контексте (по-прежнему полезно мне вообще). Мне нужно проверить каждый кадр, если 2 мувиклипа касаются, а затем запустить функцию. Будет несколько случаев, когда они не касаются и касаются (в зависимости от игрока игры), поэтому мне нужно держать слушателя событий в такте. – user3168412

0

только метод поместить вне обработчика для слушателя событий:

это будет вызывать второй метод на каждом кадре, где оператор IF возвращает истину , если вы хотите, чтобы позвонить один раз использовать этот пример, где его разрешено только один раз ... если вы хотите, чтобы он снова запускался, измените allowMethodCall на true;

var allowMethodCall:Boolean = true; 
addEventListener(Event.ENTER_FRAME, enterFrameFunction); 

/** method runs on enter frame */ 
function enterFrameFunction(e:Event):void{ 
    if(sampleMovieClip1.hitTestObject(sampleMovieClip2)){ 
     if (allowMehodCall) { 
      runAFunctionIDontWantToBeRunOnEveryFrame(); 
     } 
    } 
} 

/** method runs only when called once */ 
function runAFunctionIDontWantToBeRunOnEveryFrame():void{ 
    //this runs only once when called 
} 
Смежные вопросы