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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 03.03.2011, 07:34
mechman вне форума Посмотреть профиль Отправить личное сообщение для mechman Найти все сообщения от mechman
  № 1  
Ответить с цитированием
mechman

Регистрация: Jul 2004
Сообщений: 52
Question Как вызвать свой метод не приводя к типу

Здравствуйте, коллеги по цеху!

Есть менеджер объектов. На вход ему подаётся ссылка на объект.
Подаваемые объекты экземпляры разных классов, но в любом случае эти классы расширяют (extends) Sprite.

Менеджер должен в каждом объекте в процессе работы с ним запускать метод.
Делаю так: currentPage.setPause(true);
(currentPage - ссылка на объект).

Но конечно ругается FlashDevelop:
Error: Call to a possibly undefined method setPause through a reference with static type flash.displayisplayObject.

Всегда в таком случае привожу к типу: (currentPage as SimplePage).setPause(true);
Но в этом случае объект может быть нескольких типов.

Уважаемые, подскажите изящное решение. Нет желания огород городить.


Последний раз редактировалось mechman; 03.03.2011 в 07:37.
Старый 03.03.2011, 08:27
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 2  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Всегда в таком случае привожу к типу: (currentPage as SimplePage).setPause(true);
Но в этом случае объект может быть нескольких типов.
Нормальный способ: Сделайте им общий интерфейс, например IPausable c с единственным методом setPause(true) (вместо этого метода лучше воспользоваться сеттером/геттером) и приводите к интерфейсу.
Плохой способ. Приводите к Object, ругаться перестанет.

Старый 03.03.2011, 09:24
mechman вне форума Посмотреть профиль Отправить личное сообщение для mechman Найти все сообщения от mechman
  № 3  
Ответить с цитированием
mechman

Регистрация: Jul 2004
Сообщений: 52
Точно. Освоился с интерфейсами, но ошибка осталась.
Вот код интерфейса:
Код AS3:
package pages 
{
	public interface IPausable
	{
		function setPause (p:Boolean) :void;
	}
}
Но FlashDevelop всё равно ругается на строчку:
Код AS3:
_tempNewPage.setPause(true);
Подскажите, пожалуйста, что не так?

Старый 03.03.2011, 09:32
cleptoman вне форума Посмотреть профиль Отправить личное сообщение для cleptoman Найти все сообщения от cleptoman
  № 4  
Ответить с цитированием
cleptoman
 
Аватар для cleptoman

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
а в классах указали, что они реализуют этот интерфейс?
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

Старый 03.03.2011, 09:42
mechman вне форума Посмотреть профиль Отправить личное сообщение для mechman Найти все сообщения от mechman
  № 5  
Ответить с цитированием
mechman

Регистрация: Jul 2004
Сообщений: 52
Да.
Код AS3:
	public class GameLevelX extends Sprite implements IPausable{

Старый 03.03.2011, 09:47
cleptoman вне форума Посмотреть профиль Отправить личное сообщение для cleptoman Найти все сообщения от cleptoman
  № 6  
Ответить с цитированием
cleptoman
 
Аватар для cleptoman

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
Код AS3:
(_tempNewPage as IPausable).setPause(true);
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

Старый 03.03.2011, 09:52
mechman вне форума Посмотреть профиль Отправить личное сообщение для mechman Найти все сообщения от mechman
  № 7  
Ответить с цитированием
mechman

Регистрация: Jul 2004
Сообщений: 52
В точку!
Заработало )
Благодарю!

Старый 03.03.2011, 13:45
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 8  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
@cleptoman а вот поясните с фигали приводить к типу если implements все же сделал? поидее и без типа должно работать! странно

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

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
а с фигали он все сделал, если _tempNewPage был объявлен как другой тип?
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

Старый 04.03.2011, 01:52
mechman вне форума Посмотреть профиль Отправить личное сообщение для mechman Найти все сообщения от mechman
  № 10  
Ответить с цитированием
mechman

Регистрация: Jul 2004
Сообщений: 52
Цитата:
@cleptoman а вот поясните с фигали приводить к типу если implements все же сделал? поидее и без типа должно работать!
Ошибка вываливается на этапе компиляции. Я так понял - компилятор, если не привести к типу, не знает есть ли метод setPause в указанном объекте. Поэтому и ругается.

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

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

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


 


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


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