跨平台C ++ / OpenGL ES开发(iOS / Android)


10

我已经具有使用C ++和OpenGL的合理经验,并且我最近决定尝试开发移动游戏。在使用Java成功创建了一个简单的OpenGL ES Android应用程序之后,我研究了以最少的重写代码为目标同时定位Android和iOS的方法。我尝试使用Visual Studio 2015引以为傲的跨平台应用程序开发工具,但发现它们太新了,因此文档记录极少。我可以构建程序提供给我的模板项目,但是我不知道如何在给定这些模板的情况下将资产添加到游戏中或处理触摸屏输入。

不幸的是,我有一个特定的愿望,过于具体,无法在Google上找到。我想使用C ++制作一个OpenGL ES游戏,并为Android和iOS使用针对平台的精简包装。人们向我提出了类似的问题(尽管不完全相同),并且不止一个人回答说,我想要做的不仅是可能的,而且相对容易,因为我不必担心UI。

我尝试了本教程,但是它已经存在了将近三年,因此可能是为较旧的技术设计的,结果,我遇到了各种无法解释的错误。不过,截至目前,该教程与我所发现的最接近。其他所有功能要么仅适用于Android,要么建议我每年支付数百美元来使用Marmalade SDK。有时,我感觉只需要编写两次代码,一次是用Java,一次是用Objective-C,但是我一直对这种解决方案是可行的,但由于某种原因,在任何现代细节中都没有涉及,深有感触。

总而言之,我想制作一个适用于iOS和Android的OpenGL ES游戏,并使用单个C ++代码库包装少量平台特定的代码。但是,尽管有几个人推荐了这种方法,但没人能告诉我该怎么做。有人可以告诉我是否确实可行,如果可以,我可以做什么或可以去哪里学习?



1
由于您没有源访问权限,因此unity3d与OP的要求相去甚远。我使用过cocos2d-x,并且在某种程度上仍然存在编译问题。也感觉到了Objective-C的影响,有些人可能会喜欢,但是对我而言这是一个关闭。但是,它是一个开放源代码解决方案,因此值得OP进行调查。
马修·桑德斯

Answers:


6

您可能会在这里找到我对类似问题的答案,对您有所帮助。

您可能还会发现研究其他解决方案的源代码很有帮助。例如,Godot Engine是跨平台的开源游戏引擎,因此您无需支付任何费用。

正如我在其他答案中提到的那样,您不需要(也可能不能)依靠一个IDE为您完成工作。 CMakeScons许多其他构建工具可以帮助跨平台和IDE进行交叉编译/构建过程。

陀发动机,例如,使用使用SConsLLVM项目(又名由所使用的编译器框架的C / C ++ / Objective-C的编译器)使用的CMake

一种流行的游戏方法是用C / C ++构建引擎,并且如您所提到的,抽象出平台细节。对于iOS和Android,这是与OS交互的生命周期管理逻辑。如果您想加倍努力,并利用Emscripten还将其编译为asm.js并在浏览器中实现接近本机的速度,那么您在做些类似的事情就是抽象出主循环,以隐藏什么是requestAnimationFrame调用。

Emscripten建议使用SDL简化移植过程,因为它可以帮助处理平台细节的抽象,但是没有什么可以阻止您自己进行此操作(此外还要进行大量研究,调试等)。

如果您真的很疯狂,那么您可以做我正在做的事情,并利用LLVM的功能编写自己的语言,以编译为支持的平台上的本机C ABI甚至JIT

关键是,是的,的确是有可能的,但是有些道路比其他道路更复杂/耗时。

注意:您可能需要通过带有 XCode的Mac, VM Hackintosh使用Mac OSX才能编译到iOS。这是我发现Macbook Pro成为开发系统的理想人选的众多原因之一。

注意2:值得一提的是,当今许多跨平台引擎都将脚本语言用于特定于游戏的逻辑。 例如,Unity甚至都不让您接近其源代码(尽管您可以编写本机插件)。由于脚本语言与平台无关(特别是在VM中运行的解释型语言),因此这可以帮助加快开发周期并最小化移植。我的语言的目标是允许JIT(主要是为了节省开发时间)和静态编译。

注意3:如果您尚未找到它。如果您不使用SDL或抽象平台细节的其他解决方案,则需要利用每个平台的特定C / C ++接口功能。在iOS中,这在XCode中非常简单,因为编译器(如上所述的clang)已经支持C / C ++。使用Android,您需要利用 NDK和Java与C / C ++之间的marshall调用。


1
我研究了Godot引擎的源代码。似乎有点过分了;我宁愿自己创建自己不需要的功能。不过,我不太确定该怎么做。我还无法在Android上成功运行任何C ++代码。
Craig Horwood 2015年

呵呵... NDK没野餐。老实说,我发现Google需要在开发人员友好类别中提供一些帮助。您是否正在使用SDL限制?我有更多信息可以根据需要更新答案。
马修·桑德斯

SDL并非没有限制,但我宁愿不要去那里。再一次,总是有一些零碎的知识,如果没有框架,它是可以完成的。
Craig Horwood 2015年

我经常被那个虫子咬伤,所以我知道你的感觉。我过去使用过NDK,但我认为安装和编译的方式没有太大变化。我肯定希望调试有所改善,因为您过去必须通过终端直接使用GDB,而IDE不支持它,但是听起来他们已经开始向android studio添加NDK支持。您是否尝试过hellojni示例
马修·桑德斯

NDK是现有的最恶心的东西之一,您可能会发现bgfx可用作参考github.com/bkaradzic/bgfx,它并不像您想的那么薄,它具有多个渲染后端
JBeurer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.