![]() |
|
||||||||||
|
|||||
|
Регистрация: Mar 2010
Адрес: Moscow
Сообщений: 13
|
Парни, не первый день за флешем, но...тут встрял.
Собственно сабж (выдернул из своего проекта метод, повыкидывал всё из него, чтобы понятнее было): function duplicateObject(obj:MovieClip, duplicateObjName:String, arrArguments:Array = null, autoAddToStage:Boolean = true):dgObject { var targetClass:Class; var duplicate:MovieClip; var rect:Rectangle; try { targetClass = Object(obj).constructor; duplicate = new targetClass(); rect = obj.scale9Grid; duplicate.name = duplicateObjName; duplicate.transform = obj.transform; duplicate.filters = obj.filters; duplicate.cacheAsBitmap = obj.cacheAsBitmap; duplicate.opaqueBackground = obj.opaqueBackground; if (obj.scale9Grid) duplicate.scale9Grid = rect; trace("num = " + obj.parent.numChildren); obj.parent.addChild(duplicate); trace("num = " + obj.parent.numChildren); trace(duplicate.name); //***** ПОЧЕМУ???? trace(obj.parent['qqq']); //***** ПОЧЕМУ???? //fmcEnvelope.parent.getChildAt(2).x +=120; //это у меня на сцене он 2-ой... //duplicate.x += 120; } catch(err:Error) { //обработчик } return null; } В комментах описана проблема. Хоть убейте - не пойму ПОЧЕМУ я не могу обратиться так к объекту... ВСЕМ заранее СПАСИБО! |
|
|||||
|
Регистрация: Mar 2010
Адрес: Moscow
Сообщений: 13
|
return null тут абсолютно не при чем.
Вопрос заключается в том, почему я ВНУТРИ этой функции(кстати, можно и снаружи тоже попробовать - ничего не выйдет) не могу по имени(!) обратиться к объекту. Объект создается и добавляется успешно на сцену(о чем свидетельствуют СПЕЦИАЛЬНО для этого вставленные функции trace) - но такое обращение возвращает undefined. ПОЧЕМУ? |
|
|||||
|
Регистрация: Mar 2010
Адрес: Moscow
Сообщений: 13
|
Опять неверно. Для примера - вот мой конструктор:
//constructor public function dgObject(mc:MovieClip, mcName:String, objInternal:Boolean = false):void { var errMsg:String = ""; try { if (mc == null) errMsg = fcs.emMovieClipIsNull else if (mc[mcName] == null) errMsg = fcs.emObjectNotFound(mcName); if (errMsg != "") mc[mcName].name /*force generate error*/ else fmcEnvelope = mc[mcName]; } catch(err:Error) { ferrorConstructorInit = true; showError(new Array(fcs.cln_dgObject, fcs.cmnConstructor, fcs.etInternalCrush, errMsg, err)); //exceptionHandler(mc, fcurrentClass, fcs.cmnConstructor, fcs.emObjectNotFound(mcName), objInternal); } } Она-то работает. И, признаюсь Вам, очень даже неплохо работает!))) А насчет getChildByName - огрмное спасибо, совсем вылетело из головы. Но всё-таки...сабж остается сабжом....что за ГЛЮК? Последний раз редактировалось iNils; 07.04.2010 в 18:53. |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Цитата:
Делаем простой пример package { import flash.display.*; public class Test extends Sprite { public function Test () { var s:MovieClip = new MovieClip () s.name = "mc" addChild (s) trace (this["mc"]); } } } Цитата:
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Генерацией ссылок с именами клипов занимается компилятор Flash IDE и то, только на стадии компиляции.
|
|
|||||
|
Регистрация: Mar 2010
Адрес: Moscow
Сообщений: 13
|
Все правильно))))) Я ПРО ЭТО И ГОВОРЮ. Ошибка то бабахает. Страшно и громко бабахает.
А если мы теперь закомментим строчки: //var s:MovieClip = new MovieClip () //s.name = "mc" //addChild (s) Затем очень аккуратно создадим шейп на сцене(вручную). Далее нажмем F8. Далее назовем его mc. А уже затем мягко и аккуратно нажмем ctrl+enter. И.............//[object MovieClip] Вопрос остается открытым: ПОЧЕМУ? ПОЧЕМУ в IDE flash видит и может обратиться к объекту вот так object[objectName], а в райн-тайме НЕТ!.... Кто может, подскажите... |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Генерацией ссылок с именами клипов занимается компилятор Flash IDE и то, только на стадии компиляции.
|
|
|||||
|
Регистрация: Mar 2010
Адрес: Moscow
Сообщений: 13
|
Т.е., как я понял, в райн-тайме ссылка на добавленный объект через обращение по свойству(object[objectName]) не работает? Верно?
|
![]() |
![]() |
Часовой пояс GMT +4, время: 17:24. |
|
|
« Предыдущая тема | Следующая тема » |
|
|