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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.11.2011, 22:32
goldlider вне форума Посмотреть профиль Отправить личное сообщение для goldlider Найти все сообщения от goldlider
  № 31  
Ответить с цитированием
goldlider

Регистрация: Jun 2010
Сообщений: 120
Объясните пожалуйста такую вещь. В приведенном мной выше коде, над объектом какого класса выз-ся метод getChildAt()?
Если этот метод вызывается над объектом класса WeaponsDemo, который яв-ся наследником DisplayObjectContainer. Так зачем приведение метода getChildAt() к типу MovieClip, если этот метод итак передается по наследству.

Получается что запись getChildAt(i).stop аналогична записи this.getChildAt(i).stop. Что из этого выходит, что объекту WeaponsDemo из метода getChildAt(i) возвращается объект DisplayObjectContainer и затем вызывается метод stop().

У меня какая-то каша ничего понять не могу.


Последний раз редактировалось goldlider; 22.11.2011 в 22:34.
Старый 22.11.2011, 23:02
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 32  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Цитата:
Сообщение от goldlider Посмотреть сообщение
getChildAt(i) возвращается объект DisplayObjectContainer и затем вызывается метод stop().
С чего вы взяли что возвращается DisplayObjectContainer? Не нужно ничего придумывать или предполагать. Метод getChildAt возвращает DisplayObject, о чем пишется в документации.

И даже если бы возвращался DisplayObjectContainer, то у этого класса нету метода stop, о чем опять таки рассказывает документация.

Читайте книги и документацию, и каша пропадет.

Старый 22.11.2011, 23:29
goldlider вне форума Посмотреть профиль Отправить личное сообщение для goldlider Найти все сообщения от goldlider
  № 33  
Ответить с цитированием
goldlider

Регистрация: Jun 2010
Сообщений: 120
Цитата:
Сообщение от Bgg Посмотреть сообщение
С чего вы взяли что возвращается DisplayObjectContainer? Не нужно ничего придумывать или предполагать. Метод getChildAt возвращает DisplayObject, о чем пишется в документации.
Тогда, как это может быть true

Код AS3:
(getChildIndex(i) is MovieClip)
Согласно вашим словам getChildIndex возвращает DisplayObject. Тогда получается

Код AS3:
(DisplayObject is MovieClip) // isn't true
что не может быть на самом деле.


Последний раз редактировалось goldlider; 22.11.2011 в 23:34.
Старый 22.11.2011, 23:44
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 34  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Цитата:
Сообщение от goldlider Посмотреть сообщение
Тогда получается
Код AS3:
(DisplayObject is MovieClip) // isn't true
что не может быть на самом деле.
По вашему мувиклип не визуальный объект что ли? Проверили пропихнув это в трейс и трейс выдал странный вариант? Читайте про проверку типов.

Код AS3:
var m:MovieClip = new MovieClip();
var s:String = new String("s");
 
trace(m is DisplayObject);//true
trace(s is DisplayObject);//false
trace(MovieClip is Class);//true
Документация опять бежит вам на помощь и показывает цепочку наследования: MovieClip > Sprite > DisplayObjectContainer > InteractiveObject > DisplayObject > EventDispatcher > Object


Последний раз редактировалось Bgg; 22.11.2011 в 23:46.
Старый 22.11.2011, 23:51
goldlider вне форума Посмотреть профиль Отправить личное сообщение для goldlider Найти все сообщения от goldlider
  № 35  
Ответить с цитированием
goldlider

Регистрация: Jun 2010
Сообщений: 120
bgg, вы о чем? Я знаю, что в каком порядке идет в дисплей листе. Вы сказали, что getChildIndex возвращает объект класса DisplayObject. Как тогда DisplayObject может приводится к классу MovieClip, который находится ниже в иерархии?

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

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Причем тут дисплей лист? Мда, вам ещё оказывается все объяснили на второй странице, если бы заметил раньше, то не распинался бы.

Все, ушел из темы, тут я бессилен.

Старый 23.11.2011, 00:43
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 37  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Человек просто совсем начинает, что вы так сразу на него то? )
Смотри.
Есть такая штука: наследование. Создали класс А, и унаследовали от него класс Б. Класс Б является наследником класса А, т.е. он унаследовал его поведения и свойства, но при этом он его расширил, добавив что-то своё новое. И фишка в том, что мы можем в переменную с типом А записать ссылку на экземпляр с типом Б:
Код AS3:
var obj:A=new B();
потому что всякое Б - это А, только дополненное и расширенное. Однако, обратное утверждение не верно: не всякое А это Б.
Манипуляции происходят со ссылками. Мы не изменили сущность экземпляра класса Б, записав ссылку на него в переменную с типом А. Однако компилятор то этого не знает ) Ему побоку что там записано: А или Б. Он точно знает, что там А и поступать он будет как с А. К чему я клоню?
К тому что если в Б создать метод hello, то мы не сможем его вызвать через переменную с типом А: потому что компилятор не знает, что там записано на самом деле. Это остается на откуп программисту. И надо подсказать ему:
Код AS3:
(obj as B).hello();
И это подводит нас к ещё одной штуковине. Как уже было сказано ранее сущность не меняется. Поэтому если в классе А есть метод method, то в классе Б его можно перекрыть. Для примера, пусть в классе А метод method делает trace(1), а в классе Б этот метод переопределен, и он делает trace(2).
Код AS3:
var obj:A=new B(); //тип переменной A, но лежит там B
obj.method();//хоть тип переменной и A, но лежит то там B! И видим мы 2
Это кстати называется полиморфизмом.

Вот этот method в твоём примере это toString. (на самом деле, насколько я знаю это неправда, но для понимания считай так: не нужно тебе в прототипы лезть). А метод hello в это stop.
Цепочка вообще такая:
MovieClip->Sprite->DisplayObjectContainer->InteractiveObject->DisplayObject->EventDispatcher.
В переменную с типом EventDispatcher ты можешь записать любой MovieClip. Или любой DisplayObject. А в переменную с типом DisplayObjectContainer ты можешь записать Sprite. Но ты не можешь записать в переменную с типом DisplayObjectContainer, скажем, EventDispatcher.

Старый 23.11.2011, 01:05
Ookami вне форума Посмотреть профиль Отправить личное сообщение для Ookami Найти все сообщения от Ookami
  № 38  
Ответить с цитированием
Ookami
 
Аватар для Ookami

Регистрация: Aug 2011
Адрес: 56° 51' с.ш. 53° 13' в.д.
Сообщений: 172
Записей в блоге: 1
Тигра красавец =) Тебе бы маны писать =) Плюс в карму

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

Теги
error #1061

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

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


 


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


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