使用Clutter进行游戏开发

3
我是一名相对较新的开发者,想学习C++。我有Java、JavaScript、ActionScript和Python编码经验,但我需要更快速的语言来制作高性能的2D和3D游戏。
当我掌握了基础知识(控制结构、类等),我想开发一个2D游戏。我已经尝试过各种2D图形库(cairo、sdl、openframeworks、clutter),但是clutter似乎是最优化的加速图形和矢量绘图库。
clutter是否适合2D游戏?我意识到它与其他库不同,它保持自己的场景图,但我以前开发过Flash游戏,所以我应该习惯这个。
是否存在任何性能问题需要注意?是否有其他人在使用clutter进行大量图形处理方面有经验?

7
无论你最终选择哪个图形库,忘记你所知道的关于Java的一切。C ++是一种截然不同的语言,Java中常见的习惯有时在C ++中是危险的。 - greyfade
我无法强调@ greyfade的评论了。虽然我在Java方面并不是很有经验,但它几乎是我的第一种语言,我已经习惯了它。一年后,我现在转向C ++,我已经多次尝试以“Java方式”做事情而失败。 - Stephen
哈哈,好在我没有学太多Java。不过我的高级语言经验(ActionScript和Python)可能会给我带来类似的问题。 - lukecameron
我在自己的可移植C项目中广泛使用了SDL(我没有看到Clutter的任何C绑定,可能是因为显而易见的原因),但如果你正在寻找使用游戏的核心组件而不是理解它们,那么Clutter似乎很有趣。我建议您将此问题移至stackexchange上的gamedev部分。 - gamen
3个回答

7

我曾经使用Clutter进行过很多嵌入式系统工作,并且现在正在使用它进行桌面项目。它可能非常适合基于桌面的2D游戏,但需要注意以下几点:

  1. 该工具包的主流开发非常注重Linux。我不确定Windows、Mac或iOS(“水果”)版本的维护情况如何。
  2. 文档很少,据我所知没有书籍。(我正在考虑写一本。)
  3. 它是用C语言编写的,并原生地公开了C语言绑定。虽然有许多语言的Clutter绑定,包括C++,但您仍需要了解C语言绑定。
  4. 它不会原生地使用C++对象。相反,它使用基于C的GObject系统来处理单继承对象,即使您使用C++绑定向其编写,您也需要了解GObject的一些知识。
  5. 如果要使用线程,必须使用其线程系统 - 而不是POSIX线程、Boost线程或其他任何东西。
  6. 它可能真正击败GPU,因此,如果您正在做某些花哨的事情,则在廉价笔记本电脑和网络本中使用的某些低端英特尔芯片上,帧率可能不太理想。

尽管如此,您可以用它实现惊人的效果。我非常喜欢使用它,一旦您了解了如何使用它,与C++混合使用将会很有趣。

此外,有一个名为GUADEC的真正激动人心的开源大会,Clutter的开发人员都在那里。如果您在2011年7月的柏林展示一个真正有趣的基于Clutter的游戏,人们会给您买很多饮料。


1

我必须承认我以前从未听过Clutter,这可能是因为它不是一个Windows库,而大多数游戏开发者都在Windows平台上工作。同样,大多数游戏开发者(即使是业余爱好者)也没有考虑使用Cairo或Openframeworks。更常见的是使用SDL,尽管它不是完全硬件加速的,因此对于现代游戏而言并不是一个好选择。SFML 是一种备受欢迎的替代方案,但现在大多数游戏开发者可能都在SDL之上自行开发他们自己的OpenGL渲染。

看起来,Clutter可能是一个不错的选择,而且它似乎功能齐全。但有时较大的框架的问题在于它们变成了一种封闭的环境,很难集成您可能需要的额外模块 - 例如,我不知道输入如何工作。

使用不太知名的引擎的另一个问题是,如果您去https://gamedev.stackexchange.com/http://www.gamedev.net提问,社区可能无法提供太多帮助,因为他们不熟悉您正在使用的技术。您必须权衡这种成本与使用不受欢迎但实际上非常有能力的库所带来的潜在收益之间的关系。(以及这些其他人是否知道您不知道的东西...)


旧的回答,我知道——但是你所说的“SDL…不完全支持硬件加速”是什么意思?我使用SDL来打开窗口并轮询输入,但之后全部都是原始的OpenGL。 - user755921
1
@racarate:SDL在2.0版本之前没有使用OpenGL实现其渲染。它可以将精灵绘制到屏幕上,但不是最有效的方式。如果您直接使用OpenGL,则可以绕过此限制,但是SDL本身并没有提供加速图形渲染。据我所知,自2.0版本以来,情况已经改变了。 - Kylotan

0

Clutter是相对较新的技术,目前使用它的应用程序并不多,特别是游戏方面。因此,你很难找到有游戏开发经验的人。

尽管如此,Clutter确实具有一些有趣的功能,使其在某些情况下看起来非常吸引人,我甚至认为,在许多类型的游戏中,内部场景图甚至可以成为游戏开发者的优势。

我想向您提出另一个有趣的2D游戏图形选项:诺基亚的Qt。

虽然它主要是一个通用GUI工具包,但它具有一些不是每个游戏开发者都会意识到的好处。事实上,它有一个完整的OpenGL绘图后端,可以用于绘制任何小部件,并使用任何Qt的画布绘图操作。

当您开始显式使用QGLWidget时,情况就变得疯狂了,它不仅强制执行GL绘图模式(这不是默认值),而且还允许您将自己的GL绘图与Qt的绘图操作混合在同一上下文中。您不仅获得了使用简单易用、高级别绘图操作配合强大的事件队列和高效的输入处理的可能性,而且还保持了在未来内置更高级别的低级别图形的自由。

请查看此示例。请注意,您可以自由混合本地GL绘图与Qt的Painter功能(如果您注意GL矩阵堆栈)。


1
Qt中的QGraphicsView非常适合与Box2D集成。 - McBeth
我会认真考虑Qt-毕竟经过这么多年,我想它应该非常成熟,而我之前没有意识到它的硬件渲染能力。 - lukecameron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接