Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.11.2015, 16:06
zslavman вне форума Посмотреть профиль Отправить личное сообщение для zslavman Найти все сообщения от zslavman
  № 1  
Ответить с цитированием
zslavman

Регистрация: Mar 2015
Сообщений: 23
Question Проблемы с 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, то проблема так же не появляется.

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

Старый 09.11.2015, 17:23
Bletraut вне форума Посмотреть профиль Отправить личное сообщение для Bletraut Найти все сообщения от Bletraut
  № 2  
Ответить с цитированием
Bletraut
 
Аватар для Bletraut

Регистрация: Mar 2013
Адрес: Вне пространства.
Сообщений: 567
Отправить сообщение для Bletraut с помощью ICQ Отправить сообщение для Bletraut с помощью Skype™
Код AS3:
helpField = null;
а что если это убрать
__________________
Я заклинаю вас действовать иначе.

Старый 09.11.2015, 17:50
zslavman вне форума Посмотреть профиль Отправить личное сообщение для zslavman Найти все сообщения от zslavman
  № 3  
Ответить с цитированием
zslavman

Регистрация: Mar 2015
Сообщений: 23
Цитата:
Сообщение от Bletraut Посмотреть сообщение
Код AS3:
helpField = null;
а что если это убрать
тогда при выполнении функции func_HideTip() вылетает ошибка:
"ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller. at flash.display:isplayObjectContainer/removeChild()"

Старый 09.11.2015, 18:26
Bletraut вне форума Посмотреть профиль Отправить личное сообщение для Bletraut Найти все сообщения от Bletraut
  № 4  
Ответить с цитированием
Bletraut
 
Аватар для Bletraut

Регистрация: Mar 2013
Адрес: Вне пространства.
Сообщений: 567
Отправить сообщение для Bletraut с помощью ICQ Отправить сообщение для Bletraut с помощью Skype™
а если
Код 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);
}
__________________
Я заклинаю вас действовать иначе.

Старый 09.11.2015, 20:07
zslavman вне форума Посмотреть профиль Отправить личное сообщение для zslavman Найти все сообщения от zslavman
  № 5  
Ответить с цитированием
zslavman

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

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

Старый 09.11.2015, 22:24
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 6  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Это не верный подход. Не надо распихивать код по разным кадрам. Все время будут возникать подобные ошибки, и ничего удивительного в этом нет. Если уж и писать в кадрах, то только в одном

Старый 09.11.2015, 22:58
zslavman вне форума Посмотреть профиль Отправить личное сообщение для zslavman Найти все сообщения от zslavman
  № 7  
Ответить с цитированием
zslavman

Регистрация: Mar 2015
Сообщений: 23
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Это не верный подход. Не надо распихивать код по разным кадрам. Все время будут возникать подобные ошибки, и ничего удивительного в этом нет. Если уж и писать в кадрах, то только в одном
соглашусь на 50%. не всегда удобно/выгодно писать код в одном кадре, иначе бы небыло таймлайна и вообще понятия инфрейм программинг.

Старый 10.11.2015, 00:53
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

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

Старый 10.11.2015, 01:24
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 9  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 836
Wolsh золотые слова)

Старый 10.11.2015, 01:39
zslavman вне форума Посмотреть профиль Отправить личное сообщение для zslavman Найти все сообщения от zslavman
  № 10  
Ответить с цитированием
zslavman

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

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:56.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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