Блоги

Оконное приложение 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

Потеря данных на сайте haXe.org

На прошлой неделе на сервере, обслуживающем Wiki-сайт haxe.org, накрылся жесткий диск. Копия БД восстановлена с сервера, на который производилась репликация. Только вот незадача, на резервном сервере не была включена поддержка юникода, и страницы, содержащие русские, китайские и японские переводы, канули в вечность. Николас пообещал что больше такого не допустят.

haXe научился компилить под Android

Не безызвестный Huge опять порадовал. На этот раз он скрестил HXCPP и Android NDK.
Статья об этом в его блоге: http://gamehaxe.com/2010/09/30/android-hxcpp-a-quickstart-guide/
У кого есть время, попробуйте пожалуйста и отпишитесь, очень интересно.

Фишка haXe, основанная на блоках

Фишка, основанная на блоках. Приведу пример.

Например мне нужен класс, в котором будет содержаться массив 10x10 из произвольных Int-ов в диапазоне 0...9. И мне всё равно как он устроен внутри. Никаких лишних функций вроде Array10x10.setup() вызывать я не хочу. Я делаю так:

class Array10x10
{
        static public var data:Array<Array<Int>>;
        static var setup =
        {
                data = new Array<Array<Int>>();
                for (i in 0...10)
                {
                        data[i] = new Array<Int>();
                        for (j in 0...10)
                                data[i][j] = Std.random(10);
                }
        }      
}

class Main
{
        static function main()
        {
                for (i in Array10x10.data) trace(i);
        }
}

Вставка внешнего ресурса (PNG, JPEG, TTF, SWF) в SWF при помощи FlashDevelop

За вставку внешнего ресурса отвечает swfmill.

ШАГ 1

Копируете файл изображения в папку вашего haXe-проекта. Файл появится в меню Project. Щёлкаете правой кнопкой и выбираете Add To Library.

ШАГ 2

Щёлкаете правой кнопкой и выбираете Options....

Убираете галочку Auto-generate ID for movieAttach() и вписываете в соответствующее поле удобное вам название класса/картинки. Если картинка находится в папке, то вы должны указать полный путь до нее folder.subfolder.image.png .

Ставите галочку Embed as a Bitmap instead of Clip.

Различное поведение функции при различных типах аргумента

Предположим нам необходимо различное поведение функции в зависимости от типа получаемого аргумента. Реализуется несколькими способоми. 1ый кажется самый простой для восприятия, а возможно и самый быстрый.

package ;

import flash.display.Shape;

import Type;

class Main
{
        static public function main()
        {
                f(true);
                f(12345);
                f(1.2345);
                f("abcdef");
                f(new Shape());
                f(f);
                f({name: "abcdef" } );
                f(null);
        }
       
        static public function f(value:Dynamic)
        {
                //1) Рабочий вариант на switch
                switch(Std.string(Type.typeof(value)))
                {
                        case "TBool":                           trace("I am Bool");
                        case "TInt":                            trace("I am Int");
                        case "TFloat":                          trace("I am Float");
                        case "TClass([class String])":          trace("I am String");

TypedDictionary вместо Dictionary

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

haXe/js Рисуем с библиотекой raphaelExtern

1) Вот тут нашел ссылку на библиотеку http://lib.haxe.org/p/raphaelExtern.
2) Установил haxelib install raphaelExtern
3) Cоздал haxe->js проект
4) Подключил библиотеку к проекту. Project/Properties/Compliler Options/Libraries/ добавил raphaelExtern
5) Написал код: (См. "How to use it" http://raphaeljs.com/ )

class Main
{
        static function main()
        {
                var paper = new Raphael(10, 50, 320, 200);

                // Creates circle at x = 50, y = 40, with radius 10
                var circle = paper.circle(50, 40, 10);
                // Sets the fill attribute of the circle to red (#f00)
                circle.attr("fill", "#f00");

                // Sets the stroke attribute of the circle to white
                circle.attr("stroke", "#fff");
        }
}

6) Всё скомпилировалось. При запуске через браузер вижу следующее:
"Raphael is not defined
Called from Main::main"

Константы и условная компиляция

Я глубоко убеждён, что константные типы недооцениваются разработчиками компиляторов и, как итог, разработчиками. Константы должны задавать не просто "неизменяемые" данные с удобным доступом, но и участвовать в прекомпиляции (условной компиляции).

Генерация номера сборки для проекта

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

Трюк

Пишем сайт на haXe/PHP - Базы данных

Эксперимента ради я решил написать на haXe свой сайт http://team.flashkarma.com
Когда структура сайта продумана и пора приступать к реализации, первое, с чего стоит начать - База Данных. Традиционно для PHP используется MySQL, т.к. найти хостинг с этой базой данных проще всего. В haXe/PHP для работы с базами есть пакет php.db.*. Для своего удобства я написал простенький класс-обвёртку.

Привет

Последнее время я много работаю с haXe, поэтому решил попробовать писать о своём опыте где-нибудь. Например тут. Буду писать о самом haXe, о разработке на нём игр, об опыте портирования оных на iPhone, про портирование различных as3-библиотек на haXe, про опыт разработки сайта и о прочем разном.
Но это чуть попозже, а это просто пост знакомства. Так что всем привет и приятно познакомится. Будем с вами дружить. (:

RSS-материал