![]() |
|
||||||||||
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
Цитата:
Цитата:
|
|
|||||
|
Один ентерФрейм, с тысячей методов выполниться быстрее, чем тысяча ентерФреймов.
|
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
samana Спасибо!
|
|
|||||
|
Цитата:
- FP берет список подписчиков - для каждого подписчика создается НОВЫЙ объект класса Event - каждому подписчику отдается его собственный экземпляр класса Event Если же мы сделаем так: package { import flash.display.Shape; import flash.errors.IllegalOperationError; /** * Глобальный диспатчер события flash.events.Event.ENTER_FRAME * * @author gloomyBrain */ public final class EnterFrameBroadcaster extends Shape { private static var _instance:EnterFrameBroadcaster; /** * Экземпляр синглтона */ public static function get instance():EnterFrameBroadcaster { if (!EnterFrameBroadcaster._instance) EnterFrameBroadcaster._instance = new EnterFrameBroadcaster(); return _instance; } /** * Для получения экземпляра используется статический акцессор EnterFrameBroadcaster.instance! */ public function EnterFrameBroadcaster() { super(); if (EnterFrameBroadcaster._instance) throw new IllegalOperationError("Для получения экземпляра используется статический акцессор instance!"); } } }
__________________
...вселенская грусть |
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
gloomyBrain Спасибо! Вот когда я читал форум раньше, то сложилось впечатление, что синглетон - это ВООБЩЕ не нужный паттерн. А вот чем больше я углубляюсь в архитектуру,
тем больше понимаю его полезность. И не важно, как его реализовать, главное, что это будет всегда один и тот же экземпляр. |
|
|||||
|
Ну на самом деле тут синглтон необязателен, все можно сделать через статические методы подписки/отписки.
Я вообще не знаю, где синглтон обязателен или хотя бы чуть более полезен чем какой-то другой вариант статического доступа =)
__________________
...вселенская грусть |
|
|||||
|
Регистрация: Oct 2013
Сообщений: 5
|
Такой вариант лучше? Здесь, как я понимаю ENTER_FRAME только один.
Единственное для упрощения, на каждом новом кадре я проверяю только самый первый объект из массива, а не перебираю весь массив, т.к. вряд ли кто-то сможет дважды кликнуть мышкой за один кадр, при 60fps. Является ли такое упрощение нормальным при разработке полноценного приложения? package { import flash.display.MovieClip; import flash.events.Event; import flash.events.MouseEvent; public class Main extends MovieClip { private var circle: Array = new Array();; private var new_circle: CircleAnimation; public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); stage.addEventListener(MouseEvent.CLICK, onClick); addEventListener(Event.ENTER_FRAME, onEnter); } private function onClick(e:MouseEvent): void { new_circle = new CircleAnimation(); circle.push(new_circle); addChild(circle[circle.length - 1]); circle[circle.length - 1].x = mouseX; circle[circle.length - 1].y = mouseY; } private function onEnter(e:Event): void { if (circle[0] != null) // проверка, есть ли ещё объекты в массиве { if (circle[0].currentFrame == circle[0].totalFrames) { removeChild(circle[0]); circle.splice(0, 1); // удаление из массива самого "старого" объекта из массива, который полностью воспроизвёлся } } } } } А ещё лучше ивент, срабатывающий при достижении последнего кадра. Последний раз редактировалось LIGHTHILL; 31.10.2013 в 19:41. |
![]() |
![]() |
Часовой пояс GMT +4, время: 07:16. |
|
|
« Предыдущая тема | Следующая тема » |
|
|