Ошибка воспроизведения кадра в третий раз

У меня есть флеш-файл, где первый кадр содержит две кнопки, одна из которых переводит пользователя на второй кадр, а другая — на третий кадр. В каждом из этих фреймов с помощью SimpleButtons можно управлять различными текстовыми полями и переменными. И у кадра 2, и у кадра 3 есть кнопки «назад», чтобы вернуться к кадру 1.

В настоящее время, когда пользователь возвращается к кадру 1 во второй раз (таким образом, воспроизводя его в третий раз), кажется, что моя вторая кнопка больше не существует, и я получаю сообщение об ошибке. Обе кнопки на кадре 1 были размещены через Flash IDE. Почему моя кнопка исчезает, хотя предыдущие два раза она работала нормально? Ниже приведен мой код для кадра 1. Кнопки «назад» просто удаляют прослушиватели событий, а затем вызывают gotoAndStop(1)

var inited:Boolean;
var cache:SharedObject;
var libsans:Font = new libsansreg();

this.addEventListener(Event.ENTER_FRAME, frameEnter);
stats.addEventListener(MouseEvent.CLICK, statsclicked);
modules.addEventListener(MouseEvent.CLICK, modsclicked);

function initcache():void
{
    this.cache = SharedObject.getLocal("RPG_Shooter")
}

function frameEnter(e:Event):void
{
    if (!inited)
    {
        inited = true
        initcache()
        this.gotoAndStop(1)
    }
}

function statsclicked(e:MouseEvent):void
{
    this.removeEventListener(Event.ENTER_FRAME, frameEnter)
    stats.removeEventListener(MouseEvent.CLICK, statsclicked)
    modules.removeEventListener(MouseEvent.CLICK, modsclicked)
    this.gotoAndStop(2)
}

function modsclicked(e:MouseEvent):void
{
    this.removeEventListener(Event.ENTER_FRAME, frameEnter)
    stats.removeEventListener(MouseEvent.CLICK, statsclicked)
    modules.removeEventListener(MouseEvent.CLICK, modsclicked)
    this.gotoAndStop(3)
}

person mayhew    schedule 30.06.2011    source источник


Ответы (1)


У меня действительно была похожая проблема в какой-то момент. Это связано со сборкой мусора, которая с самого начала не самая лучшая во Flash, но настройки компилятора IDE делают ее намного более безумной. Есть несколько трюков, которые вы можете попробовать, и они могут вам помочь.

  • Убедитесь, что вы удалили всех слушателей, прежде чем покинуть кадр.
  • Перейдите к «пустому» кадру (что-то, что все еще имеет фон и стиль, но не имеет интерактивных компонентов) даже на 5/1000 секунды.
  • Установите для имен переменных значение «null» в первом кадре (поэтому, если ваш компонент в кадре 3 называется «foo», поместите foo = null в первый кадр)
  • поместите var foo:MovieClip в кадр 1. повторите для всех мувиклипов, которые вы можете использовать, которые названы заранее.
person cwallenpoole    schedule 30.06.2011