Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.236.100.210] |
|
Сообщ.
#1
,
|
|
|
Добрый день!
Есть несколько кейфрэймов, переход между ними организован по нажатию кнопок: нажали - gotoandPlay(n) При переходе с первого кадра на любой другой все хорошо, но если скажем с пятого я захочу перейти на четвертый, то переход происходит, но выдается ошибка: TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null". и далее ноль реакции на любые действия. Как это побороть? З.Ы. если кнопка выполняет любое другое действие - все нормально, проблема только в переходах от фрейма к фрейму. |
Сообщ.
#2
,
|
|
|
Наверное без проекта или диаграммы хотя бы будет сложно понять. Одно совершенно точно, кто-то теряет ссылку на объект. А вот причину в слепую наверное не установить.
|
Сообщ.
#3
,
|
|
|
piksel, говоря проще, на 1 кадре следующий код:
mybut_1.addEventListener(MouseEvent.CLICK,fun1); function fun1(event:MouseEvent):void{ gotoAndPlay(5); } работает нормально. На остальных кадрах тот же код вываливается с ошибкой TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null". mybut_1 - уникальный идентификатор кнопки, присутствующей на кадре. |
Сообщ.
#4
,
|
|
|
мда, фреймы и слушатели в одном флаконе = утечка памяти, и 1009е во все поля. В общем, после перехода с первого фрейма mybut_1 становится null, и получаешь 1009.
|
Сообщ.
#5
,
|
|
|
Vesper, понимаю, но как тогда организовать несколько меню? На ум приходит только сделать буферный мувиклип в первом фрейме и уже в нем осуществлять все переходы. Сейчас попробую, поможет ли это.
А есть еще варианты, как это делается? |
Сообщ.
#6
,
|
|
|
Я по жизни делаю спрайтами (класс Sprite - умеет всё, что умеет мувиклип, минус фреймы и динамические параметры). Плюс в том, что в спрайтах ты полностью контролируешь жизненный цикл объекта-самого спрайта и всего содержимого, а в мувиклипах переход на другой фрейм убивает все ссылки в предыдущем фрейме, и всё хранить придется через проперти класса. Одно меню - один спрайт. На спрайте нарисованы кнопочки (тоже спрайты), на кнопочках слушатели, если меню предполагается вызывать откуда-нибудь с нескольких мест, пишу в классе устанавливаемые callback-параметры типа Function, которые вызываются при нажатии соответствующей кнопки. Не самое оптимальное решение, но до фреймворков я ещё не дорос. Пример:
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(); } } |
Сообщ.
#7
,
|
|
|
Vesper, если делать через спрайты, то размещение всех объектов осуществляется программно? Значит к визуальному редактору прибегаем только для того, чтобы отрисовать тот или иной объект, а затем вызвать его в коде?
Прошу прощения за нубские вопросы... |
Сообщ.
#8
,
|
|
|
Goshanello, нет, не обязательно программно. Я просто пишу в FlashDevelop, в ней нет гуя для размещения объектов. В принципе вместо спрайта подойдет и обычный movieclip, если у него будет один кейфрейм. В этом случае (хотя зависит от реализации - здесь для меня темно) gotoAndStop() не должен вызывать уничтожение текущего фрейма, так как больше некуда переходить.
Но можно и так - что-то нарисовать, а потом вызвать в коде и повесить на спрайт. В этом случае желательно, чтобы нарисованный объект не имел кода и привязок, кроме тех, которые сами потом в коде приделаем. |
Сообщ.
#9
,
|
|
|
Vesper, спасибо, буду пробовать!
|