Вы должны удалить прослушиватель событий, когда он больше не нужен, иначе вы рискуете утечки памяти.Анонимная функция может сделать это трудным, хотя вы можете сделать это с arguments.callee.
bar.addEventListener(Event.ENTER_FRAME, function(e:Event) {
var b:MovieClip = MovieClip(e.currentTarget);
if(b.currentFrame == mp.getPopularity()){
b.stop();
b.removeEventListener(e.type, arguments.callee);
// ^^ this may work to remove your anonymous listener.
}
});
Однако есть и другой способ сделать это.Часто ли mp.getPopularity () меняется?Если он не изменяется после того, как bar сказал play (), вы можете использовать addFrameScript.Просто помните, что addFrameScript индексируется 0, поэтому добавление скрипта в кадр 1 означает, что вы должны передать 0 ... поэтому, если какое-либо действие должно произойти в mp.getPopularity (), вам придется передать mp.getPopularity ()- 1.
var framescript:Function = function():void{
bar.stop();
bar.addFrameScript(bar.currentFrame-1, null);
// ^^ nulling the framescript after
// ^^ it is no longer needed.
}
bar.stop(); // Generally a good idea to call stop before calling addFrameScript
bar.addFrameScript(mp.getPopularity() - 1, framescript);
bar.gotoAndPlay(1); // or wherever it needs to start from.
Это более точное решение, но вы должны помнить о том, чтобы очистить ваш рамочный скрипт после того, как вы закончите, если вы планируете позже использовать этот же экземпляр bar с другим mpЗначение .getPopularity ().