Сниппет

Короткий фрагмент кода с коротким пояснением

Прототип парсера логов Skype чата на Haxe

Просто оставлю эту ссылку здесь: http://try.haxe.org/#30E35
Там прототип парсера логов из чата в Skype, которым я иногда пользуюсь для себя и чтобы быстро почистить полезный с моей тз кусок чата и выкинуть его в этот раздел форума: http://haxe.ru/forums/raznoe/logi-chata (кстати, мне жаль немного, что я один пока пытаюсь увековечивать (и делать доступными поисковикам) куски чата так. Особенно если вы задали там вопрос, а вам полезно ответили, было бы хорошо потратить пару минут на то, чтобы расшарить пользу с остальным миром.)

Пользуйтесь тоже на здоровье. Достаточно вставить нужный кусок в содержимое переменной log и нажать Run (если кусок большой, после этого еще придется нажать Fullscreen, чтобы увидеть всё)

Смена базового класса (класса-родителя) на этапе компиляции

Узнал, что, оказывается, можно менять базовый класс в зависимости от настроек проекта.
Вот простейший пример, как это сделать с помощью флагов компиляции:

Шаблоны приложения для NME -> Android

По этой статье prevent android from dimming (w/ haxe and nme)
Этот путь подходит для быстрого включения в свой NME проект простых нативных функций или настроек Android, без использования расширений.

1. Создаем файл MainActivity.java в папке проекта, который и будет шаблоном.

Предотвращение угасания экрана:

package ::APP_PACKAGE::;

import android.os.Bundle;
import android.view.WindowManager;

public class MainActivity extends org.haxe.nme.GameActivity {

         protected void onCreate(Bundle state) {
                super.onCreate(state);
                getWindow().addFlags( WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

10.2 и нативные курсоры

для тех, кто не хочет возиться так же как я при использовании нативных курсоров из flash 10.2 есть несколько полезных советов

- скачать последнюю версию haxe (автоматический билд, на момент написания это r3794)
- для владельцев flashdevelop (по сути к делу это не относится, но в текущем релизе нельзя выбрать версию плеера 10.2) - обзавестись flashdevelop 4
- прочитать внимательно этот тред на офф. форуме

Оконное приложение haXe/C++

Используя написанное тут http://haxe.ru/node/210 и тут http://nanoflexer.blogspot.com/2009/09/1.html разобрался с компиляцией под haXe/C++. Прикрутил самописную визуальную библиотеку VistaGUI (очень сырую) и создал пример оконного приложения. Правда компоненты CheckBox и RadioButton сломались, но это не важно, потому что моя VistaGUI и правда очень сырая.
haXe/C++ версия:
http://cs10623.vkontakte.ru/u13476671/116385245/y_33fca01d.jpg
haXe/flash версия:
http://cs10623.vkontakte.ru/u13476671/116385245/y_9e83a1a0.jpg
Исходники:
http://free-files.at.ua/load/0-0-0-25-20

TypedDictionary вместо Dictionary

Портируя одну библиотеку с AS3 на haXe, пришел к выводу, что в последнем вместо класса flash.utils.Dictionary стоит использовать flash.utils.TypedDictionary, в первую очередь из-за того, что в haXe только типизированный словарь реализует Iterator, т.е. его элементы можно перебрать в цикле типа for (i in dict).

Listener клавиатуры на stage в flash9

Иногда бывает удобно использовать listener слушающий события клавиатуры глобально, т.е. во всём приложении (например при создании flash игр). В flash8 с этим не возникает особых проблем, но в flash9 есть баг, в результате которого при удалении со сцены объекта, на котором был фокус, события клавиатуры перестают отлавливаться и сценой в целом, так как фокус в таком случае теряет и stage.

Иногда может помочь простой принудительный возврат фокуса объекту stage:
stage.focus = stage;

Timer на Neko

Начал делать SWHX проект и узнал, что в Neko на данный момент отсутствует поддержка класса haxe.Timer. Точнее поддерживается только один статический его метод Timer.stamp(). Это было несколько неожиданно.

Погуглив немного, узнал что для Neko вместо него используется neko.Sys.sleep(seconds :Float);
Это сняло часть вопросов, но не все. Этому решению в некоторых случаях не хватает гибкости Timer.

В рассылке нашёл более развернутый вариант реализации таймеров в Neko, который после небольшой доработки под текущую версию, превратился у меня вот в такую функцию:

function setTimeout(action, timeout)
{
        neko.vm.Thread.create(
                function () {
                        neko.Sys.sleep(timeout);
                        action();
                }
        );
}

Делегаты и callback

В качестве ещё одного сниппета не могу не рассказать и о callback.
Тем, кто только начинает знакомиться с haXe, это весьма полезное предложение может быть и не знакомо, т.к. до недавнего времени не упоминалось в документации.
Да и сейчас добраться до него не просто. Так что линк на статью про reserved keywords в главе мануала о классах будет уместен. В статье описывается сам принцип работы callback. Переведу самое основное...

RSS-материал