2012-06-04 36 views
6

作为一种爱好,我一直致力于改造旧的视频游戏,并且我希望尽可能避免重新发明车轮。该游戏基于GUI很强大,但是GUI需要根据外观来定制,并且还需要在3D游戏屏幕上使用3D OpenGL渲染。用于2D/3D游戏开发的Qt库

为了给你一个想法,这里是从最初的原型截图:

enter image description here

有使用大量的动画和3D也是,但GUI控件的行为大致相同的标准桌面应用。到目前为止,我一直在使用我自己的GUI库(它不健壮或不完整,而且我遇到了一些问题)。

我一直在考虑迁移到Qt,因为它的声望和令人印象深刻的功能,以及Qt网站上的一些漂亮的截图。但是我之前从未使用过Qt,所以我没有真正了解它的功能,或者需要什么样的时间来投资才能学习它。 (注意我使用过FLTK)。

我的问题是:在这种情况下使用Qt是否可行?

UPDATE:在嘲笑Qt中的一些游戏画面后,我决定不使用它。虽然它支持许多我需要的功能(特别是通过样式表),但我需要支持基于位图的自定义预渲染字体(我无法转换/替换它们)。而且我不能继承QFont,也不能在未来的Qt发布中重新实现它。也就是说,我对Qt印象非常深刻(包括易用性和良好的文档)。我将借用我的引擎的一些功能。感谢所有提供意见的人。

+1

简单的答案是肯定的,在这种情况下使用Qt可能/实用。为了得到更有效的答案,你可以考虑问一个更详细的问题,或者列出你对Qt可能有的一些疑问。 – Brady

+1

看看'QGraphicsView' /'QGraphicsScene'体系结构,它应该接近你所追求的。 – cmannett85

+0

谢谢你们。那么我从来没有使用过Qt,所以我主要关心的是花费大量的时间来学习它,发现它无法做到我所需要的。 QGraphicsView类似乎支持我需要的一些功能。我需要的另一个示例特征是非矩形按钮,例如,与倾斜的边缘(我现有的代码使用图像掩码来接受/拒绝鼠标事件)。 Qt会轻松实现这样的壮举吗? – QuasarDonkey

回答

4

基于截图很难知道游戏需要做的所有事情;不过,我会在这里回应其他海报的情绪,并提供一些供您参考的途径。

一,你可能想考虑QtQuick的GraphicsView框架,但这真的取决于你需要做什么。我只是想把它作为替代品扔掉,所以你不要错过它。这tutorial使用QtQuick放在一起真正光滑的连接四种风格的游戏。这可能比你想要的更简单,但是再一次,也许不是,这取决于你需要做什么。其次,在为所有按钮编写自定义绘画事件之前,我会考虑使用Qt Style Sheets并在CSS中使用类似语法的样式来设置窗口小部件。这将使您能够非常快速地以非常灵活的方式改变GUI的外观和风格。根据你的截图,我认为你可以比子类化和滚动你自己的设置快得多你想要的样式表。但再一次,基于一个截图很难知道。Here是仅使用Qt样式表实现的深色和橙色GUI的示例。 QPushButton的样式表的border-radius属性会给你四舍五入的按钮(ref)。

+0

是的,我偶然发现了样式表。 'border-image'属性似乎提供了我需要的大部分主题功能,因为我主要使用预渲染的图像处理所有内容(希望它也可以制作动画?)。这将是特别有用的,因为游戏支持多个可玩的帝国,每个帝国都有不同的外观。关于圆形按钮,图像已经是圆形的,我只想限制鼠标点击到该区域。 QWidget :: setMask()将做到这一点。我会检查出QtQuick。 – QuasarDonkey

+0

是的,但与样式表似乎你不会*需要*您的按钮的图像,我说得对吗?您可以编写样式,然后对UI进行更改/修改(至少在按钮方面)更容易。然后再次我不知道你的工作流程,所以尽可能适合你最好的。 如果你想知道如何使用动画属性(一个CSS),我不认为你会用Qt样式表。据我所知,你将不得不使用图形视图框架或动画框架(和/或两者的一些组合)来获得良好的动画。祝你好运! –

1

上面已经给出了一个简单的答案,但是要抛出一些更多的想法:是的,这很可能,您可能不需要太多地与Qt作斗争。在大多数情况下,推荐大量定制小部件的建议是子类,并自己实施绘制事件。

然后,您可以使用基本绘图基元的负载来获取元素的基本形状并从此处展开。这里实际上有几个问题,关于如何做到这一点真的很好的资源。

+0

是的,我在想这个。根据我在API中看到的,将小部件子类化以获得我想要的确切外观和感觉会非常容易,例如,通过重写QButton :: drawButton()等。 – QuasarDonkey