您可以建议使用什么C ++ GUI库?[关闭]


26

我正在用C ++构建自己的游戏引擎,目前正在确定应使用的用户界面。

我应该使用图书馆吗?我应该自己做吗?


3
您的意思不清楚:游戏中的GUI?还是工具的GUI?每个人都是一个非常不同的要求..
jacmoe

1
拥有ENGINE (史诗音乐)
Ricket 2010年

1
如果只需要模式对话框,则sourceforge上的小文件对话框就是一个单个C C ++跨平台文件,可以添加到您的项目中。没有init,没有主循环
tinyfiledialogs'May

Answers:


11

实际上,Qt小部件可以与OpenGL集成,而OpenGL可以轻松地与Qt(QGLWidget)集成。当然,平台本机外观的小部件可能并不完全是您想要的,但不用担心,有一些方法可以对其进行自定义,创建自己的或使用其他更适合您需求的东西,例如Qt Quick(您也应该能够集成)。

如果您有兴趣,请不要错过以下链接:小部件输入第三个维度:WolfenQt,使用OpenGL加速小部件


9

我不认为您应该编写自己的游戏,创建游戏引擎的任务本身就非常艰巨,如果您周围有许多可以使用并根据自己的喜好许可的具有良好许可的库。

对于游戏引擎,我会选择即时模式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/


4
IM GUI是一个有趣的概念,但是我发现当您尝试做游戏性操作时会弹出一些问题。如果要菜单元素进行动画输入/输出,则必须执行诸如修改所有小部件的单个位置之类的操作,或执行诸如修改该调用的GUI转换矩阵之类的操作。例如,如果您有一个Window容器,它将其操作转换为它的子代,则会更容易。同样,由于某些原因,大多数IMGUI实现都缺少“禁用”的小部件状态。
Tetrad

@Tetrad:使用自动布局,相对位置或绝对位置来实现小部件组非常容易(Nvidia小部件可以做到这一点。)它使您可以轻松地将小部​​件包含在窗口或面板中。对于“已禁用”状态,我看不到为什么不能轻易实现这一点。对于“游戏事物”,我认为即时模式概念实际上比保留模式更合适,因为微件每帧更新一次。
Oskar N.

7

我个人会推荐CEGUI。它是开源的,还不错。但是,您要记住的是,如果您手动写出所有内容,可能会变得非常冗长。

但是,从好的方面来说,它具有适用于OpenGL和DirectX的渲染器。我设法将其放在通常使用的模板之上,该模板直接使用VBO写入纹理(有点怪异)。

有问题的游戏是为网络分配的。任务是玩一个带有大厅的网络游戏。我知道大厅会让人头疼,所以我选了一个图书馆为我做了大部分工作。


这就是我目前正在使用的。我发现它有太多依赖性。我在将其链接到我的项目时遇到了麻烦(IIRC,许可证说我只能链接到图书馆)
MrValdez 2010年

6
它有一个荒谬的依赖量。它使我的小型演示游戏膨胀到50 MB!
knight666

什么?我认为您做错了:)我的游戏中CEGUI DLL的重量小于3 MB。并MrValdez:CEGUI是在BSD许可下..
jacmoe

MIT许可证-对不起。CEGUI已获得MIT许可。:)
jacmoe 2010年

5

大多数GUI库(Qt可能是最流行的C ++而不是仅Windows)中的问题是,大多数库无法很好地集成到引擎中。传统上,在GUI应用程序中,GUI库控制主循环,您只需将回调连接到事件即可。在游戏引擎中,您通常希望控制循环,因此充其量是很棘手的。也许您正在寻找可以处理图形控件和对话框的东西,并将其传递到3D上下文中?这些可能很难找到:-/


<pedantic> wxWidgets也是跨平台的</ pedantic>,尽管我对引擎集成
持保留意见

3
我说的是“最受欢迎”,而不是“唯一” :-P wx在我上次使用3D上下文时的支持甚至更少。
coderanger

4

我坚信自己写,但我又很老套。与另一个GUI库进行战斗以仅完成您想要的一件事情,这往往使我发疯,此外,大多数游戏GUI都很琐碎,因此您不必全力投入MDI和超级OO设计,当您碰巧将鼠标悬停在复选框侧面的任务栏上时,按钮可以具有突出显示的滚动视图-或类似的东西。我猜是针对不同人的不同笔触。


在某些情况下,“自己编写”并不像人们想象的那样过时。用户界面很重要的游戏,例如管理游戏或具有复杂项目管理的RPG;用户界面将是体验的重要组成部分。joelonsoftware.com/articles/fog0000000007.html 如果这是一项核心业务功能-不管做什么,请自己做
v.oddou

3

可能值得研究的一种选择是使用WebKit渲染用户界面,并使用CSS / HTML / Javascript完成所有UI。

这是一个开放源代码实现(Berkelium),这是一个封闭源代码商业实现(Awesomium)


5
WebKit及其同类产品更倾向于每秒刷新一次或两次,因此以这种方式为面向动作的游戏制作HUD可能比较棘手。菜单或速度较慢的菜单将非常有用。
coderanger

1
@coderanger:您可以使用JavaScript / HTML5编写整个游戏。我已经发布了适用于Chrome网上应用店的商业动作游戏,该游戏在WebKit / Chrome中可以60 FPS的速度运行。
肖恩·米德迪奇


3

我个人在游戏项目中使用CEGUI,这是一个非常强大的解决方案。问题是,有时您几乎感觉要对更改的大量文件进行一次小更改。

我还没有使用过它,但是libRocket完全免费了,删除了所有许可费用,什么也没有。关于这个库的最酷的部分是您使用html / css语法编写它。http://librocket.com


2

只是提出一个有趣的建议,如果要为Windows开发游戏,请使用Win32 API。只需使用常规的Windows控件(我建议使用ATL / WTL库),但使它们成为所有者。

在查看公开发行的标题(适用于mod制造商)的同时,我看到了该技术在第一款虚幻竞技场游戏中的使用。

这样做的主要好处之一是可以使用整个Windows UI基础结构,并保持用户对键盘重复率,鼠标灵敏度,双击速度等的偏好。另外,如果您遵守规则,则界面将快速且无闪烁。

缺点是您仍然必须编写一些代码来继承Windows控件的子类,以使其成为所有者绘制,以便您可以将自己的图形和效果应用于它们。

只是把它作为一个想法。


1
我相信win32 / COM是在Vista和Win 7上仿真的。不建议将其用于高性能...
Stephen Furlani 2010年

我想这取决于您将在游戏中使用多少GUI。如果仅用于菜单系统,那么谁会真正在乎,如果您在帧速率关键部分中广泛使用它,则需要一些工作和思考。

@StephenFurlani Win32 / COM不在Vista和Windows 7上仿真,它是本机且全速。此外,ATL / WTL不依赖COM,但DirectX依赖。
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.