![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
У меня есть класс Vector2 (обычный математический вектор со всеми функциями)
Я хочу сделать что-то вроде дебаг отрисовки всех его экземпляров. Но дабы не смешивалить все вектора хочу сделать рисование разными цветами на разных "слоях". идентификатор слоя — это хэш имени класса экземпляра, который вызвал конструктор Vector2. Вопрос: Как узнать в конструкторе Vector2 кто его вызвал, НЕ ПЕРЕДАВАЯ ПАРАМЕТРОВ (Хочется универсальности) Думал как то обыграть через arguments.callee но хозяина функции тоже не понял как найти.
__________________
To beer or no to beer? That is the question... |
|
|||||
|
Увы, никак. Только даже если можно было бы — Вам бы это не помогло.
Приведите пример кода, как бы Вы хотели это дело видеть, может я не понимаю чего.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Класс Main
Класс MyBox Класс Vector2 public static var debug:Boolean = false; public static var layers:Object; public function Vector2() { if(Vector2.debug) draw(ОБЬЕКТ_ВЫЗВАВШИЙ_КОНСТРУКТОР); } public function draw(ОБЬЕКТ_ВЫЗВАВШИЙ_КОНСТРУКТОР:Object):void { if(!layers) layers = {}; var color:uint if(layers["hash_"+ОБЬЕКТ_ВЫЗВАВШИЙ_КОНСТРУКТОР]) { color = layers["hash_"+ОБЬЕКТ_ВЫЗВАВШИЙ_КОНСТРУКТОР]; }else { color = getRandomColor(); layers["hash_"+ОБЬЕКТ_ВЫЗВАВШИЙ_КОНСТРУКТОР] = color } drawLine(startPoint,endPoint,color); } ну разумеется соверадийть toString() у всех
__________________
To beer or no to beer? That is the question... |
|
|||||
|
Лучше подойдёт Dictionary и без презервативов вроде "hash"+..
Я вот проникнутся идеей так и не могу. Врубили дебаг, создали вектор и тут же его надо отрисовать в объекте, который его создал? А что если этот объект не DisplayObject?
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
никто не сказал что в том же объекте.
имена типов нужны для разных цетов, а рисоваться все будет в отдельных дебаг слой Добавлено через 2 минуты и да на счет дикшинари - weak references не работают. GC не отметает удаленные объекты потому что ссылки остаются в словаре. в каких точно случаях - не знаю, но мемори лики мне не нужны.
__________________
To beer or no to beer? That is the question... |
|
|||||
|
Цитата:
Цитата:
У экземпляра должен быть метод debugTrace(), который может дёрнуть статичный метод и передать ему ссылку на себя.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
дело в том что использование объектов в виде ключей расценивается как ссылка на этот объект и гарбиджколлектор не будет удалять этот объект из оперативки пока на него есть хоть одна ссылка. В случае с объектам дисплей листе (например со снегом программным был случай) по непонятным причинам после удаления они не удаляются из памяти при использовании дишенари.
Зная экземпляр можно узнать тип (класс) и привести его к строке. Ничего дополнительного в класс Vector2 передаваться не может.
__________________
To beer or no to beer? That is the question... |
|
|||||
|
Цитата:
Цитата:
Кстати, а когда использовали Object — проблемы не было? Я всё ещё могу достучаться до объекта через myHash.myObject Ну как Вы будете вызывать метод, который отрисует этот вектор?
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Цитата:
![]() или планируется работа приложения в режиме 24х365? мне кажется, в последнее время вокруг GC какой-то ненужный ажиотаж поднялся. А по сабжу - я недавно хотел сделать аналогичную штуку типа статического трейсера, который сообщал бы, из какого метода какого экземпляра его вызвали. Общим собранием было решено, что это невозможно. Были идеи насчет анализа стека объекта Error (там есть метод, который возвращает стек вызовов на текущий момент), можно сюда покопать. |
|
|||||
|
Error#getStackTrace.
Он возвратит только строчку кода и имя класса, но не ссылку на экземпляр. К тому же в релиз-плеере данная фишка недоступна.
__________________
Тут мужик танцует и поёт про флэш |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:11. |
|
|
« Предыдущая тема | Следующая тема » |
|
|