Класс настроек в ActionScript 3
Запись от Lecosson размещена 19.07.2010 в 00:00
Прошу не судить строго, во флеше я начинающий, но надеюсь, что кому-нибудь моя писанина пригодится.
Частенько при разработке наFlash программисту нужно хранить данные и настройки во время сеанса исполнения программы. Предлагаю класс на AS3, используется в качестве саморасширяемого хранилища и наследуется от flash.utils.Proxy. У него есть особенность, которую нельзя реализовать штатными возможностями Flash/ActionScript – он может перехватывать обращения к несуществующим методам и свойствам объекта.
Вот как мог бы выглядеть такой класс на языке AS3:
package { import flash.utils.Proxy; import flash.utils.flash_proxy; import flash.display.Sprite; import flash.events.Event; dynamic public class Config extends Proxy { // СВОЙСТВА private static var _singletone_exist:Boolean=false; private static var _root_object:Sprite=null; private static var _properties:Object=new Object(); // ПРЕДОПРЕДЕЛЕННЫЕ ПАРАМЕТРЫ public const text1:String="example text 1"; // КОНСТРУКТОР public function Config(rootObject:Sprite=null) { super(); if (!_singletone_exist) { _singletone_exist=true; _root_object=rootObject; _root_object.dispatchEvent(new Event("conf_ok", true)); }; } // МЕТОДЫ Proxy-хранилища override flash_proxy function getProperty(name:*):* { return (name in _properties) ? (_properties[name]) : ('Свойство "' + name + '" не существует!'); } override flash_proxy function setProperty(name:*, value:*):void { _properties[name]=value; } } }
В теле класса определяются несколько статических переменных. Это означает, что существует всего один их экземпляр, который используется всеми объектами данного класса. Например, в переменной _singletone_exist у меня хранится информация о том, был ли экземпляр данного класса создан раньше. Это позволяет создать подобие Singleton. В переменной _root_object хранится ссылка на Root флэш-ролика, переданный в конструктор первого экземпляра Config. И, наконец, в массиве (вернее, динамическом объекте) _properties хранятся все данные, которые мы захотим поместить в наше хранилище.
Настоящая магия начинается при переопределении функций getProperty и setProperty. Встретившись с обращением к незнакомому свойству класса, Proxy передаст в эти функции параметры обращения (начиная с имени свойства). Вот как выглядит использование данного класса на практике:
Данный пример предельно упрощен. На практике в него следут многое добавить. Вам понадобятся события, сообщающие об ошибках инициализации, подгрузка параметров из файла или с сервера, а со временем – использование Bindable-данных, чтобы не возиться с обновлением экрана при изменении одной переменной в Config.
Всего комментариев 10
Комментарии
22.07.2010 11:59 | |
А кто вас научил в именах переменных подчеркивания использовать?
|
22.07.2010 12:52 | |
Настоящая магия была у __resolve, а это подобие настоящей магии.
|
23.07.2010 13:29 | |
Чингачгук, спасибо за наводку. Не знал.
Выходит, я соврал насчет "не реализуется штатными средствами". Блин. |
|
Обновил(-а) Lecosson 23.07.2010 в 13:32
|
23.07.2010 14:15 | |
etc, а Вы как приватные свойства помечаете? Просто я тоже подчеркиваю приват и протектед.
|
23.07.2010 14:32 | |
Думаю _etc имел ввиду подчеркивание между словами. И __resolve - это из старенького - в AS3.0 нет такого слова.
|
23.07.2010 14:43 | |
Я имел ввиду между словами.
|
24.07.2010 21:01 | |
Мне что то совсем не нравится идея заставлять root генерировать события. EventDispatcher`а хватит за глаза, хотя я бы лучше реализовал IEventDispatcher.
|
25.07.2010 11:14 | |
В конструкторе нет проверки на существование аргумента "rootObject". И тут же делается диспатч от его имени.
|
27.07.2010 12:21 | |
А я на PHP переменные обзываю с подчеркиваниями между словами.
а на AS кэмэл стайл. Пытаюсь на PHP обзывать так же. |
Последние записи от Lecosson
- генератор ландшафта (21.12.2013)
- Рецепт серверного Flash (29.05.2012)
- Класс настроек в ActionScript 3 (19.07.2010)