haXe

Фишка 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.

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 2.05 и Hxcpp 2.05.0

Вчера Николя Канасье объявил о том, что опубликована новая версия haXe - 2.05
В комментариях к релизу он особенно поблагодарил Франко Понтичелли (Franco Ponticelli) и Хью Сэндерсона (Hugh Sanderson) за их серьезную работу над целями для PHP и C++ платформ, которые становятся всё лучше и лучше.

Список обновлений в haXe 2.05

Скачать свежую версию haXe можно, как обычно, со страницы http://haxe.org/download. Автоматический инсталлятор тоже работает как прежде.

Уже сегодня Хью Сэндерсон объявил и об обновлении Hxcpp - цели для компиляции haXe в С++ программы.
Как видно, отныне версии Hxcpp меняют нумерацию, чтобы соответствовать номерам версий haXe, что поможет сразу понять какой версией можно пользоваться.

Вопросы по haXe

Здраствуйте, у меня есть пара вопросов.
В чем преимущества haxe/flash перед обычным flash'ем?
Как соединится с php скриптом из haXe/flash и отоислать и получить данные?
Можно маленький примерчик.

HaXe, aswing и внешний прелоадер

Здравствуйте!

Я сделал вот этот пример по работе с aswing в haxe http://haxe.org/doc/flash/aswingas3
Все работает отлично.
Теперь пытаюсь сделать простой внешний прелоадер для всего этого на AS3

var myMovie:MovieClip;
var l:Loader = new Loader();

l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loop, false, 0, true);
l.contentLoaderInfo.addEventListener(Event.COMPLETE, done, false, 0, true);

l.load(new URLRequest("haxeaswing.swf"));
 
function loop(e:ProgressEvent):void
{
// Тут обновляем индикатор загрузки
}
 
function done(e:Event):void
{
 
  myMovie = MovieClip(l.content);
  addChild(myMovie);
}

и получаю ошибку

Начинаем работать с hxcpp (haxe c++) и Visual Studio C++ Express

Как я писал ранее, теперь haxe можно компилировать в c++ программы. Однако в интернете я нашел только один источник, касающийся связки haxe и c++ (http://blog.touchmypixel.com/2009/04/our-possible-haxe-c-plans/). Причем данный материал на английском языке и несколько устарел, т.к. ориентирован на версии haxe 2.03 и hxcpp 0.4. На момент же написания данного поста мы имеем haxe 2.04 (уже со встроенной поддержкой с++) и hxcpp 1.0.5, и взаимодействуют они уже немного по-другому.
Мне пришлось немного понервничать, устанавливая все это добро, поэтому я и решил поделится опытом. Приступаем к установке...

Вышел haxe 2.04

26 июля вышел haXe 2.04. Основное нововведение - поддержка с++ (спасибо стараниям Хью Сандерсона http://gamehaxe.com/).
Основным преимуществом программ на с++ является высокая производительность. Плюс мы еще на шаг ближе к флэш-играм на iPhone http://gamehaxe.com/2009/07/28/haxe-iphone-cpp-at-last/.
Что необходимо для того, чтобы начать работать с новой платформой, можно почитать здесь http://blog.touchmypixel.com/2009/04/our-possible-haxe-c-plans/ (на английском).
http://ncannasse.fr/blog/haxe_2.04 - здесь создатель языка haXe показывает классический пример "Hello world" для с++.

как вызвать функцию setInterval в haxe

Здравствуйте. Подскажите пожэлуйста, как вызвать функцию setInterval(); Прошу прощения за AS2.0.

import flash.TextField;
import flash.MovieClip;
import flash.Lib;
class Preview extends MovieClip
{
                private var interval:Float;
                public function new()  
                {      
                        interval = setInterval("tracer", 1000);
                        //tracer();
                }
                private function tracer()
                {
                        trace("one");
                }              
       static public function main()
        {
                                //trace('We try EventFrame');
                                var mc0  = flash.Lib._root;
                                mc0.createEmptyMovieClip("mc", 1);
                                mc0.mc.beginFill(0xff000);
                                mc0.mc.moveTo(0,0);
                                mc0.mc.lineTo(0, 600);
                                mc0.mc.lineTo(800, 600);
                                mc0.mc.lineTo(800, 0);
                                mc0.mc.lineTo(0, 0);
                                mc0.mc.endFill();
                               
                                new Preview();
        }
}
//------------------------------------------------------------------

haxe выдаёт ошибку

haXe Video Server

Добрый день!

Мне нужно организовать аудио (позже - видео) общение на сайте в режиме "пользователь-пользователь". Т.е. мне не нужно широковещание, нужен именно звонок(-и) от одного пользователя сайтом, другому.

В связи с этим возникли вопросы:
1. Подходит ли под мою задачу haXe Video Server?
2. Сколько одновременных звонков может выдержать сервер (2Gb ОП, 2xXeon 2Gh)?

Буду признателен за ответы и, еще более признателен, за вопросы)

С уважением,
Ренат

Баг в Haxe

Нашел один интиресный баг в haxe
main.hx:

import js.Dom;
import js.Lib;
import classes.DisplayObject;
/**
 * ...
 * @author Ekstazi
 */


class Main
{
        static var _logo:Dynamic= new DisplayObject('div');
       
        static function main()
        {
        }
}

displayobject.hx:
package classes;
import js.Dom;
//import js.HtmlDom;
import js.Lib;

class DisplayObject
{
        var obj:HtmlDom;
        public function new(name:Dynamic)
        {
                Lib.window.onload = function(e:Dynamic) {
                        Lib.window.alert(untyped __js__('typeof(name)'));
                }
                obj = Lib.document.createElement(name);
        }
       
        public function addChild(child:HtmlDom) {
                obj.appendChild(child);
                //obj.
        }
       
}

Вызывает ошибку, причина в том, что объявление статических переменных идет перед кодом:
js.Lib.document = document;
js.Lib.window = window;
js.Lib.onerror = null;

Влияние Haxe

Haxe->flash странно на меня подействовал, пишу на php - не в своей стихии, пишу на haxe->javascript - не хватает многих вещей которые были под флэш платформу. Например, нельзя просто взять и сделать lib.current.addChild(someObj), вместо этого:

package classes;
import js.Lib;
import js.Dom;

class Logo
{
        public var displayObj:HtmlDom;
        public function new()
        {
                displayObj = Lib.document.createElement('div');
        }
}

А потом в main:
lib.document.appendChild(logo.displayObj);

Стоит ли изучать haXe, перешагнув через Flash, AS, Flex..

Хочу вот поинтересоваться. Заранее прошу прощения за нубство, подобных вопросов много наверное уже задавалось, но мне к сожалению не удалось найти на них ответ.
Я не изучал ни Flash, ни AS, и не имею о них представления. Но есть желание писать крупные интернет-проекты. Почему Flex, да потому что надоело бороться с псевдо кроссбраузерностью. Но по mxml я не смог найти подходящих материалов, а английский я не знаю абсолютно(вечная проблема =( ). По haxe материалов больше и они(спасибо тем кто писал, переводил) написаны понятно.

Преимущества и недостатки haXe в сравнении с Flex-AS3-MXML

Кратко и сухо

Преимущества:

  • замысел -- один язык -- много платформ;
  • API флэш-плеера доступно в полном объеме;
  • можно использовать Flex-фреймворк;
  • значительное количество библиотек, в том числе 2 gui-библиотеки: arctic и fcomponentsfx;
  • язык более гибкий и лаконичный, с дополнительными возможностями оптимизации;
  • быстрый компилятор (заметно быстрее, чем mxmlc);
  • активное сообщество (англоязычное);
RSS-материал