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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.07.2013, 15:20
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 11  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
belv, Это да.
Еще как вариант можно у таймера задать количество повторений нужное.

Итак, на всякий случай проговорим вслух, что произошло.

Код
Код AS3:
 getChildAt(i).stop()
означает:

"Берем экземпляр класса Star_demo, который фактически является экземпляром MovieClip и вызываем на нем метод getChildAt(i)... Мы можем это сделать, потому что MovieClip наследует свойства DisplayObject, а значит и метод getChildAt(). В резуьтате получаем объект типа DisplayObject, в котором вызываем метод stop()... И не можем этого сделать, потому что у него нет такого метода. Тогда этот объект мы превращаем снова в MovieClip, у которого метод Stop() существует."

Если всё так, то остаются два подозрения:
- Есть ли какие-то потери при таком приведении типов? Это же похоже на неестественный трюк, какой-то костыль чтоли?
Или вниз по дереву наследования это вполне нормально?
- Почему getChildAt() возвращает объект типа DisplayObject, а не MovieClip...

Mareg, наследие AS2, понятно.

Старый 09.07.2013, 15:38
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 12  
Ответить с цитированием
belv
[+1 16.07.13]
[+4 16.07.13]

Регистрация: Oct 2005
Сообщений: 217
getChildAt(i) возвращает объект типа Star а вы его приводите к типу данных MovieClip , на самом деле объект Star имеет 2 типа данных Star и MovieClip , так как он расширяет класс MovieClip.
А присваиваем переменной var mc = getChildAt(i); для того чтобы вызвать метод экземпляра dispose().

Старый 09.07.2013, 17:21
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 13  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
Цитата:
getChildAt(i) возвращает объект типа Star
А почему, кстати? Ведь согласно справочнику функция getChildAt имеет тип возвращаемого значения равный DisplayObject. Или в справочнике указываются абстрактные, какие-то универсальные типы. Не совпадающие с конкретикой.

Старый 09.07.2013, 17:45
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 14  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Все правильно написано, getChildAt возвращает DisplayObject, у которого нет метода stop()
На
Код AS3:
 getChildAt(i).stop()
компилятор вообще то ругается, поскольку у DisplayObject нет такого метода (полиморфизм окда), а сама флешка совершенно без понятия, у какого подкласса класса DisplayObject есть этот метод, поэтому никакого приведения к MovieClip, а тем более к Star не происходит.
Поэтому единственным способом будет указанный товарищем Bletraut, безопасно привести наш DisplayObject к MovieClip и вызвать метод stop уже у приведенного объекта.

Тогда ошибка может возникнуть только при выполнении кода, если наш полученный DisplayObject нельзя привести к MovieClip, а следовательно и нельзя вызывать метод stop()

Старый 09.07.2013, 18:45
NoisyFlasher вне форума Посмотреть профиль Отправить личное сообщение для NoisyFlasher Найти все сообщения от NoisyFlasher
  № 15  
Ответить с цитированием
NoisyFlasher
 
Аватар для NoisyFlasher

Регистрация: Aug 2012
Сообщений: 70
Цитата:
Вот так у меня останавливает анимацию
Код AS3:
var mc = getChildAt(i);
mc.dispose();
Поясните, пожалуйста, не очень понял.
Во-первых, у DisplayObject ведь нет dispose(), ведь так?..
Во-вторых, останавливать анимацию удалением информации из памяти - не слишком ли лихо?) Или я что-то не так понял?

Добавлено через 5 минут
Fogflasher
Цитата:
- Есть ли какие-то потери при таком приведении типов? Это же похоже на неестественный трюк, какой-то костыль чтоли?
Или вниз по дереву наследования это вполне нормально?
Ничего неестественного в нем нет, насколько я понимаю. Это то, что называется полиморфизмом - т.е. определенный инструмент. В одних случаях он может быть весьма полезен, в других от него лучше держаться подальше.

Цитата:
- Почему getChildAt() возвращает объект типа DisplayObject, а не MovieClip...
Потому что аргументом для addChild() может быть все, что угодно, начиная от DisplayObject. Поэтому при возврате детей выдается наиболее "высокий" в лестнице наследования класс.

Старый 09.07.2013, 19:17
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 16  
Ответить с цитированием
belv
[+1 16.07.13]
[+4 16.07.13]

Регистрация: Oct 2005
Сообщений: 217
Во-первых, у DisplayObject ведь нет dispose(), ведь так?..
Во-вторых, останавливать анимацию удалением информации из памяти - не слишком ли лихо?) Или я что-то не так понял?
Отвечаю:
var mc = getChildAt(i); где getChildAt(i) -это объект Star
через переменную mc ссылающуюся на этот объект вызываем метод dispose() , который описан в классе Star, который останавливает таймер и соответственно анимацию.
Чтобы увидеть это наглядно , что вызывается именно этот метод вызывается, переименуйте его например в disposeAnimateInStar
а потом вызовите его mc.disposeAnimateInStar();
По поводу типов , в цикл добавьте код
Код AS3:
trace(getChildAt(i) is DisplayObject); // для проверки нужно импортировать в класс import.display.DisplayObject
trace(getChildAt(i) is Star);
trace(getChildAt(i) is MovieClip);
Все трэйсе возвращают true - это дает понять , что все объекты getChildAt(i) имеют типы данных
DisplayObject
MovieClip
Star
Потому-что происходит наследование.


Последний раз редактировалось belv; 09.07.2013 в 19:31.
Старый 09.07.2013, 20:30
NoisyFlasher вне форума Посмотреть профиль Отправить личное сообщение для NoisyFlasher Найти все сообщения от NoisyFlasher
  № 17  
Ответить с цитированием
NoisyFlasher
 
Аватар для NoisyFlasher

Регистрация: Aug 2012
Сообщений: 70
А, блин.
Прошу пардону, мой косяк - я в код Star'a не поглядел и теперь сидел и думал, откуда у DisplayObjecta dispose))

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

Теги
movieclip , stop() , Мук , ошибка 1061
Опции темы
Опции просмотра

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

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


 


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


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