На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: PIL
  
> Error 1009 при переходе на другой кейфрэйм
    Добрый день!
    Есть несколько кейфрэймов, переход между ними организован по нажатию кнопок: нажали - gotoandPlay(n)
    При переходе с первого кадра на любой другой все хорошо, но если скажем с пятого я захочу перейти на четвертый, то переход происходит, но выдается ошибка:

    TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".

    и далее ноль реакции на любые действия.

    Как это побороть?

    З.Ы. если кнопка выполняет любое другое действие - все нормально, проблема только в переходах от фрейма к фрейму.
    Всё должно быть продумано до мельчайших деталей… если ты знаешь ход мыслей человека, сюрпризов не будет
      Наверное без проекта или диаграммы хотя бы будет сложно понять. Одно совершенно точно, кто-то теряет ссылку на объект. А вот причину в слепую наверное не установить.
        piksel, говоря проще, на 1 кадре следующий код:
        ExpandedWrap disabled
          mybut_1.addEventListener(MouseEvent.CLICK,fun1);
           
          function fun1(event:MouseEvent):void{
              gotoAndPlay(5);
          }

        работает нормально.

        На остальных кадрах тот же код вываливается с ошибкой TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".

        mybut_1 - уникальный идентификатор кнопки, присутствующей на кадре.
        Всё должно быть продумано до мельчайших деталей… если ты знаешь ход мыслей человека, сюрпризов не будет
          мда, фреймы и слушатели в одном флаконе = утечка памяти, и 1009е во все поля. В общем, после перехода с первого фрейма mybut_1 становится null, и получаешь 1009.
          Долог путь в бессмертие... я еще вернусь.
          Профильный скилл "Телепатия" 8%
          ТРОЛЛЬ - Троян Разрушительный Опасный, Лучше ЛинятЬ (с) Freezing Spell
          Прошу потестить игру.
            Vesper, понимаю, но как тогда организовать несколько меню? На ум приходит только сделать буферный мувиклип в первом фрейме и уже в нем осуществлять все переходы. Сейчас попробую, поможет ли это.

            А есть еще варианты, как это делается?
            Всё должно быть продумано до мельчайших деталей… если ты знаешь ход мыслей человека, сюрпризов не будет
              Я по жизни делаю спрайтами (класс Sprite - умеет всё, что умеет мувиклип, минус фреймы и динамические параметры). Плюс в том, что в спрайтах ты полностью контролируешь жизненный цикл объекта-самого спрайта и всего содержимого, а в мувиклипах переход на другой фрейм убивает все ссылки в предыдущем фрейме, и всё хранить придется через проперти класса. Одно меню - один спрайт. На спрайте нарисованы кнопочки (тоже спрайты), на кнопочках слушатели, если меню предполагается вызывать откуда-нибудь с нескольких мест, пишу в классе устанавливаемые callback-параметры типа Function, которые вызываются при нажатии соответствующей кнопки. Не самое оптимальное решение, но до фреймворков я ещё не дорос. Пример:
              ExpandedWrap disabled
                class SampleOkCancel extends Sprite {
                    public var okCallback:Function=null;
                    public var cancelCallback:Function=null; // или через проперти
                    // всякие там кнопки, конструктор, расстановки итд итп
                    private function okClick(e:MouseEvent):void {
                        if (this.parent) this.parent.removeChild(this); // убираем себя с экрана
                        if (okCallback) okCallback();
                    }
                    private function cancelClick(e:MouseEvent):void {
                        if (this.parent) this.parent.removeChild(this); // убираем себя с экрана
                        if (cancelCallback) cancelCallback();
                    }
                }
              Для полноты картины нужно написать постановку слабых слушателей в кнопках, чтобы можно было собрать забытое окно через GC. "okButton.addEventListener(MouseEvent.CLICK,okClick,false,0,true)"
              Долог путь в бессмертие... я еще вернусь.
              Профильный скилл "Телепатия" 8%
              ТРОЛЛЬ - Троян Разрушительный Опасный, Лучше ЛинятЬ (с) Freezing Spell
              Прошу потестить игру.
                Vesper, если делать через спрайты, то размещение всех объектов осуществляется программно? Значит к визуальному редактору прибегаем только для того, чтобы отрисовать тот или иной объект, а затем вызвать его в коде?

                Прошу прощения за нубские вопросы...
                Всё должно быть продумано до мельчайших деталей… если ты знаешь ход мыслей человека, сюрпризов не будет
                  Goshanello, нет, не обязательно программно. Я просто пишу в FlashDevelop, в ней нет гуя для размещения объектов. В принципе вместо спрайта подойдет и обычный movieclip, если у него будет один кейфрейм. В этом случае (хотя зависит от реализации - здесь для меня темно) gotoAndStop() не должен вызывать уничтожение текущего фрейма, так как больше некуда переходить.

                  Но можно и так - что-то нарисовать, а потом вызвать в коде и повесить на спрайт. В этом случае желательно, чтобы нарисованный объект не имел кода и привязок, кроме тех, которые сами потом в коде приделаем.
                  Долог путь в бессмертие... я еще вернусь.
                  Профильный скилл "Телепатия" 8%
                  ТРОЛЛЬ - Троян Разрушительный Опасный, Лучше ЛинятЬ (с) Freezing Spell
                  Прошу потестить игру.
                    Vesper, спасибо, буду пробовать!
                    Всё должно быть продумано до мельчайших деталей… если ты знаешь ход мыслей человека, сюрпризов не будет
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script Execution time: 0,0972 ]   [ 17 queries used ]   [ Generated: 18.09.18, 21:25 GMT ]