Записи, отмеченные как actionscript
Среда, 21 Май. 2008
Собственно, все написано тут: http://flexblog.ru/2008-05-21/flash-10-skachat-debug-sborka/ Но для тех, кому лень переходить и читать, ссылки на скачивание: Собственно, все дальнейшие посты по теме - в первую очередь, на http://flexblog.ru (там есть и RSS)
Пятница, 21 Март. 2008
Многие наверняка видели " белые квадраты", которые появляются во flex-приложениях, при появлении 2х скроллбаров. В этой короткой статье рассказывается, как можно от них избавиться (два способа).
Продолжить чтение "Белый квадрат у скроллеров - решение проблемы; white box scrollbar issue"
Вторник, 18 Март. 2008
Есть такая замечательная библиотека для программирования с применением Adobe Flex, под названием flexlib. Разумеется, к ней есть документация, которую можно найти на страничке проекта.
Но я хотел бы написать об использовании конкретного класса FlowBox, и о совместимости его с недавно вышедшим Flex 3. (В продолжении статьи). А вот - полный список компонентов, входящих во FlexLib.
Продолжить чтение "Класс FlowBox из flexlib"
Пятница, 14 Март. 2008
Как известно, поддержка HTML тэгов во Flash весьма ограничена. Однако, уже довольно давно появилась возможность определять "свои" тэги. Вчера срочно была нужен материал на эту тему, и я потратил сутки на его поиск. Если сэкономлю кому-то сутки, будет отлично :-) - черканите пару строк в комменты. Сам материал про кастомные HTML теги, собственно, в продолжении обзора.
Продолжить чтение "Новые HTML тэги во Flash / Flex при помощи стилей CSS"
Пятница, 11 Январь. 2008
Сегодня в шутку спорил, чей код сложнее для понимания... И тут взгляд сам собой упал на недавний коммент в моем коде :-) Итак, фрагмент будущего клиента игры Берсерк Онлайн:
private final function gameActionsChanged(e: Event): void {
// TODO: Убить себя об стенку за такой код --baron if (Application.application.mainview.battlepanel != null) {
Application.application.mainview.battlepanel.updateAllowedActions();
}
}
Использование static переменных и методов лично я считаю очень хорошей идеей, особенно во Flash, но - только в случае, если это действительно всего лишь один класс, или ровно один экземпляр класса. Да-да, про синглтоны слышал ;-). Итак, что лично я на дух не переношу:
- не переношу неверную индентацию и лишние пробелы. (Без разницы, что используется - пробелы или табы, хотя я и предпочитаю последние).
- ненавижу переменные с заглавной буквы и классы с маленькой буквы.
- ненавижу дефолтный package - package { }.
- ненавижу сложные if. с более чем 3 бранчами: if (c1) { } else if (c2) { } else if (c3) { } else if (c4) { } else { }.
- ненавижу методы, названия которых написаны с орфографическими/грамматическими ошибками.
- не переношу методы с большим количеством декларированных переменных, чем помещается у меня в дебаггере во вкладке Variables.
- приемлю код без комментариев, но ненавижу, когда комментарии не по делу или устарели.
Конкретно в моем коде ничего особо ужасного нет, за единственным исключением. Если тот класс, в котором реализован этот метод, засунуть в любое другое приложение, кроме Берсерк-Онлайн, - все скорее всего скомпилируется, но при попытке вызова этого метода - вылетит Exception. Итого - код с нулевым reusability.
Правильнее было бы использовать в классе BattlePanel примерно такую конструкцию:
berserkclient.addEventListener("changed", actionsChanged);
То есть чтобы интерфейсная часть узнавала о произошедшем только в том случае, когда ей это действительно нужно. :-).
Среда, 2 Январь. 2008
Что такое One-Face.ru? На флэшерских сайтах, в частности на Флэш Потрошителе, давно уже проскакивала ссылка на ресурс www.one-face.ru, предоставляющий удобный метод для авторизации гостей ресурса одним кликом. Однако, Флэш Потрошителя я, похоже, опередил. Никак не доходили руки, но вот они - долгожданные выходные, а ручки-то чешутся... :) Итого - подключена маленькая симпатичненькая панелька авторизации (разумеется, сделана на Flash). Пока что - врезана в шаблон, но это уж как-то слишком криво, до Рождества торжественно обещаю и клянусь сделать плагин для Serendipity :-)
И, хотя всех тех, кто умудряется сюда заходить постоянно, (или читателя моего фида), я знаю поименно, возможно, еще пригодится случайным посетителям...
Ну, как говорится, с почином... Идея one-face.ru не нова, но, на мой скромный взгляд, хороша. К тому же проста в реализации, что должно способствовать ее продвижению. Не будучи широко разрекламированным, сервис уже собрал в себе чуть меньше 100 пользователей (кстати, первым 99 подключившимся должны подарить футболки :-)). Весьма вероятно, что и я обзаведусь оной... :-)
Пятница, 14 Декабрь. 2007
Первое впечатление от Flex Builder 3 Beta 3 - отвратительное!
Во-первых, пропали табы с редактируемыми файлами. Вместо них имя текущего файла и стрелочка с количеством открытых редакторов - переключаться медленно. Лечится впрочем довольно просто - идем в настройки, выбираем Editor (да-да, именно Editor, а не GUI), и там выбираем "Show multiple editor tabs".
Во-вторых, пропала подсветка синтаксиса. Вообще. Начисто. Хотя ставил в отдельный каталог. Открываются файлы в ActionScript Editor, а подсветки и индентации - нет! Помогло - снести Flex Builder, и поставить его заново (на этот раз, на всякий случай, без JSEclipse).
Про выход FB3 Beta 3 уже писал Constantiner, писал __etc, писал и я... Но эта версия не стала глотком свежего воздуха. Компиляция - все такая же медленная (ну, может, это у нас проект такой неправильный, нужных рефакторингов до сих пор нет). Еще зачем-то выключились множественные табы и включился "Mark all occurences" - искать на тулбаре. Полезная, конечно, фича, но таким образом обращать на нее внимание... фи.
Но в целом и в общем - оно работает, систему не повесило, код не поудаляло... Человек - не скотина, ко всему может привыкнуть... Но все равно жду IDEA 8 с поддержкой MXML. И уже почти готов прямо сейчас пользовать 7ку для правки ActionScript 3 кода.
Вторник, 11 Декабрь. 2007
Флэш Потрошитель предлагает забавный способ для определения размера объекта - сериализовать его в ByteArray и посмотреть на изменение размера оного ByteArray. Как ни странно, мне ничего подобного в голову не приходило...
Несколько модифицированный пример кода (оригинал у Флэш Потрошителя):
private static var ba: ByteArray = new ByteArray();
public static function traceObjectSize(o: *): void {
var old: int = ba.length;
ba.writeObject(o);
trace ( (ba.length - old), "bytes for", o);
}
public final function init(): void {
var o: Object = new Object();
traceObjectSize(o);
o.test = "test";
traceObjectSize(o);
traceObjectSize(this);
traceObjectSize("1234567890");
traceObjectSize("12345678901234567890");
}
Вывод такой:
4 bytes for [object Object]
11 bytes for [object Object]
[SWF] D:\BERSERK\FLASH\battlefield\bin\Test.swf - 518 149 bytes after decompression
2658 bytes for test0
12 bytes for 1234567890
22 bytes for 12345678901234567890
Вероятно, такой метод считает лишь данные, но часто большего и не надо... Вот например строка занимает свою длину + 2 байта... Пустой объект - 4 байта... Пустой объект со свойством test, выставленным в строку test - должен вероятно занимать 4 байта + 6 байт, но занимает 11 :-)
Четверг, 8 Ноябрь. 2007
Документация по Flex, равно как и почти весь интернет, усеяны примерами, как наполнить Tree, используя XML документ. Все, конечно, замечательно - но это так ужасно - каждый раз парсить одни и те же элементы. А между тем, у нас всегда есть замечательный способ - работа с массивами и объектами. "Под катом" - исходный код, используемый во flash клиенте игры Берсерк Онлайн. Дано: Список комнат игрового мира. Требуется: Отобразить его древовидную структуру, по клику разрешить менять комнату.
Продолжить чтение "Компонент Tree во Flex. Скажем "нет" XML dataProvider'ам."
Вторник, 16 Октябрь. 2007
http://www.levelofindustry.com/journal/2007/10/13/scope-access-and-event-handling.html автор пишет про переменные, определенные внутри функции, но продолжающие жизнь за ее пределами:
import flash.events.MouseEvent;
var clickHandler : Function;
function foo() : void { var firstName : String = "Samuel" var lastName : String = "Agesilas"; this.stage.addEventListener(MouseEvent.CLICK, clickHandler = function(event:Event) : void { trace( event ); trace( "First Name:" + firstName ); trace( "Last Name:" + lastName ); }); } foo();
Создавая переменную clickHandler вне "зоны видимости" функции (в данном примере, функции foo), мы получаем возможность сохранить обработчик события (с возможностью последующего удаления, в случае необходимости). Наибольшее преимущество здесь в том, что 'clickHandler'
имеет доступ ко всем переменным и объектам в зоне видимости функции, уменьшая количество кода обработчика события и сложность его написания.
Маленькое замечание от меня: учитывая то, что все переменные, определенные в теле функции, видны глобально во всей функции, это довольно опасно - таким образом, будут сохранены и ссылки на объекты, которые, возможно, вообще никогда не понадобятся. Тем не менее, практическое применение этот подход найдет ) по меньшей мере у меня.
|