![]() |
Про правильную организацию, про оптимизацию, и еще кое-что.
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. чтоб вам подсказали, чего там не работает, нужен код. "телепаты в отпуске"
то, что stage нулевой это как раз ок. раз спрайт не в display list, значит и stage ему не нужен. удалить самого себя можно Код:
parent.removeChild(this)2. с нулевой альфой рендерит. причём альфовые рендеринги самые тяжёлые. 3. http://as3.ru/?p=16#more-16 или можно просто сделать ссылки на функции.. врятли это повысит производительость) но вы уверены, что читаемость страдает?) не зря же функции клали в пакет-класс. |
[quote=fljot;757213]1. чтоб вам подсказали, чего там не работает, нужен код. "телепаты в отпуске"
то, что stage нулевой это как раз ок. раз спрайт не в display list, значит и stage ему не нужен. Код:
parent.removeChild(this)Цитата:
Цитата:
Цитата:
Пробовал добавлять к базовому package Код:
public function Sin(a:Number):Numberpublic var Sin:Function = Math.sin; Оба варианта внутри этого package видно, а в других файлах - нет. Цитата:
|
1. обьяви переменную в документ класее тип main=Stage
и потом docclacc.main.addEvent..... |
Цитата:
|
Цитата:
зы: это уже обсуждалось недавно на этом форуме. |
2автор: ты экземпляр класса добавь сначало в displayList и будет тебе stage.
|
по 1-му пункту:
Код:
public class YourClass extends SpriteКод:
YourClass.myStage = this; |
| Часовой пояс GMT +4, время: 00:11. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.