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

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

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

Регистрация: Oct 2006
Сообщений: 2,283
dimarik,предложи свой вариант этого кода:
Код AS3:
var cl:*= getDefinitionByName(linkage_id);
if (cl is Class) {
	view = new cl() as DisplayObject;
	addChild(view);
}
Самое страшное что тут может быть - в cl запишется null.Тогда компоненту просто не выставится вьюха, что будет сразу заметно.На крайняк можно кидать эксепшен с описанием.

Добавлено через 6 минут
Цитата:
Языки с высокой степенью типизации сделаны не для того, чтобы мы проверяли результат исполнения приложения во время исполнения
Как же мне тогда узнать нажали мыша или кнопку на клаве без проверки типа?

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Что же самое страшное в твоем примере? Например, у меня есть MyObject extednds DisplayObject (на самом деле extends DisplayObject нельзя, можно от других наследников DisplayObject). А вот в нем объявлен метод, например, moveTo(x, y). Такого метода, конечно, нет у DisplayObject и конструкция типа
Код AS3:
view = new cl() as DisplayObject;
view.moveTo(0, 0);
Вызовет при компиляции справедливый Error: нет такого метода у объекта с типом DisplayObject.
Что же, нам придется либо кастовать view к MyObject с проверкой результата приведения на null, либо... сама суть такого инстанцирования неправильна.

Твой пример показывает скорее всего то, как еще можно сделать, в обход проверки типизации в compile time. Такие случаи бывают, да. Например, ну, никак нельзя допустить вкомпиливания кода со всеми зависимостями в прелоадер. Тогда мы можем так поступить. И это осознанный шаг.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 21.09.2016, 21:39
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 33  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,283
ну так на то оно и view - голое визуальное представление, стандартного DisplayObject вполне достаточно.

Добавлено через 2 минуты
Вообще эта конструкция для простого связывания графики из библиотеки с пользовательскими классами.Для новичка большего и не нужно имхо.

Старый 21.09.2016, 21:44
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 34  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от undefined Посмотреть сообщение
Как же мне тогда узнать нажали мыша или кнопку на клаве без проверки типа?
Я привел пример проверки event is <ConcreteEvent>. Но лучше сделать каждому событию свой обработчик. Либо, если неважен подтип события, сделать его общим

Код AS3:
this.addEventListener(IOErrorEvent.IO_ERROR, this.handler_error);
this.addEventListener(SecurityErrorEvent.SECURITY_ERROR, this.handler_error);
 
private function handler_error(event:ErrorEvent):void {
    trace(this, "handler_error", event);
}
Добавлено через 3 минуты
Цитата:
Сообщение от undefined Посмотреть сообщение
ну так на то оно и view - голое визуальное представление, стандартного DisplayObject вполне достаточно.
Вообще эта конструкция для простого связывания графики из библиотеки с пользовательскими классами.Для новичка большего и не нужно имхо.
Вы всегда только на картинку смотрите? Управлять ею не будете? Неужели у символа из библиотеки в роду только DisplayObject?
А вот если к символу более сложный чем MоvieClip, класс привязан? Как вы будете управлять экземпляром?
То-то же )
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 21.09.2016, 21:52
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 35  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,283
Цитата:
Я привел пример проверки event is <ConcreteEvent>
Ну значит проверка типа в рантайме допустима.Ок.
Цитата:
Но лучше сделать каждому событию свой обработчик.
В большинстве случаев 90% кода обработчиков будут совпадать, отличие, например, в моем случае только в том, что пишется в лог.Получается будем иметь два одинаковых метода отличающихся одной строкой.Уж лучше я лишний иф напишу.

Добавлено через 9 минут
Цитата:
Вы всегда только на картинку смотрите? Управлять ею не будете? Неужели у символа из библиотеки в роду только DisplayObject?
А вот если к символу более сложный чем MоvieClip, класс привязан? Как вы будете управлять экземпляром?
То-то же )
Как раз для этого и вводится иерархия с GameObjectBase в корне.Хочется чего-то большего чем есть в DisplayObject?Вперед, наследуемся от GameObjectBase и дописываем свой функционал.

Старый 21.09.2016, 22:05
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 36  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Пишите, шура, пишите. Я вам не нужен )
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Вообще, эта тема с
Код AS3:
var cl:*= getDefinitionByName(linkage_id);
она же для того, чтобы вычитать в XML название класса для создания какой-нибудь финтифлюшки. И понятно, что тут зарыта куча подводных камней, как всегда бывает при String-typed вместо Strong-typed. Опечатки, кодировки, заглавные/прописные, дефисы/подчеркивания и просто невнимательность, в результате которой объявленного в XML класса не оказывается в скомпилированной библиотеке. Эти проблемы практически нерешаемы со 100% гарантией (хотя от всех каллиграфических проблем можно избавиться, используя числовые id вместо названий классов, а названия сопоставить id во "внутреннем" реестре классов). Но вот избавиться от String-typed не так уж сложно обычным свитчем, где по значению строки linkage_id выдается ссылка на настоящий, 100% вкомпилированный Класс.
Ну, типа
Код AS3:
var className:String = linkage_id.toUppercase();
switch (className)
{
	case "CIRCLE" : _view = new Circle(); break;
	case "RECTANGLE" : _view = new Rectangle(); break;
	case "TRIANGLE" : _view = new Triangle(); break;
	case "ELLIPSE" : _view = new Ellipse(); break;
	default : _view = new LostPicSample();
}
__________________
Reality.getBounds(this);

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
undefined ваша структура

Цитата:
Код AS3:
var cl:*= getDefinitionByName(linkage_id);
if (cl is Class) {
	view = new cl() as DisplayObject;
	addChild(view);
}
от плохой реализации. Приведите мне четкий пример, когда вообще мне нужно использовать getDefinitionByName ?
__________________
Марк Tween


Последний раз редактировалось dimarik; 22.09.2016 в 21:34. Причина: форматирование кода
Старый 22.09.2016, 05:55
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 39  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от in4core Посмотреть сообщение
Приведите мне четкий пример, когда вообще мне нужно использовать getDefinitionByName ?
Я могу привести пример.
Делаешь ты, к примеру, игру. В редакторе локаций добавляешь персонажей или объекты, которые в игре представлены определенными классами. Сама локация сохраняется в XML или в JSON, со строчным представлением всех классов персонажей и объектов и их настройками. Чтобы потом этих персонажей в игре воссоздать в нужном месте, как раз и используется getDefinitionByName().

Можно конечно их пронумеровать в игре, или приписать им какое-то название, по которому их находить. Но чем эта реализация лучше?
__________________
Ко мне можно и нужно обращаться на ты)

Старый 22.09.2016, 10:25
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 40  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Но чем эта реализация лучше?
а ведь я специально использовал геометрические фигуры, ради синенького слова Rectangle. Ни на что не намекает?
__________________
Reality.getBounds(this);

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

Теги
классы , ООП
Опции темы
Опции просмотра

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

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


 


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


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