开发特定于游戏的GUI

时间:2011-06-29 05:27:28

标签: c++ oop user-interface directx

有一段时间了,我一直想在C ++和DirectX 9中创建自己的GUI“库”。我已经看到了很多关于GUI的问题,但我想要的是一个特定于游戏的GUI。大多数库都非常复杂,非常通用,它们支持命令行解析和窗口创建等。这些库不适合我的需求,所以我想编写自己的库。唯一的问题是我不知道从哪里开始。

我不知道如何为库构建框架/基础。我不知道如何使GUI元素/对象相互通信以及如何处理事件。我也不知道如何管理GUI的图形。例如,我是否让程序员对GUI的外观负责,还是创建默认设计?然后我存储一个单独的文件来设计按钮,文本框,标签,组合框等吗?

我还想指出,我只在全屏模式下计划我的GUI,而且我只想支持按钮,文本框,静态标签等基本元素。我希望能够创建一个HUD与图书馆。我知道我要问很多问题,但我从来没有试过创造这么复杂的东西。

4 个答案:

答案 0 :(得分:6)

如果您对所有这些事情一无所知,我建议您不要从头开始编写自己的GUI。 (我实际上是从头开始编写我自己的游戏GUI,我有点后悔 - 我最终得到的结果有点半生不熟,我相信周围有更好的选择。)

但我明白你的意思:你不想使用标准的GUI工具包,因为它不会“感觉”像游戏一样。好消息是,现有的GUI工具包专为游戏而设计。最受欢迎的似乎是CEGUI(Crazy Eddie的GUI系统)。从你的website可以看出,它看起来很漂亮,看起来根本不像Windows应用程序。

我没有使用它,但我建议你在设计自己的之前先查看它。

答案 1 :(得分:3)

编写自己的gui将是一项很好的教育任务,因为您很快就会学习用于使其可扩展的设计模式。如果您有兴趣,GoF book 使用GUI作为许多模式的一个例子。

然而,这是一个很大的(巨大的 - 我的意思是你的生命多年)任务。

然而,您可能感兴趣的一个项目是cIMG库。这是一个图像处理库而不是gui库。它不支持按钮或任何类似的东西,但它确实做了较低级别的绘图,可能更接近你的最终目标(它不会将其成像外包给gui /图形库)。它也是一个仅头文件库,所有代码都在一个头文件中,所以很容易看到。

答案 2 :(得分:3)

我恭敬地不同意这里表达的其他意见。 (bg:我在大学里学过CS,而且我已经编程了30年。)

您可以编写自己的GUI系统,如果您知道自己在做什么,就可以在不到两周的时间内完成。即使作为一个有点高级的编程初学者。我相信"如何编写GUI系统"失去了知识,导致人们认为编写GUI系统需要数年时间。

我建议(并且我认识到这是少数报告)您的努力中的以下战略要点:

  • 忘记设计模式和架构以及总线通信系统和可扩展性等。对于这样一个简单的问题,你绝对不需要它们。如果你追求这些东西,你的头脑就会生活在你甚至没有的问题中。不要做任何面向对象的事情。对于你正在做的事情,完全是错误的树。
  • 简约;而你在这里真的不能太极端。避免各种抽象并非绝对必要。想想你设计中的各个电线,想一想什么需要与什么交谈的绝对最低限度。"你真的需要一个公交系统吗?或者你可以只添加一行执行通知吗?并且想到它,你能做到这样通知根本不需要它吗?从另一个角度来看:你真的需要点击并拖动你的游戏窗口吗?等等。 10次​​中有9次,#34;你不需要它,"还有另一种更简单的方法。找到那些更简单的方法就像在GUI设计中找到作弊码一样。
  • 从最后思考。为纸制系统需要支持的最终用户界面设计。看看你说的是什么:"仅限全屏模式,按钮,文本框,静态标签等。 ...与图书馆的HUD。"这是超级并不复杂。你可以廉价地做到这一点,并且你会更快乐,因为你将拥有完美的控制权。
  • 使用数据。让数据讲述用户界面的外观及其工作原理。您可以在代码中以可打印的ASCII字符绘制窗口和布局并从中进行渲染吗?
  • 控制绘图系统API的表示法(即DirectX)。使用" ESC"表示转义键的键码," SPC"表示空格键。使用包装器使API更方便。让它映射到你正在做的事情的基本操作:flip(),line(x,y,x2,y2),color(BLACK),那种事情。
  • 使用位图并在API中轻松访问它们。 stamp(iconid,x,y)是你想要的简单愚蠢,在一个位置绘制一个图标。请注意,这不是:window.stamp(icon.imgdata,translated_coordinate(cursorpos));
  • 注意输入轮询和绘图翻转系统。那是你引擎的核心。如果你有互动模式,那也是核心。
  • 考虑使用元/信息平面进行位置和坐标以及点击。您可以使用网格来表示布局,从而大大简化了GUI的工作。当用户点击空格时,信息计划可以包含有关所点击内容的信息。

我在500行Python中编写了非常复杂的GUI环境(使用pysdl2。)这包括我的包装器。我还用C ++编写了GUI系统 - 它需要更多的代码行,但实际上并不是那么多。

我绝对100%建议您为自己的工作编写自己的GUI系统。你将不得不开箱即用#34;关于当代主流编程思想,但你可以实现的控制水平是令人难以置信的解放 - 不仅仅是你的游戏工作,而是涉及与用户互动的所有编程领域。

如果你想摆脱主流盒子,可以考虑阅读Alan Kay,Chuck Moore或任何一位年长的程序员。他们并没有感染这种想法"你必须使用其他人在你面前写的东西,因为其他人比你更了解你需要什么以及如何制作东西,而你只是在重复他们的如果你无论如何走上他们的道路都会犯错误,"当他们做了他们所做的事。他们的想法是什么有用"与当代有效的观念完全不同。我鼓励探索。

答案 3 :(得分:2)

对于这个问题已经有很多成熟的解决方案,例如自定义游戏的Scaleform和Unity等游戏引擎中的集成gui API,更不用说来自你之前的许多经验丰富的开发人员的Flotsam和jetsam: / p>

http://www.google.com/search?q=game+gui+library

鉴于你承认缺乏经验和你提出的建议的冗余,我认为你选择一些更小,更有用的东西是明智的。