5

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

这是我想要实现的目标:

我在游戏行业工作,我需要用 C++ 和 JS 创建一个游戏。用于嵌入式系统的 C++ 和用于在线和移动设备的 JS。我在 C++ 和 JS 方面都非常有经验。

我开发的游戏我只想写一次。现在我可以使用 emscripten 之类的东西从 C++ 转到 JS,但这会导致编译的 JS 代码无法使用 chrome 开发工具轻松调试。我确信我会在编译的 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 库,它知道我的两个游戏引擎的语法,并且可以根据其目标语言进行转换?不确定这是可能的。

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

4

1 回答 1

1

您可以使用

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

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

要使用外部定义:

具体来说,使用 c++ 可能会更复杂,您需要查看 CFFI 或 Linc https://snowkit.github.io/linc/
复杂性可能在于类型之间的转换。请记住,Haxe c++ 已管理内存,您的引擎可能会做不同的事情。HL 也即将推出,可能会有一些优势。

看着 oxygine2d 看起来有点像 Flash API?而且我知道 pixjs 大致基于 Flash API。我相信 OpenFL 现在使用 pixjs 进行 WebGL 渲染。您可能还想看看 NME(C++ 的接口与 OpenFL 几乎相同,但 NME 有 Cppia setup 之类的东西,有时更稳定)。如果 JS 或 C++ 太慢,您需要查看着色器和 Luxe/Kha 进行渲染,并且您可能还想尝试使用 Lime ( openfl ) 和一些 haxe js webgl 的堆。
如果您需要 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 论坛,问几个问题。

于 2016-06-22T15:35:48.050 回答