Обозреватель

Observer

четверг, 14 августа 2008 г.

Пробуем haxeVideo. //Обзор HaxeVideo

Пробуем haxeVideo. Flash. Flex. AIR. Haxe.
Хорошо написано о том, где скачать, куда распаковать, рабочий пример (на AS3).

Ключевые фразы:
Компилируем приложение и запускаем. В директории установки haxeVideo, в папке videos можно увидеть файл temp.flv, медленно увеличивающего свой размер по мере поступления потока на сервер.
В итоге мы запустили сервер haxeVideo и написали простейшее приложение для него, которое передает поток для записи его на сервере. Также в директории установки haxeVideo можно найти исходники сервера и пример клиентского приложения, написанные на haxe.

Как сделать заливку фона повторяющимся (тайленым) изображением. //Пример кода

Flex 2 Application Repeating BackgroundImage Style (updated).

В кратце - класс экстендит RectangularBorder и осуществляет программную заливку.

Код прилагается:
http://renaun.com/flex2/posts/repeatedbackground/index.html

Стандарты кодирования в AS3. //Полезно

Стандарты кодирования в AS3. Flash. Flex. AIR. Haxe.

Статья посвящена систематизации стиля кодирования AS3.

http://flash-santer.com/docs/Coding%20Standards.doc - документ, описывающий систему.

четверг, 19 июня 2008 г.

Как узнать параметры компиляции во Flex Builder.

Оригинал. Flashimp

Всё просто:
Открываем файл ".actionScriptProperties" в папке вашего проекта и смотрим:
строчка ноды "‹compiler›" как раз содержит все параметры помпилятора

‹compiler
additionalCompilerArguments="-load-config ../flex-config.xml"
copyDependentFiles="true"
enableModuleDebug="true"
flexSDK="Flex 3"
generateAccessible="false"
htmlExpressInstall="true"
htmlGenerate="true"
htmlHistoryManagement="false"
htmlPlayerVersion="9.0.28"
htmlPlayerVersionCheck="false"
outputFolderPath="bin-debug"
sourceFolderPath="src"
strict="true"
useApolloConfig="false"
verifyDigests="true"
warn="true"›

Создаём в папке проекта файл "flex-config.xml".
За основу берём его же из sdk (flexSDK\frameworks\flex-config.xml).
Убиваем/изменяем что лично вам необходимо.
Не забываем указать используемые библиотеки, но лучше это сделать не конкретно указав каждую, а указать только папки с ними, а компилятор уж сам пусть разбирается, какие юзать:
‹library-path›
‹path-element›libs‹/path-element>
‹path-element›../../frameworks/libs‹/path-element›
‹path-element›../../frameworks/libs/player‹/path-element›
‹path-element›../../frameworks/locale/{locale}‹/path-element›
‹/library-path›

Далее открываем cmd и пишем:
‹url_to_mxmlc.exe› ‹url_to_Main.as› -load-config ‹url_to_flex-config.xml›

Собственно всё :)
Подробнее узнать как писать flex-config.xml и вообще работать с компилятором mxmlc можно узнать из справки к Flex Builder'у.

среда, 14 мая 2008 г.

Повышение производительности AS3 приложений //Очень полезные советы

Оригинал. Flex 2 & Co

Здесь представлены некоторые приемы, которые помогут повысить производительность наших приложений:

1) Создавайте константы для часто используемых объектов типа new Point(0,0) или new Rectangle(0,0,320,240):

//вызов 100000 раз: 75мс
new Point(0,0);
//или
private static const POINT:Point = new Point(0,0);
//8мс
POINT;


Быстрее на 838%

2) Сократите указания на статические члены классов. Вместо этого старайтесь использовать переменные пакета:
//15мс
SomeClass.somevar;
package somepackage{
public const somevar:int;
}
//8мс
somevar;

на 66% быстрее

3) Сохраняйте getter свойства в локальных переменных при их использовании более одного раза.

somesprite.graphics.clear();
somesprite.graphics.beginFill(0x000000);
somesprite.graphics.drawRect(0,0,10,10);
somesprite.graphics.endFill();

// лучше заменить на

var n:Graphics = somesprite.graphics;
n.clear();
n.beginFill(0x000000);
n.drawRect(0,0,10,10);
n.endFill();


4) Создавайте собственные reflection-методы вместо использования getDefinitionByName(getQualifiedClassName(object))
utils reflection
// 503мс
var someclass:Class = getDefinitionByName(getQualifiedClassName(someObject));
// getter reflection
public class SomeClass {
public function get reflect():Class {
return SomeClass;
}
}
// 9мс
var someclass:Class = object.reflect();

быстрее на 5489%

5) Страрайтесь использовать строгое типизирование

6) Приводите к нужным типам, например, при чтении из массива.
Быстрее будет обращаться к image

var image: BitmapData = images[index];
image.getPixel(x,y)
//чем к
images[index].getPixel(x,y);


7) Где возможно, используйте int вместо Number

8) Операторы побитового сдвига работают быстрее:

Побитовый сдвиг влево быстрее на 300% при умножении на любую степень двойки:

x = x * 2;
x = x * 64;
//равно:
x = x << 1;
x = x << 6;


Побитовый сдвиг вправо быстрее на 350% при делении на любую степень двойки:

x = x / 2;
x = x / 64;
//равно:
x = x >> 1;
x = x >> 6;


Извлечение компонентов цвета:

//24bit
var color:uint = 0x336699;
var r:uint = color >> 16;
var g:uint = color >> 8 & 0xFF;
var b:uint = color & 0xFF;
//32bit
var color:uint = 0xff336699;
var a:uint = color >>> 24;
var r:uint = color >>> 16 & 0xFF;
var g:uint = color >>> 8 & 0xFF;
var b:uint = color & 0xFF;


Объединение компонентов цвета:

//24bit
//24bit
var r:uint = 0x33;
var g:uint = 0x66;
var b:uint = 0x99;
var color:uint = r << 16 | g << 8 | b;

//32bit
var a:uint = 0xff;
var r:uint = 0x33;
var g:uint = 0x66;
var b:uint = 0x99;
var color:uint = a << 24 | r << 16 | g << 8 | b;


9) Обмен значениями численных переменных без использования временной переменной:

var t:int = a;
a = b;
b = t;
//равно:
a ^= b;
b ^= a;
a ^= b;


Быстрее на 20%.

10) Инкремент/декремент.
Внимание: это пример понижения производительности, но зато есть возможность понизить читабельность кода для врагов:)

i = -~i; // i++
i = ~-i; // i--


11) Смена знака с помощью NOT или XOR (говорят на 300% быстрее):

i = -i;
//равно:
i = ~i + 1;
//или
i = (i ^ -1) + 1;


12) Подсчет остатка

Если делитель является степенью двух, то остаток можно подсчитать быстрее на 600% следующим образом:
остаток = делимое & (делитель - 1);

x = 131 % 4;
//равно:
x = 131 & (4 - 1);


13) Проверка на четность/нечетность:

isEven = (i % 2) == 0;
//равно:
isEven = (i & 1) == 0;


Быстрее на 600%.

14) Абсолютное значение. Версия 1 быстрее на 250%, чем Math.abs(), а версия 2 быстрее на 20%, чем версия 1.

//версия 1
i = x < 0 ? -x : x;
//версия 2
i = (x ^ (x >> 31)) - (x >> 31);


15) Сравнение двух числе на равенство знаков

eqSign = a * b > 0;
//равно:
eqSign = a ^ b >= 0;


На 35% быстрее.

16) Быстрое конвертирование цвета из R5G5B5 в R8G8B8


R8 = (R5 << 3) | (R5 >> 2)
G8 = (R5 << 3) | (R5 >> 2)
B8 = (R5 << 3) | (R5 >> 2)


17) a++ быстрее, чем a = a + 1 и т.п.

18) Умножение быстрее деления.

Лучше использовать a = b*.5 вместо a = b / 2

19) int(1.5) быстрее, чем Math.floor(1.5)
Аналогично int(1.5) + 1 быстрее, чем Math.ceil(1.5)