|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
[+1 31.07.08]
Регистрация: Jul 2008
Сообщений: 48
|
Про правильную организацию, про оптимизацию, и еще кое-что.
1. Создаю я спрайт, или, в моем случае - класс наследник спрайта. Хочу добавить листенера на мышку. Если добавляю листенера к себе, не работает, даже когда я аттачу спрайт к stage(вообще не работает, даже в области спрайта).
Добавить же сразу листенера к stage я не могу, т.к. в момент создания он null. Недодумали в адобе, вместо того чтобы сделать глобальный всеуказатель stage, они его сделали локальным для каждого спрайта, указывающим на глобальный когда он аттачится. В общем, в результате мне приходится заводить отдельную однострочную процедуру, которую буду ручками вызывать ПОСЛЕ аттача моего спрайта к сцене. Неудобно. Есть способ лучше? Заодно не получилось и удалить самого себя из списка stage. Тоже нельзя? Вызывал примерно так: this.stage.removeChild(this); 2. Оптимизационный вопрос. Насколько эффективно работает addChild/removeChild, и не лучше ли будет не удалять наследников, а запоминать указатель на них и ставить visible в false? Не будет ли лишних пенальти от приличного количества невидимых спрайтов у stage? И кстати, рендерит ли Flash спрайты с нулевой альфой? Или нулевыми scaleX/scaleY? 3. Как можно сделать глобальные функции rand(), abs(), sin/cos, которые можно будет вызывать без префикса Math? А то читаемость очень страдает. |
|
|||||
2. как я понимаю ничего сверх глобального функции addChild/removeChild не делают. они просто добавляют указатель на твой объект в список. такчто я думаю они работают не намного дольше visible.
__________________
я могу стать всем, если только захочу |
|
|||||
[+1 31.07.08]
Регистрация: Jul 2008
Сообщений: 48
|
Цитата:
Очевидно, все зависит от того, как много бессмысленного оверхеда тратится на обработку пустого/погашенного спрайта. |
|
|||||
1. чтоб вам подсказали, чего там не работает, нужен код. "телепаты в отпуске"
то, что stage нулевой это как раз ок. раз спрайт не в display list, значит и stage ему не нужен. удалить самого себя можно зачем добавлять на сцену? обычно добавляет контейнер сам в себя. т.е. скажем рутовый класс создаёт спарйт и добавляет к себе. 2. с нулевой альфой рендерит. причём альфовые рендеринги самые тяжёлые. 3. http://as3.ru/?p=16#more-16 или можно просто сделать ссылки на функции.. врятли это повысит производительость) но вы уверены, что читаемость страдает?) не зря же функции клали в пакет-класс. |
|
|||||
[+1 31.07.08]
Регистрация: Jul 2008
Сообщений: 48
|
[quote=fljot;757213]1. чтоб вам подсказали, чего там не работает, нужен код. "телепаты в отпуске"
то, что stage нулевой это как раз ок. раз спрайт не в display list, значит и stage ему не нужен. Stage нужен, если мне в этот display list нужно спрайт добавить. Замкнутый порочный круг - без указателя на stage себя к нему не добавить, а без добавления не получить этот указатель . Дурдом. Сделали бы хоть какую-нибудь сабфункцию у объекта DisplayObject типа retrieveStage(). Цитата:
Цитата:
Цитата:
Пробовал добавлять к базовому package и так тоже public var Sin:Function = Math.sin; Оба варианта внутри этого package видно, а в других файлах - нет. Цитата:
|
|
|||||
Регистрация: May 2008
Сообщений: 161
|
1. обьяви переменную в документ класее тип main=Stage
и потом docclacc.main.addEvent..... |
|
|||||
[+1 31.07.08]
Регистрация: Jul 2008
Сообщений: 48
|
Мысль понятна, реализация - нет . Что такое "docclacc"?
|
|
|||||
Цитата:
зы: это уже обсуждалось недавно на этом форуме.
__________________
я могу стать всем, если только захочу |
|
|||||
по 1-му пункту:
public class YourClass extends Sprite { public static var myStage : DisplayObject; //реализация } и в конструкторе YourClass смело обращаешься к myStage
__________________
я могу стать всем, если только захочу |
Часовой пояс GMT +4, время: 17:24. |
|
« Предыдущая тема | Следующая тема » |
|
|