OpenFL(Haxe)の拡張モジュールを作るのも割と簡単


まえがき

なぜか続いた拡張モジュールシリーズ。

ちょっと前に試してたのが発掘されたので。
正直、自分でもあんまりよくわかってないけどOpenFL周辺は日本語情報が全然ないのでとりあえず書く。

準備する

どれが必要なライブラリか忘れたけど、このあたりがあれば拡張は作れる。無いならhaxelib install LIBNAME

➜  ExtensionExample git:(master) ✗ haxelib list
haxelib_client: [3.1.0-rc.4]
hxcpp: [3.1.39]
hxlibc: [1.1.4]
lime-tools: [1.5.7]
lime: [1.0.1]
openfl: [2.0.1]

スケルトン生成

Limeでもコマンドでスケルトンが作れるので実行するだけ。

lime create extension TestExtension

TestExtension/project/commonにC++のソースがあるのでいい感じにいじってください。今回は取り敢えずスケルトンのママ進める。

拡張モジュールのビルド

cd TestExtension/projectに移動してhaxelib run hxcpp Build.xml -DHXCPP_M64

HXCPP_M64の部分はほかプラットフォームだと変わるはず。何にかはしらない。

リンクを貼る

TestExtension/ndll/Mac64/TestExtension.dylib
は出来るんだけど.ndllが必要って後に怒られる。
ln -s TestExtension/ndll/Mac64/TestExtension.dylib TestExtension/ndll/Mac64/TestExtension.ndll
とすればとりあえず解決できる。正しい解決方法は知らない。

OpenFLから呼ぶ

TestExtensionがあるディレクトリにTestAppを作る。その中にMain.hxとproject.xmlを作る。それぞれ中身は以下。

Main.hx
class Main {
    public static function main(){
        var t = new flash.text.TextField();
        t.text = Std.string(TestExtension.sampleMethod(42));
        flash.Lib.current.addChild(t);
        trace(t.text);
    }
}
project.xml
<?xml version="1.0" encoding="utf-8"?>
<project>
    <meta
        title="TestApp"
        package="me.labe.testapp"
        version="1.0.0"
        company="Laurent Bedubourg"
    />
    <app
        main="Main"
        path="Export"
        file="TestApp"
    />
    <source path="." />
    <haxelib name="openfl" />
    <include path="../TestExtension" />
</project>

TestAppのビルド、実行

TestAppに移動して、lime test cppで画面に味も素っ気も無いウインドウが表示されたら完成。

あとがき

リンク貼るあたりが残念。というか前やった時はこの手順やった記憶ないんだけどなあ。識者のアドバイス求む。