5

まず、長文失礼しました。haxe と、直面している問題を解決するツールとしての haxe の適合性について、いくつか質問してきました。私のhaxeに関する知識は非常に限られていますが、私のプロジェクトでのhaxeの理想的な役割は、haxeの通常の使用ではありません。だから私が避けようとしているのは、この言語を学習していない時間を無駄にすることです (それは本当に楽しくて強力に見えますが) 目的に合わないことがわかるだけです. ですから、それが目的に合っているかどうかについて、ベテランの獣医からアドバイスをもらいたいと思っています. そうであることを心から願っています。

これが私が達成しようとしていることです:

私はゲーム業界で働いており、C++ と JS の両方でゲームを作成する必要があります。組み込みシステム用の C++ と、オンラインおよびモバイル用の JS。私は C++ と JS の両方の経験が豊富です。

私が開発したゲームは一度だけ書きたいです。これで、C++ から JS に移行するために emscripten のようなものを使用できますが、これによりコンパイルされた JS コードが作成され、Chrome 開発ツールで簡単にデバッグできなくなります。元の C++ に簡単に戻ることができない、コンパイル済みの JS でエッジ ケースのバグに遭遇することがわかっています。さらに、ゲームの一部のプラットフォームでは、コンパイルされた JS の問題となるソース コードを表示するために公平性研究所が必要になります。

私が本当に必要としているのは、ネイティブで人間が読める C++ および JS コードを生成するソース ツー ソース コンパイラであり、必要に応じてネイティブ形式で作業および変更できるため、Haxe になります。C++ および JS 用に haxe によって生成されたコードを見てきました。JS は完全に理解しやすく、操作しやすいように見えます。C++ はそれほど多くはありませんが、それでもほぼ許容範囲です。haxe が不要な C++ をコンパイルしてリンクするのを止めることさえできます。ソースコードだけ欲しい。

ここまでは順調ですね。

これで、oxygine 2d エンジンを使用する C++ のゲーム フレームワークができました。スプライトなどを表示できるだけでなく、メッセージ バスと有限ステート マシン用に作成したフレームワークも表示できます (より便利なクラスもロードされます)。また、2d エンジンに Pixijs を使用し、C++ エンジンと同様に独自のメッセージ バスなどを使用する JS にも同様のフレームワークがあります。

今、私ができるようにしたいのは、Haxe でモジュールを作成することです。C++ と JS の両方にトランスパイルすると、そのコードをフレームワークの一部として含めて、その尊敬される言語エンジンで動作させることができます。haxe で作成する各オブジェクトは非常にカプセル化され、メッセージ バスにサブスクライブし、メッセージを処理し、メッセージを送り返すだけで済みます。エンジン ステート マシンの使用方法を知る必要がある場合もあります。したがって、メッセージ バス (他のオブジェクトと一緒に) は haxe で記述されず、ネイティブ プロジェクトでトランスパイルおよびビルドされた後にモジュールに提供されるため、これが haxe でも可能かどうかはわかりません。2 つのゲーム エンジンの構文を認識し、ターゲット言語に応じてトランスパイルできる、独自の haxe ライブラリを作成できるのではないでしょうか? それが可能かどうかはわかりません。

時間を割いて読んでいただき、ありがとうございます。アドバイスをお願いします。

4

1 に答える 1

1

使用できます

#if cpp
// c++ implementation
#elseif js
// javascript implementation
#end

異なるターゲットに対していくつかの異なる実装を許可するために、これはコードのどこにでも配置できるため、異なるターゲットの異なる関数に Haxe 値を渡すことができます。

extern 定義を使用するには:

特に C++ の場合は、より複雑になる可能性があります。CFFI または Linc を参照する必要があります https://snowkit.github.io/linc/
Haxe c++ はメモリを管理していることを思い出してください。また、HL は間もなく登場し、いくつかの利点があるかもしれません。

oxygine2d を見ると、Flash API に少し似ていますか? そして、pixijs が大まかに Flash API に基づいていることは知っています。OpenFL は現在、WebGL レンダリングに pixijs を使用していると思います。NME も参照してください (C++ 用のインターフェースは OpenFL とほぼ同じですが、NME には Cppia セットアップのようなものがあり、より安定している場合もあります)。JS または C++ が遅すぎる場合は、レンダリングのためにシェーダーと Luxe/Kha を調べる必要があります。Lime ( openfl ) といくつかの haxe js webgl を使用する Heaps も試してください。
2D 物理演算が必要な場合は、Haxe ツールキット (Luxe、OpenFL、Kha、Flambe) のいずれかで使用できる Nape を使用します。physaxe はありますが、あまり使用されていません。Kha と Nape の情報例: https://github.com/lewislepton/kha-examples/blob/master/NAPE/Sources/Project.hx

おそらくHaxeFlixelまたはPunkが、クロスターゲットツールキットの1つでNapeを実行するために必要なすべてを提供できるときに、さまざまなプラットフォームにさまざまなエンジンを使用したいというあなたの人生を困難にしているのではないかと私は本当に思っていますが、あなたのやり方でそれを行うことは非常に現実的です.

シグナル イベント バスなどについては Tink や Thx を参照してください。マクロ (Tink で使用されているものなど) を使用すると、コンパイル時に多くの構造を構築できるため、実行前に行うことでオーバーヘッドを大幅に削減できるため、トゥイーンはコンパイラによって事前に計算されます。hxcpp デバッガーがあり、クロムで Haxe を実行すると、js ソース マッピングを介して Haxe の行番号が表示されます。

うまくいけば、私はあなたの大きな質問のいくつかの側面をカバーしました.

Haxe ではネイティブとの組み合わせが可能ですが、Pixijs と oxygine 2d を使用することはおそらく理想的ではないと思います。純粋な Haxe にはターゲット最適化が組み込まれた優れたゲーム ツールが十分にあるはずです。Kha IRC に行くだけで済みます。 、Luxe gitter、Haxe IRC および OpenFL フォーラムに参加して、いくつか質問してください。

于 2016-06-22T15:35:48.050 に答える