![]() |
Как добавить динамическую переменную к DisplayObject без создания доп. класса
Мне нужно добавить моему DisplayObject динамическое свойство, например
someDispObj.someVar = 10; как я могу это сделать без создания динамического класса? |
Никак. Зачем Вам такое понадобилось? Думаю, Вам нужно выделить этот ДО в отдельную сущность-класс.
|
С мувиклипами такое точно проходит
|
Тебе нужен динамический класс, MovieClip подойдет, но вообще это не красиво.
|
Там для кое-каких не MovieClip-ов тоже чудесным образом проходит, если во Flash IDE собирать, а потом, когда пытаеся заюзать Tween-овую либу, компилируя mxmlc и говоришь автору "Чувак, падает!". Автор делает каменное лицо и заявляет что у него все работает, а для не визуальных объектов твинер применить никогда не потребуется.
Если потребовалось что-то сохранить для объекта, но на нём самом этого делать не нужно/нельзя, то на ум приходят решения: 1. Меппинг значения в Dictionary - мепит та подсистема, которой нужны эти значения. Одно из достоинств - 2 подсистемы могут держать для объекта свои разные значения. Недостатки - куча кода, надо следить очень внимательно за добвалением и удалением. 2. Обертка, т.е. храним у себя в подсистеме не сами объекты, а объекты со свойтсвами и ссылкой на эти оригинальные объекты. За соответствием значений и объектов уследить проще, чем в первом случае, но эти обертки надо как-то добавлять и удалять в нашу подсистему. 3. Можно вообще везде таскать обертки вместо объектов, если есть возможность влезть во все места 4. Еще проще (если ограничения наследования не включатся) отнаследоваться и добавить поля и везде таскать наследника, если, опять же есть доступ во все части, где объекты используются. Кстати, какая цель? Просто, я подозреваю, что для Вашей задачи есть решение гораздо красивше этих 4-х и не требующее никаких меппингов/списков/регистров этих объектов. |
У меня есть объект, которому я добавляю некоторую функциональность с помощью статического метода другого класса. Чтото на подобии своего TweenLite. Допустим что я приеняю к объекту гравитацию. Затем где то в коде мне нужно будет определять есть на этом объекте гравитация или нет. Наиболее удобным вариантом, как мне кажется, является создание в моём объекте переменной isGravity, на которую я буду воздействовать вызывая статический метод. Но такое не прокатывает для всех типов DisplayObject. Может тогда завести в этом статическом классе массив, в который пушить объект на который применили гравитацию, а потом смотреть циклом в этот массив и определять есть ли такой объект в массиве?
|
Создайте соответствующий интерфейс со свойством isGravity, который должны будут реализовать объекты, с которыми может работать ваш класс, и реализуйте его.
Или еще вариант. Создать дополлнительный "подкласс" в классе "менеджере" этих объектов, например, MyGravityObjectRegistration. Создавать экземпляр данного класса при добавлении объектов с графитацией, и в нём уже хранить ссылку на сам объект и дополнительные параметры. |
как то не хотелось бы создавать отдельный класс, ради одного свойства. Для этого и использую в данном случае статический метод, вместо создания класса.
|
Не экономьте байты. И место в листингах кода.
|
Можно провернуть вот такой изврат (исключительно ради изврата):
Код AS3:
|
ChuwY, Ваш способ сработает только для одного экземпляра Unit:
Код AS3:
Код AS3:
//null //true //null //true //true //null //null Можно еще deleteProp добавить по вкусу. И в словаре сохранять объект, тогда можно будет хранить сразу несколько свойств для одного экземпляра. Вообще этот кусок кода достоен сами знаете какого сайта. И в реальном проекте, я бы не стал так делать и Вам не советую!!! |
Цитата:
Код AS3:
|
Я походу не правильно выразился. Я имел в виду, что у любого экземпляра класса значение свойства будет одинаковым. Т.е. выставляя свойство оно будет выставлено для всех экземпляров этого класса. Фактически у Вас получилась статическая переменная, а у меня (через туже статическую переменную) не статическая. И соответственно в зависимости от того, что нужно ТС придется либо Ваш, либо мой (либо оба) способа использовать.
|
Цитата:
2. Спрашивать есть ли гравитация в этом случае будете у этого TweenLite 3. Если это не либа, которой придется работать с левым кодом - сделайте свой класс/интерфейс c нужными свойствами - ибо добавление их сверху и слежение за списком - это перебор 4. Можете, конечно, как ChuwY показал попробовать |
всем спасибо) Заюзаю dictionary ))
|
Цитата:
Но не факт. Я может быть где-то и в надклассе вставил. Сильно зависит от задачи. |
| Часовой пояс GMT +4, время: 04:44. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.