我正在用C ++构建自己的游戏引擎,目前正在确定应使用的用户界面。
我应该使用图书馆吗?我应该自己做吗?
我正在用C ++构建自己的游戏引擎,目前正在确定应使用的用户界面。
我应该使用图书馆吗?我应该自己做吗?
Answers:
实际上,Qt小部件可以与OpenGL集成,而OpenGL可以轻松地与Qt(QGLWidget)集成。当然,平台本机外观的小部件可能并不完全是您想要的,但不用担心,有一些方法可以对其进行自定义,创建自己的或使用其他更适合您需求的东西,例如Qt Quick(您也应该能够集成)。
如果您有兴趣,请不要错过以下链接:小部件输入第三个维度:WolfenQt,并使用OpenGL加速小部件
我不认为您应该编写自己的游戏,创建游戏引擎的任务本身就非常艰巨,如果您周围有许多可以使用并根据自己的喜好许可的具有良好许可的库。
对于游戏引擎,我会选择即时模式GUI。此处提供更多信息:http : //www.mollyrocket.com/forums/viewtopic.php?t=134
关键思想是绘制组件并同时控制交互:
if (button(id, position, size))
{
button_was_pressed();
}
首先,Unity使用了类似的概念。
您可以在他们的演示中找到NVIDIA的实现:http : //code.google.com/p/nvidia-widgets/
我个人会推荐CEGUI。它是开源的,还不错。但是,您要记住的是,如果您手动写出所有内容,可能会变得非常冗长。
但是,从好的方面来说,它具有适用于OpenGL和DirectX的渲染器。我设法将其放在通常使用的模板之上,该模板直接使用VBO写入纹理(有点怪异)。
有问题的游戏是为网络分配的。任务是玩一个带有大厅的网络游戏。我知道大厅会让人头疼,所以我选了一个图书馆为我做了大部分工作。
大多数GUI库(Qt可能是最流行的C ++而不是仅Windows)中的问题是,大多数库无法很好地集成到引擎中。传统上,在GUI应用程序中,GUI库控制主循环,您只需将回调连接到事件即可。在游戏引擎中,您通常希望控制循环,因此充其量是很棘手的。也许您正在寻找可以处理图形控件和对话框的东西,并将其传递到3D上下文中?这些可能很难找到:-/
我坚信自己写,但我又很老套。与另一个GUI库进行战斗以仅完成您想要的一件事情,这往往使我发疯,此外,大多数游戏GUI都很琐碎,因此您不必全力投入MDI和超级OO设计,当您碰巧将鼠标悬停在复选框侧面的任务栏上时,按钮可以具有突出显示的滚动视图-或类似的东西。我猜是针对不同人的不同笔触。
可能值得研究的一种选择是使用WebKit渲染用户界面,并使用CSS / HTML / Javascript完成所有UI。
我建议使用IUP-便携式用户界面:http://www.tecgraf.puc-rio.br/iup/
我只在Lua编程语言中使用过它,但是它非常易于使用。它仅具有C,LED和Lua风味,但您可以轻松地为其包装。
我个人在游戏项目中使用CEGUI,这是一个非常强大的解决方案。问题是,有时您几乎感觉要对更改的大量文件进行一次小更改。
我还没有使用过它,但是libRocket完全免费了,删除了所有许可费用,什么也没有。关于这个库的最酷的部分是您使用html / css语法编写它。http://librocket.com
只是提出一个有趣的建议,如果要为Windows开发游戏,请使用Win32 API。只需使用常规的Windows控件(我建议使用ATL / WTL库),但使它们成为所有者。
在查看公开发行的标题(适用于mod制造商)的同时,我看到了该技术在第一款虚幻竞技场游戏中的使用。
这样做的主要好处之一是可以使用整个Windows UI基础结构,并保持用户对键盘重复率,鼠标灵敏度,双击速度等的偏好。另外,如果您遵守规则,则界面将快速且无闪烁。
缺点是您仍然必须编写一些代码来继承Windows控件的子类,以使其成为所有者绘制,以便您可以将自己的图形和效果应用于它们。
只是把它作为一个想法。