Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проблемы с addChild, глюк АS3? (http://www.flasher.ru/forum/showthread.php?t=211798)

zslavman 09.11.2015 16:06

Проблемы с addChild, глюк АS3?
 
Доброго времени суток всем зашедшим в топик!

Суть: поясню на пальцах, есть флешка в несколько кадров, в каждом кадре есть свои динамические текстовые поля, которые обновляются лишь при входе в кадр (в зависимости от выбраного в флешке языка).
В первом кадре пишу функцию, которая вытягивает из библиотеки 1 мувиклип создает его экземпляры на сцене с заданными координатами:
Код AS3:

var helpField: MovieClip;
 
function func_ShowTip( X: Number, Y: Number) {
helpField = new helpField_mc();
addChild(helpField);
}

В некоторых кадрах обращаюсь к этой функции, всё работает. При перепрыгивании из кадра в кадр удаляю детей:
Код AS3:

if (helpField != null) {
                removeChild(helpField);
                helpField = null;
        }

Проблема: при переходе из некоторых кадров в другие вылетает ошибка:
«TypeError: Error #1009: Cannot access a property or method of a null object reference.»
Как удалось выяснить экспериментальным путем, (разместил трейсер в том кадре на котором происходит сбой):
Код AS3:

trace (textField3); // [object TextField]  - когда всё ОК
trace (textField3); // null – когда сбой

непонятно почему и как, после нескольких прыжков по кадрам флеш перестает видеть текстовое поле, как я понимаю. В режиме отладки, при сбое отладчик как раз указывает именно на одно и тоже динамическое текстовое поле. Но, быть может во время удаления чайлда происходит что то страшное?:) Кста, на чайлдов слушателей не навешиваю. Еще мысли - методом addChild дети добавляются на весь stage, а может нужно как то именно в кадр добавлять?
Попытки устранить проблему, которые не увенчались успехом:
1) пробовал переименовывать «проблемное» динам. текст. поле;
2) пробовал создать совсем новое динамич. текст. поле с другим шрифтом, кегелем, именем и т.д.;
3) если убрать «проблемное» динам. текст. поле – проблема исчезает вместе с ним, но без него никак. Как то странно получается, что флеш цепляется именно к вновь созданному или же проблемному динам. текстовому полю в том кадре…;
4) если не пользоваться функцией func_ShowTip, то проблема так же не появляется.

Буду очень признателен любым мыслям по этому поводу, заранее спасибо!

Bletraut 09.11.2015 17:23

Код AS3:

helpField = null;

а что если это убрать

zslavman 09.11.2015 17:50

Цитата:

Сообщение от Bletraut (Сообщение 1188870)
Код AS3:

helpField = null;

а что если это убрать

тогда при выполнении функции func_HideTip() вылетает ошибка:
"ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller. at flash.display::DisplayObjectContainer/removeChild()"

Bletraut 09.11.2015 18:26

а если
Код AS3:

var helpField: MovieClip;
 
function func_ShowTip( X: Number, Y: Number) {
helpField = new helpField_mc();
addChild(helpField);
}

заменить на
Код AS3:

function func_ShowTip( X: Number, Y: Number) {
var helpField:MovieClip = new helpField_mc();
addChild(helpField);
}


zslavman 09.11.2015 20:07

Bletraut, так нельзя, потому что все чайлды helpField'а будут вне области видимости и удалить их будет нельзя. Компилятор будет ругаться на "Обращение несуществующего свойства helpField"

Добавлено через 1 час 36 минут
так же опробовал (не помогло):
5) запихнуть текстовое поле в мувиклип
6) переместить текстовое поле на другой слой - флеш всё равно находит его и портит (чудеса конечно)

caseyryan 09.11.2015 22:24

Это не верный подход. Не надо распихивать код по разным кадрам. Все время будут возникать подобные ошибки, и ничего удивительного в этом нет. Если уж и писать в кадрах, то только в одном

zslavman 09.11.2015 22:58

Цитата:

Сообщение от caseyryan (Сообщение 1188879)
Это не верный подход. Не надо распихивать код по разным кадрам. Все время будут возникать подобные ошибки, и ничего удивительного в этом нет. Если уж и писать в кадрах, то только в одном

соглашусь на 50%. не всегда удобно/выгодно писать код в одном кадре, иначе бы небыло таймлайна и вообще понятия инфрейм программинг.

Wolsh 10.11.2015 00:53

В Фотошопе тоже есть таймлайн. Вы забываете, что Флэш — это программа для анимации. Далеко не все инструменты и панели, которые в нем есть, имеют отношение к программированию. В кадрах можно писать код — инструкции таймлайна, типа stop()/play(), gotoAndStop()/gotoAndPlay(), и этим стоит ограничиться. Чем раньше Вы дадите волю своим амбициям и начнете программировать в Классах, тем быстрее выберетесь из подвальной тьмы вот этого конструирования на булавках и изоленте. То, чем Вы сейчас занимаетесь — имитация программирования. При том что, я вижу, Вы понимаете ситуацию, но упрямо сами себя уговариваете надуманными аргументами. Для того, чтобы перейти на Классы, Вам понадобится максимум месяц. Максимум. 4 недели. И все прелести AS3 будут в Ваших руках, всё будет логично и послушно, строго и упорядоченно. Просто представьте себе ПРОГРАММУ Флэш, написанную в кадрах. Со всеми ее окнами, инструментами и возможными состояниями. Это нереально. Вы просто идете не в том направлении и напрасно тратите свое время.
Но выбор конечно за Вами.

Godwarlock 10.11.2015 01:24

Wolsh золотые слова)

zslavman 10.11.2015 01:39

Цитата:

Сообщение от Wolsh (Сообщение 1188884)
В Фотошопе тоже есть таймлайн. Вы забываете, что Флэш — это программа для анимации. Далеко не все инструменты и панели, которые в нем есть, имеют отношение к программированию. В кадрах можно писать код — инструкции таймлайна, типа stop()/play(), gotoAndStop()/gotoAndPlay(), и этим стоит ограничиться. Чем раньше Вы дадите волю своим амбициям и начнете программировать в Классах, тем быстрее выберетесь из подвальной тьмы вот этого конструирования на булавках и изоленте. То, чем Вы сейчас занимаетесь — имитация программирования. При том что, я вижу, Вы понимаете ситуацию, но упрямо сами себя уговариваете надуманными аргументами. Для того, чтобы перейти на Классы, Вам понадобится максимум месяц. Максимум. 4 недели. И все прелести AS3 будут в Ваших руках, всё будет логично и послушно, строго и упорядоченно. Просто представьте себе ПРОГРАММУ Флэш, написанную в кадрах. Со всеми ее окнами, инструментами и возможными состояниями. Это нереально. Вы просто идете не в том направлении и напрасно тратите свое время.
Но выбор конечно за Вами.

:eek:
Честно говоря, абсолютная правда, как в воду смотрите. Сначала я писал чисто по кадрам (тема топика как раз оттуда), сейчас пишу всё в одном кадре, а для того что бы не путаться в длинных простынях кода разбиваю его по слоям. И да, сейчас уже настало понимание, что покадрового программирования как то не хватает, но и не совсем понимаю прелестей классов, ведь для того что бы сделать равносильную (покадровой) флешку с помощью классов нужно кода написать в три раза больше. Ведь всё что делалось мышей, т.е. создание и размещение объектов по сцене, выставление свойств и т.д. нужно будет подробно описывать кодом, я правильно говорю?
Хоть и офтоп, но буду благодарен если натолкнете на нужный источник информации, где бы можно почитать о этом самом "переходе", в особенности, попунктно, о расширении возможностей и привелегиях, если так можно сказать :)


Часовой пояс GMT +4, время: 14:15.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.