使用haxe作为c ++和JavaScript之间的转换器

cod*_*lar 5 haxe transpiler

首先,我为长篇大论道歉.我一直在问一些关于haxe及其作为解决我所面临问题的工具的适用性的问题.我对haxe的知识非常有限,但我所知道的是我在haxe项目中的理想角色并不是haxe的正常使用.所以我想避免的是浪费时间我没有学习这种语言(尽管它看起来非常有趣和强大)只是发现它不适合目的.所以我希望得到一些关于它是否适合目的的经验丰富的兽医.我真的希望它是.

这是我想要实现的目标:

我在游戏行业工作,我需要用C++和JS创建游戏.用于嵌入式系统的C++和用于在线和移动的JS.我在C++和JS方面都很有经验.

我开发的游戏我只想写一次.现在我可以使用类似emscripten的东西从C++转到JS,但这会导致编译的JS代码无法轻松地使用chrome dev工具进行调试.我已经收敛了,我将使用编译的JS遇到边缘案例错误,我不能轻易地回到原始的C++.此外,游戏的某些平台需要公平的实验室来查看源代码,这对编译的JS来说是一个问题.

我真正需要的是源代码编译器,它生成本机和人类可读的c ++和JS代码,然后我可以使用它并在必要时以其原生形式进行修改,因此haxe.我查看了haxe为C++和JS生成的代码.JS看起来非常容易理解和使用.C++并不是那么多,但仍然可以接受.我甚至可以阻止haxe编译和链接我不需要的C++.我只想要源代码.

到现在为止还挺好.

现在我有一个使用oxygine 2d引擎的c ++游戏框架.它能够显示精灵等,以及我为消息总线和有限状态机创建的框架(也可以加载更多有用的类).我在JS中也有类似的框架,它使用Pixijs作为其2D引擎,并且有自己的消息总线等,就像C++引擎一样.

现在我想要做的就是在haxe中编写模块,当我向C++和JS转换时,代码可以作为框架的一部分包含在内并与其受尊重的语言引擎一起工作.我在haxe中创建的每个对象都将被非常封装,只需要订阅消息总线,处理消息并发回消息.它可能还需要知道如何使用其引擎状态机.因此,我不知道这是否可能与haxe一起使用,因为消息总线(以及其他对象)将不会以haxe编写,而是在将其转换并在其本机项目中构建之后将提供给模块.也许我可以编写自己的haxe库,它知道我的两个游戏引擎的语法,并且可以根据其目标语言进行转换?不确定这是可能的.

感谢您花时间阅读,以及您可以提供的任何建议.

Jus*_*ont 1

您可以使用

#if cpp
// c++ implementation
#elseif js
// javascript implementation
#end
Run Code Online (Sandbox Code Playgroud)

为了允许针对不同目标进行不同的实现,这可以放在代码中的任何位置,因此您可以将 Haxe 值传递给不同目标的不同函数。

要使用外部定义:

特别是对于 c++,它可能会更复杂,您需要查看 CFFI 或 Linc https://snowkit.github.io/linc/
复杂性可能在于跨类型。请记住 Haxe c++ 已管理内存,您的引擎可能会以不同的方式执行操作。此外,HL 即将推出,可能会有一些优势。

看看oxygine2d 好像有点像Flash API?我知道 pixjs 大致基于 Flash API。我相信 OpenFL 现在使用 pixjs 进行 WebGL 渲染。您可能还想看看 NME(与 OpenFL 具有几乎相同的 C++ 接口,但 NME 有 Cppia 设置之类的东西,有时更稳定)。如果 JS 或 C++ 太慢,您需要研究着色器和 Luxe/Kha 进行渲染,您可能还想尝试使用 Lime ( openfl ) 和我认为的一些 haxe js webgl 的 Heaps 。
如果您需要 2D 物理,那么使用 Nape,它可以与任何 Haxe 工具包(Luxe、OpenFL、Kha、Flambe)一起使用,还有 physaxe,但使用得不多。Kha 和 Nape 信息例如: https: //github.com/lewislepton/kha-examples/blob/master/NAPE/Sources/Project.hx

我真的怀疑你想为不同的平台使用不同的引擎,这让你的生活变得困难,而 HaxeFlixel 或 Punk 可能可以为你提供在跨目标工具包之一上使用 Nape 运行所需的一切,但按照你的方式去做是非常可行的。

也许看看 Tink 或 Thx 的信号事件总线等,宏(如 Tink 中使用的)允许在编译时构建大量结构,因此可以通过在运行时之前执行此操作来减少大量开销,因此补间可以由编译器预先计算。有一个 hxcpp 调试器,如果您在 chrome 中运行 Haxe,它应该通过 js 源映射为您提供 Haxe 行号。

希望我已经涵盖了您的大问题的某些方面。

Haxe 允许你与原生混合搭配,但我认为使用 Pixijs 和 oxygine 2d 可能并不理想,因为纯 Haxe 中肯定有足够好的游戏工具,并且内置了目标优化,你只需要进入 Kha IRC 、Luxe gitter、Haxe IRC 和 OpenFL 论坛并提出一些问题。