OpenFL(Haxe)用のネイティブ拡張ライブラリの作成

まえがき



モバイルアプリケーションの作成を考えているが、どこから始めればよいかわからない場合は、新しいことを実験して学習するのに十分な時間があるので、ツールとしてhaxeプログラミング言語を選択することをお勧めします。 あなたは彼のことを聞いたことがあるかもしれませんし、Flashのある種の代替として彼を聞いたことがあるかもしれません。 これは完全に真実ではなく、まったく間違っているとさえ言うかもしれません。



はい、haxe標準ライブラリには、actionscript 3標準ライブラリと組織的に類似したクラスと機能のサブセットがありますが、これにより、Linux、Windows、Android、Mac、iOSなどのネイティブプラットフォーム用のアプリケーションを作成できます。



ネイティブプラットフォーム用のアプリケーションを作成する場合、標準ライブラリの機能では不十分であり、サードパーティのライブラリを探すか、独自のライブラリを開発する必要があります。 私は2番目の道を歩み、現在のプロジェクト(メカニクスのTripleTownに似た小さなゲーム)で、Flurry、Localytics、GooglePlay Game Services、およびその他のサービスを操作するためのライブラリを開発しました。



以下の翻訳では、特にhaxeおよびOpenFLフレームワーク(旧NME )の拡張機能のライブラリを作成する場合の開始点について説明します。 オリジナル記事のローラン・ベデュブールの著者。





OpenFLの簡単な拡張機能を作成する



最近まで、私はAdobeツールを使用してiOSおよびAndroidでアプリケーションを公開しました。



OpenFLは勢いを増しており、十分なレベルの成熟度に達していると思われるため、次のプロジェクトで使用することにしました。



高レベルのライブラリを使用してください。ただし、ドキュメントに記載されているがライブラリからアクセスできないネイティブ関数が必要な場合があります。 この問題を解決するには、Adobe ANEがあり、それがうまく機能していると言わなければなりません。



しかし、OpenFLで同じ機能を取得するにはどうすればよいでしょうか? 以下では、このタスクに対処するための私の試みについて説明します。



次の方法で、OpenFLのテンプレートを使用して、拡張機能を作成できます。

$ openfl create extension TestExtension $ cd TestExtension $ ls -1 TestExtension.hx #    haxe    haxelib.json #    haxelib include.xml #  , openfl     #    ndll/ #         #  project/ #   
      
      





サポートされているすべてのプラットフォーム用に拡張機能をコンパイルすると、対応するネイティブライブラリがndll /ディレクトリに表示されます。

 cd project/ haxelib run hxcpp Build.xml haxelib run hxcpp Build.xml -Dandroid haxelib run hxcpp Build.xml -Diphoneos -DHXCPP_ARMV7 haxelib run hxcpp Build.xml -Diphonesim
      
      





ここで、拡張機能をhaxelibに登録する必要があります。

 cd .. haxelib dev TestExtension `pwd`
      
      





拡張機能の作成が成功したことを確認するには、次の手順を実行します。

 mkdir TestApp cd TestApp
      
      





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" /> <haxelib name="TestExtension" /> </project>
      
      







Main.hx:

 class Main { public static function main(){ var t = new flash.text.TextField(); t.text = Std.string(TestExtension.sampleMethod(16)); flash.Lib.current.addChild(t); } }
      
      





次のようにコンパイルしてテストします。

 openfl test project.xml cpp openfl test project.xml android openfl test project.xml ios -simulator openfl test project.xml ios
      
      





MacおよびAndroidですべて正常に動作します。



外部ライブラリの使用方法、さまざまなプラットフォームのソースコードの構成方法を理解する必要がありますが、これは良いスタートです。AdobeAir(ANE)の拡張機能よりもOpenFLの拡張機能を作成する方が簡単です。



残念ながら、iOSのリンクエラーはまだあります。それらに対処するときに、この記事を更新します。



githubリポジトリに 、記事の例のソースコードを投稿しました。 また、Joshua Granikのブログには、拡張機能の作成に関する記事があります。



追加 :iOSでのリンクに関する私の問題は、インポートされた関数のケース名の不一致に関連しているようです。 このエラーが修正されると、小文字の名前の拡張機能を簡単に試すことができます(iOSで期待されるように)。



追加 :間違いなく、これはインポートされた関数の名前の不一致の問題です。 OpenFLリポジトリにはエラーの説明が含まれているため、修正時期を個別に追跡できます。



追加 :Joshua Granikは拡張テンプレートを修正したので、すぐにすべてが正常に動作します*。



* 翻訳者から -このようなエラーが発生したときに誰かに役立つように、翻訳へのすべての追加を残しました。



All Articles