|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jan 2003
Адрес: Latvia, Riga
Сообщений: 161
|
Как из дочернего класса правильно обратиться к родительскому
имхо вопрос.
Вот код родительского класса: package { public class mainMap { public function createObject():void { var obj:MapObject = new MapObject(); obj.createObject(); } public function countObj():void { trace("function"); } } } package { public class MapObject { public function createObject():void { super.countObj(); } } } Нашел мало информации по данному вопросу, может кто подскажет правильный метод. Последний раз редактировалось RaVeN-Nikma; 14.03.2009 в 12:19. |
|
|||||
strange mood
|
Нельзя во флэше обращаться к родительским объектам, он этого не умеет и никогда уметь не будет. Когда-то, несколько лет назад, макромедия хотела это сделать, но из-за кучи багов и нерентабельности вопрос закрыли. Сами посудите, какое тут слабое связывание, когда объекты дёргают своих родителей за методы, которых у них может и не быть. В общем не будет такого никогда.
Посылайте наверх событие.
__________________
тонкий тролль, осеянный благодатью |
|
|||||
ветеран форума
|
RaVeN-Nikma, если Вы называете класс дочерним/родительским, то подразумеваете наличие наследования, которого в коде у Вас нет. Более того, почему названия обоих классов одинаковые? Для случая наследования код будет корректен после добавления наследования.
Если Вам необходимо знать имя функции, вызвавшей другую функцию, то так нельзя, и нужно учитывать это в архитектуре
__________________
4am is time to rock Последний раз редактировалось DarkLight; 14.03.2009 в 01:44. |
|
|||||
Ну во-первых не совсем понятно чего Вы добиваетесь.
Я представляю 2 варианта: 1. На сцене есть некоторый объект (родитель), в родителе содержится дочерний. Родитель - класс MapObject. Дочерний назовем ChildClass. В таком случае, прежде, чем что-либо вызывать из родительского класса дочерним, надо дочерний добавить в список отображения. Поясняю кодом. Родительский: package { public class MapObject extends Sprite { private function MapObject(){ } public function createObject():void { var obj:ChildClass= new ChildClass(); addChild(obj); obj.createObject(); } public function countObj():void { trace("It's worked!"); } } } package { public class ChildClass extends Sprite { private function ChildClass() { } public function createObject():void { } } } package { public class MapObject extends Sprite { private var obj:MapObject = new MapObject(); private function MapObject(){ addChild(obj); } public function createObject():void { MapObject(parent).countObj(); obj.createObject(); } public function countObj():void { trace("It's worked!"); } } } Если можно, уточните более подробно, чего Вы добиваетесь. |
|
|||||
стервочка (я мужик)
|
GAIKER, абсурда какого-то Вы тут на наговорили
|
|
|||||
strange mood
|
BlooDHounD, это был тонкий юмор
http://bash.org.ru/quote/395556
__________________
тонкий тролль, осеянный благодатью |
|
|||||
Регистрация: Jan 2003
Адрес: Latvia, Riga
Сообщений: 161
|
Одинаковые названия классов, это с копированием кода ошибся, извиняюсь.
Разобрался с наследованием, но функцию все равно вызывает неверно. Родитель package { public class mainMap { public var mc_main:MovieClip = new MovieClip(); public function createObject():void { var obj:MapObject = new MapObject(); obj.createObject(); } public function countObj():void { trace(mc_main.numchildren); } } } mc_main содержит 5 детей. Если функцию вызывать из родителя, то trace выводит результат 5, если функцию у родителя вызывает дочь, то выводит 0. Почему функция работает не корректно? Последний раз редактировалось RaVeN-Nikma; 14.03.2009 в 13:50. |
|
|||||
Регистрация: Aug 2008
Сообщений: 34
|
2all - простите меня серого, но разве так можно:
public class MapObject extends Sprite { private function MapObject(){ } ????? |
|
|||||
Если можете, вышлите наиболее подробный код. А то анализировать код с ошибками сложно. Например, у Вас CreateObject() присутствует как в родительском, так и в дочернем классе. При том в дочернем функция должна быть override, а у Вас нет - это вызвало ошибку при тестировании кода.
|
|
|||||
Регистрация: Jan 2003
Адрес: Latvia, Riga
Сообщений: 161
|
Вот полный код:
http://www.bestbrok.com/AC3.rar Если функцию countObj() запускает родитель, то trace выдает 5 (это верно). Если функцию запускает дочка, то trace кидает 0. Все есть в архиве |
Часовой пояс GMT +4, время: 20:44. |
|
« Предыдущая тема | Следующая тема » |
|
|