![]() |
|
||||||||||
|
|||||
|
Дедушка Кнут в третьем томе очень много и пространно говорил о разделении интерфейса и реализации. К сожалению, когда мы привязываем какой-бы то ни было код к мувиклипу, о разделении реализации и интерфейса - и речи быть не может. Это раз. Еще болше и пространнее дедушка Дональд Кнут говорил об инкапсуляции событий. Я не спорю, когда ты помещаешь код внутрь мувиклипа, ты его инкапсулируешь, но в этом случае ты привязываешь код к конкретному ЭКЗЕМПЛЯРУ класса а не к классу в целом. Какая-то кривоватенькая инкапсуляция получается, не находишь? И третье, что нам говорил дедушка Кнут - об экономии ячеек памяти. Но и тут выясняется, что обработчик событий onClipEvent привязан прототипированием к классу MovieClip, а значит, он создаёт внутри этого класса статический неименованный объект (аналог Listener). И получается, что для каждого экземпляра MovieClip при введении обработчика onClipEvent создаётся статический объект внутри класса. И где же тут экономия? В случае с Listener все события валятся на один объект, являющийся экземляром класса Listener, а следовательно в любой момент могут быть удалены сборщиком мусора без особых потерь в производительности (простой финализацией экземпляра Listener). В случае же с onClipEvent сборщику мусора приходится чистить статические объекты внутри класса, а если учесть, что в Java, например, это возможно только при явной финализации класса в целом, то во флэше - это не происходит никогда - ибо для этого придётся финализировать класс MovieClip, а это, как вы понимаете, невозможно. (Чёрт возьми, как всё таки механизмы работы виртуальной машины во Flash Player 7 и в SunJVM похожи - до безобразия).
Вот так. Коротенько. Минут на сорок... ![]()
__________________
судью - на мыло, из игроков - вить веревки. Последний раз редактировалось Dindin; 09.07.2004 в 02:12. |
|
|||||
|
да кто же против, удобнее хранить обработчик в отдельном объекте (к слову сказать, что и в этом случае ' ты привязываешь код к конкретному ЭКЗЕМПЛЯРУ класса а не к классу в целом') и пожалуста
я-то имел ввиду Key.addListener(сам мувик) ну и соответсвенно Key.removeListener(),если уж пойдет борьба за экономию хотя, согласен, что с объектом работать удобнее |
|
|||||
|
Цитата:
__________________
судью - на мыло, из игроков - вить веревки. |
|
|||||
|
Регистрация: Jun 2003
Адрес: Москва
Сообщений: 168
|
спасибо, уже получается с вашим кодом
можно объяснить что это: _root.spacepressed я просто вставила код на мувике и вроде как получилось но никаких флагов нигде не ставлю, ни в самом муве, ни на руте, а все равно рука работает как надо, то есть не поднимается при долгом нажатии на пробел странное поведение, вообще spacepressed это пользовательское, или зарезервированное (хотя оно не подсвечивается синим в окне программы) в любом случае спасибо но это не все, если все время жать быстро быстро на пробел, отпуская и нажимая, то рука дергается (в муве tween на 5 фреймов, соответственно зацикливается) что можно сделать? |
|
|||||
|
перед gotoAndPlay(2); проверь на каком фрейме находится твой мувик
если он в процессе проигрывания "руки" то gotoAndPlay не вызывай spacepressed можешь заменить на что угодно (только все spacepressed на один и тот же кейворд ;-) ) это просто флаг, который после нажатия на клавишу сигнализирует о том что клавиша в нажатом положении (мы сами выставляем там true, посмотри первый if. Как только пользователь отпускает клавишу мы ставим в нем false - и при мледующем нажатии один раз вызовется "рука" не уверен что стало понятнее правда.... |
![]() |
Часовой пояс GMT +4, время: 19:06. |
|
|
« Предыдущая тема | Следующая тема » |
|
|