Haxe とは何か?

Haxe は「ヘックス」と読みます。

Adobe Flash、JavaScript、C++、PHP

などへの変換コンパイルが可能です。
変換可能な言語は今後増えるかもしれません。

また、独自の VM である neko で動作するコードも書けます。

実際のコードは Action Script に非常に似ています。

実際に使ってみましたが、
複数の言語に変換可能といっても
インターフェイスまわりは同じ扱いができるわけがない。
よって、一部は言語ごとにマクロ的な場合分けが必要です。
共通処理部分と Haxe のライブラリは共有できると思います。

Test.hx のコードから test.js を作成したいとき、
compile.hxml というテキストファイルを用意し以下を書き込む。

-js test.js
-main Test

次のコマンドでコンパイル

haxe compile.hxml

サンプルコードは以下のよう、
上下左右キーとZキーに反応します。

// Test.hx
import js.Lib;
import js.Dom;

class Test
{
  static public var inst : Test;

  var canvas : Dynamic;
  var timer : haxe.Timer;
  
  var x : Int;
  var y : Int;
  var dx : Int;
  var dy : Int;

  public function new(canvas){

    x = 20;
    y = 0;

    dx = 1;
    dy = 1;

    this.canvas = canvas;

    // Timer
    var fps = 30;
    timer = new haxe.Timer(Math.round(1000 / fps));
    timer.run = loop;

    js.Lib.document.onkeydown = function(e:Event) this.onKeyDown(e.keyCode);

    var v : Dynamic = js.Lib.document.getElementById("music");

    v.addEventListener("ended", function(){
      v.play();
    }, false);

    v.play();
  }

  function loop(){

    x += dx;
    y += dy;

    if(x >= 64 || x < 0){
      x -= dx;
      dx *= -1;
    }
    if(y >= 64 || y < 0){
      y -= dy;
      dy *= -1;
    }

    var ctx = canvas.getContext("2d");

    var image : Dynamic = cast js.Lib.document.getElementById("img");

    ctx.fillStyle = "#FFF";
    ctx.fillRect(0, 0, 128, 128);

    ctx.fillStyle = "#0F0";
    ctx.fillRect(10, 10, 108, 108);

    ctx.drawImage(image, x, y);
  }

  function onKeyDown( code : Int ){
    if(x >= 60 && x < 4){
      return;
    }
    if(y >= 60 && y < 4){
      return;
    }

    switch(code){
      case 37: /*LEFT*/
        trace("left");
        dx = -1;
      case 38: /*UP*/
        trace("up");
        dy = -1;
      case 39: /*RIGHT*/
        trace("right");
        dx = 1;
      case 40: /*DOWN*/
        trace("down");
        dy = 1;
      case 90: /*z*/
        trace("z key");
        var v2:Dynamic = js.Lib.document.getElementById("music2");
        v2.play();
      default:
        trace(code);
    }
  }

  static public function main(){
    var canvas : Dynamic = js.Lib.document.getElementById("canvas");
    inst = new Test(canvas);
  }
}

inserted by FC2 system