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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.03.2009, 01:09
RaVeN-Nikma вне форума Посмотреть профиль Отправить личное сообщение для RaVeN-Nikma Посетить домашнюю страницу RaVeN-Nikma Найти все сообщения от RaVeN-Nikma
  № 1  
Ответить с цитированием
RaVeN-Nikma

Регистрация: Jan 2003
Адрес: Latvia, Riga
Сообщений: 161
Question Как из дочернего класса правильно обратиться к родительскому

имхо вопрос.

Вот код родительского класса:
Код AS3:
package {
    public class mainMap
    {
         public function createObject():void
	 {
              var obj:MapObject = new MapObject();
              obj.createObject();
         }
 
         public function countObj():void
	 {
              trace("function");
         }         
    }
}
дочерний класс:
Код AS3:
package {
    public class MapObject 
    {
         public function createObject():void
	 {
              super.countObj();
         }        
    }
}
Кидает ошибку: ReferenceError: Error #1070: Не удалось найти метод countObj в Object

Нашел мало информации по данному вопросу, может кто подскажет правильный метод.


Последний раз редактировалось RaVeN-Nikma; 14.03.2009 в 12:19.
Старый 14.03.2009, 01:26
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 2  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Нельзя во флэше обращаться к родительским объектам, он этого не умеет и никогда уметь не будет. Когда-то, несколько лет назад, макромедия хотела это сделать, но из-за кучи багов и нерентабельности вопрос закрыли. Сами посудите, какое тут слабое связывание, когда объекты дёргают своих родителей за методы, которых у них может и не быть. В общем не будет такого никогда.

Посылайте наверх событие.
__________________
тонкий тролль, осеянный благодатью

Старый 14.03.2009, 01:42
DarkLight вне форума Посмотреть профиль Отправить личное сообщение для DarkLight Посетить домашнюю страницу DarkLight Найти все сообщения от DarkLight
  № 3  
Ответить с цитированием
DarkLight
ветеран форума
 
Аватар для DarkLight

Регистрация: May 2006
Адрес: Москва
Сообщений: 2,978
Отправить сообщение для DarkLight с помощью ICQ Отправить сообщение для DarkLight с помощью Skype™
RaVeN-Nikma, если Вы называете класс дочерним/родительским, то подразумеваете наличие наследования, которого в коде у Вас нет. Более того, почему названия обоих классов одинаковые? Для случая наследования код будет корректен после добавления наследования.
Если Вам необходимо знать имя функции, вызвавшей другую функцию, то так нельзя, и нужно учитывать это в архитектуре
__________________
4am is time to rock


Последний раз редактировалось DarkLight; 14.03.2009 в 01:44.
Старый 14.03.2009, 01:55
serenkiy вне форума Посмотреть профиль Отправить личное сообщение для serenkiy Найти все сообщения от serenkiy
  № 4  
Ответить с цитированием
serenkiy
 
Аватар для serenkiy

Регистрация: Jan 2009
Сообщений: 60
Отправить сообщение для serenkiy с помощью ICQ
Ну во-первых не совсем понятно чего Вы добиваетесь.
Я представляю 2 варианта:

1. На сцене есть некоторый объект (родитель), в родителе содержится дочерний. Родитель - класс MapObject. Дочерний назовем ChildClass.
В таком случае, прежде, чем что-либо вызывать из родительского класса дочерним, надо дочерний добавить в список отображения.
Поясняю кодом.

Родительский:
Код AS3:
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!");
         }         
 
    }
}
Ну и дочерний:
Код AS3:
package 
{
    public class ChildClass extends Sprite
    {
         private function ChildClass()
        {
         }
 
         public function createObject():void
	 {
 
         } 
 
    }
}
2. Учитывая что у Вас родительский и дочерний классы названы одинаково, чего быть в принципе не может, если только это не один и тот же класс, можно попытаться сделать такой код (что правда я не тестировал, и гарантировать стабильную работу не буду):

Код AS3:
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!");
         }         
 
    }
}
Практическое применение данному коду я не представляю. Если проанализировать код, он придет к зависанию плеера (т.к. создается класс MapObject, который в свою очередь создает себя и так до бесконечности (ну почти ).

Если можно, уточните более подробно, чего Вы добиваетесь.

Старый 14.03.2009, 02:26
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 5  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
GAIKER, абсурда какого-то Вы тут на наговорили

Старый 14.03.2009, 03:13
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 6  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
BlooDHounD, это был тонкий юмор
http://bash.org.ru/quote/395556
__________________
тонкий тролль, осеянный благодатью

Старый 14.03.2009, 12:18
RaVeN-Nikma вне форума Посмотреть профиль Отправить личное сообщение для RaVeN-Nikma Посетить домашнюю страницу RaVeN-Nikma Найти все сообщения от RaVeN-Nikma
  № 7  
Ответить с цитированием
RaVeN-Nikma

Регистрация: Jan 2003
Адрес: Latvia, Riga
Сообщений: 161
Одинаковые названия классов, это с копированием кода ошибся, извиняюсь.

Разобрался с наследованием, но функцию все равно вызывает неверно.

Родитель
Код AS3:
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);
         }         
    }
}
Дочка
Код AS3:
package {
    public class MapObject extends mainMap
    {
         public function createObject():void
	 {
              super.countObj();
         }        
    }
}
mc_main содержит 5 детей. Если функцию вызывать из родителя, то trace выводит результат 5, если функцию у родителя вызывает дочь, то выводит 0. Почему функция работает не корректно?


Последний раз редактировалось RaVeN-Nikma; 14.03.2009 в 13:50.
Старый 14.03.2009, 15:14
flashscout вне форума Посмотреть профиль Отправить личное сообщение для flashscout Найти все сообщения от flashscout
  № 8  
Ответить с цитированием
flashscout
 
Аватар для flashscout

Регистрация: Aug 2008
Сообщений: 34
2all - простите меня серого, но разве так можно:
public class MapObject extends Sprite
{

private function MapObject(){
}
?????

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

Регистрация: Jan 2009
Сообщений: 60
Отправить сообщение для serenkiy с помощью ICQ
Если можете, вышлите наиболее подробный код. А то анализировать код с ошибками сложно. Например, у Вас CreateObject() присутствует как в родительском, так и в дочернем классе. При том в дочернем функция должна быть override, а у Вас нет - это вызвало ошибку при тестировании кода.

Старый 15.03.2009, 14:08
RaVeN-Nikma вне форума Посмотреть профиль Отправить личное сообщение для RaVeN-Nikma Посетить домашнюю страницу RaVeN-Nikma Найти все сообщения от RaVeN-Nikma
  № 10  
Ответить с цитированием
RaVeN-Nikma

Регистрация: Jan 2003
Адрес: Latvia, Riga
Сообщений: 161
Вот полный код:

http://www.bestbrok.com/AC3.rar

Если функцию countObj() запускает родитель, то trace выдает 5 (это верно). Если функцию запускает дочка, то trace кидает 0. Все есть в архиве

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

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

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


 


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


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