![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Мне нужно добавить моему DisplayObject динамическое свойство, например
someDispObj.someVar = 10; как я могу это сделать без создания динамического класса? |
|
|||||
|
Регистрация: Sep 2006
Сообщений: 145
|
С мувиклипами такое точно проходит
|
|
|||||
|
Тебе нужен динамический класс, MovieClip подойдет, но вообще это не красиво.
|
|
|||||
|
Там для кое-каких не MovieClip-ов тоже чудесным образом проходит, если во Flash IDE собирать, а потом, когда пытаеся заюзать Tween-овую либу, компилируя mxmlc и говоришь автору "Чувак, падает!". Автор делает каменное лицо и заявляет что у него все работает, а для не визуальных объектов твинер применить никогда не потребуется.
Если потребовалось что-то сохранить для объекта, но на нём самом этого делать не нужно/нельзя, то на ум приходят решения: 1. Меппинг значения в Dictionary - мепит та подсистема, которой нужны эти значения. Одно из достоинств - 2 подсистемы могут держать для объекта свои разные значения. Недостатки - куча кода, надо следить очень внимательно за добвалением и удалением. 2. Обертка, т.е. храним у себя в подсистеме не сами объекты, а объекты со свойтсвами и ссылкой на эти оригинальные объекты. За соответствием значений и объектов уследить проще, чем в первом случае, но эти обертки надо как-то добавлять и удалять в нашу подсистему. 3. Можно вообще везде таскать обертки вместо объектов, если есть возможность влезть во все места 4. Еще проще (если ограничения наследования не включатся) отнаследоваться и добавить поля и везде таскать наследника, если, опять же есть доступ во все части, где объекты используются. Кстати, какая цель? Просто, я подозреваю, что для Вашей задачи есть решение гораздо красивше этих 4-х и не требующее никаких меппингов/списков/регистров этих объектов. Последний раз редактировалось expl; 12.06.2012 в 23:06. |
|
|||||
|
У меня есть объект, которому я добавляю некоторую функциональность с помощью статического метода другого класса. Чтото на подобии своего TweenLite. Допустим что я приеняю к объекту гравитацию. Затем где то в коде мне нужно будет определять есть на этом объекте гравитация или нет. Наиболее удобным вариантом, как мне кажется, является создание в моём объекте переменной isGravity, на которую я буду воздействовать вызывая статический метод. Но такое не прокатывает для всех типов DisplayObject. Может тогда завести в этом статическом классе массив, в который пушить объект на который применили гравитацию, а потом смотреть циклом в этот массив и определять есть ли такой объект в массиве?
|
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Создайте соответствующий интерфейс со свойством isGravity, который должны будут реализовать объекты, с которыми может работать ваш класс, и реализуйте его.
Или еще вариант. Создать дополлнительный "подкласс" в классе "менеджере" этих объектов, например, MyGravityObjectRegistration. Создавать экземпляр данного класса при добавлении объектов с графитацией, и в нём уже хранить ссылку на сам объект и дополнительные параметры. Последний раз редактировалось udaaff; 13.06.2012 в 12:24. |
|
|||||
|
как то не хотелось бы создавать отдельный класс, ради одного свойства. Для этого и использую в данном случае статический метод, вместо создания класса.
|
|
|||||
|
Можно провернуть вот такой изврат (исключительно ради изврата):
package { import flash.display.Sprite; public class tests extends Sprite { private var _enemy : Unit = new Unit(); public function tests() { var propName : String = 'foo'; traceProperty(_enemy, propName);//target don't contain prop 'foo' addProperty(_enemy, 'foo', 'bar'); traceProperty(_enemy, propName);// bar } private function addProperty(target : Object, propName : String, defValue : *):void{ Object(target).constructor.prototype[propName] = defValue; } private function traceProperty(target : Object, propName : String):void{ try{ trace(target[propName]); } catch(error : Error){ trace("target dont contain prop " + propName); } } } } internal class Unit { public function Unit() { } }
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ" Мои ачивки: художник-паразит. Последний раз редактировалось ChuwY; 13.06.2012 в 15:20. |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:29. |
|
|
« Предыдущая тема | Следующая тема » |
|
|