Просмотр полной версии : Проблема с родительскими и дочерними объектами
SpeakerG
10.01.2016, 13:02
Всем привет, у меня следующая проблема.
Есть символ "hero". Внутри него есть ещё символ - "leftM". Проблема в том, что я не могу обратиться к "hero.leftM". Т.е. символ "hero" добавлен на сцену с помощью addChild, и к "hero" обратиться могу, но к "hero.leftM" - нет. Может нужно "leftM" тоже на сцену добавить с помощью addChild? Но, с другой стороны, он же добавляется вместе с "hero" ...
Спасибо.
zackscript
10.01.2016, 16:38
Наверное вы забыли назначить имя Вашему символу в свойствах.
SpeakerG
10.01.2016, 16:44
Нет, имя есть (
undefined
10.01.2016, 17:28
Если все добавляется через код, то к детям обращаться надо так:
hero.getChildByName("leftM");
не забыв, предварительно выставить name у ребенка.
SpeakerG
11.01.2016, 19:44
эм, если к детям мы обращаемся по имени, то к чему мы обращаемся например так: "simvol1.simvol2.svoystvo"? Через точку то есть.
Flash автоматически записывает в переменные всех детей вложенных в мувик, можете сделать так же)
hero.leftM=hero.getChildByName("leftM");
undefined
11.01.2016, 21:59
Вообще говоря через точку можно обращаться только к детям, внутри символов, созданных в flash ide т.к. в этом случае ide сама расширяет базовые классы и дописывает им свойства с именами детей.Для DO, которые ты сам создаешь/компонуешь в коде этого не происходит, поэтому надо обращаться по имени ребенка
var p:Sprite=new Sprite();
var child:Sprite=new Sprite();
p.addChild(child);
child.name="child";
trace(p.child);//ошибка компиляции, свойства child нет у спрайта
trace(p.getChildByName("child"));//[object Sprite]
Добавлено через 4 минуты
можете сделать так же)
hero.leftM=hero.getChildByName("leftM");
только если hero - MovieClip(что скорее всего так и есть)
SpeakerG
13.01.2016, 22:02
та у меня такая проблема, что обращение ваще не выходит, никак :/
stage.addEventListener(Event.ENTER_FRAME, work);
function work (event:Event)
{
for (var b = boxes.length; b > 0; b-- )
{
var boxN = boxes[b-1];
if (boxN.hitTestObject(hero.leftM))
{
trace('yeh')
}
}
}
TypeError: Error #2007: Параметр hitTestObject не должен быть равен нулю.
at flash.display::DisplayObject/_hitTest()
at flash.display::DisplayObject/hitTestObject()
at _fla::MainTimeline/work()
caseyryan
13.01.2016, 22:15
Сдается мне, что на этом символе (который там leftM в библиотеке), надо правой кнопкой - export for actionscript. И после этого к нему можно будет обращаться в коде
п.с.
for (var b = boxes.length; b > 0; b-- )
{
var boxN = boxes[b-1];
if (boxN.hitTestObject(hero.leftM))
{
trace('yeh')
}
}
Это работает как-то через задницу) Не лучше ли написать так:
for (var b:int = 0; b < boxes.length; b++) {
var boxN = boxes[b];
//...
}
undefined
13.01.2016, 22:21
Сдается мне, что на этом символе (который там leftM в библиотеке), надо правой кнопкой - export for actionscript. И после этого к нему можно будет обращаться в коде
Это еще зачем? export нужен если требуется создавать экземпляр с помощью new.Скорее товарищ добавляет leftM не в ide,а где-то в коде
SpeakerG
13.01.2016, 22:27
не, у меня есть символ hero. Он добавлен в коде через addChild. Внутри hero есть символ leftM, который в принципе автоматически добавляется на сцену вместе с hero.
undefined
13.01.2016, 22:33
проверь что у leftM внутри hero выставлено имя leftM
SpeakerG
13.01.2016, 22:34
Вот я лох глупый человек... реально не выставлено имя... блин, спасибо!!! :))))
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.