发布
社区首页 >问答首页 >在QML游戏中实现菜单系统的最佳实践?

在QML游戏中实现菜单系统的最佳实践?
EN

Stack Overflow用户
提问于 2018-04-20 21:16:25
回答 2查看 326关注 0票数 0

我是QML/QtQuick2的新手,我非常喜欢它。为了开始掌握它,我正在实现一个小的全屏游戏。我的想法是有一个(简单的)游戏,当用户按下ESC键时,弹出一个带有一些设置的图形菜单。

现在我已经运行了所有的基础知识,但我不能完全确定哪种方式是管理菜单和来回传递键盘焦点的最佳声明性方式。最好是静态地创建菜单并将其隐藏在我的主文件中,如下所示:

代码语言:javascript
代码运行次数:0
复制
MyMenuSystem {
   visible: false
}

然后在我需要的时候将它设置为“可见”?或者推迟加载,然后使用Loader并创建一个新实例?为了简洁,我更喜欢在QML代码中声明它,但这里的最佳实践是什么?或者,有没有什么组件可以在视图之间切换,而我完全没有?我几乎找不到关于这个主题的信息和例子。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2018-04-20 22:01:21

你的问题有点宽泛,可能会导致固执己见的答案,但由于这是我最关心的话题,我想我应该试着给出一些建议。

加载器

我倾向于只在我需要加载的项目只在某些情况下相关时才使用Loader。例如,如果打开的文档不支持某个特性,则可以将表示该特性的UI元素放入Loader中。这样做的一个好处(除了(通常)非常小的性能提升之外)是,它避免了为该功能添加大量空检查的需要。例如,如果在这种情况下不使用Loader,您可能会得到许多如下所示的代码:

代码语言:javascript
代码运行次数:0
复制
text: optionalFeature.foo ? optionalFeature.foo.bar : ""

使用Loader,您可以控制何时加载项目,以便只有在启用可选功能时才会加载项目。然后代码就变得更好了:

代码语言:javascript
代码运行次数:0
复制
text: optionalFeature.foo.bar

弹出窗口

对于游戏中的菜单,我会使用Popup。如果您希望用户能够在后台看到游戏,这是很好的,不过如果您愿意,您也可以使用overlay来掩盖这一点。

StackView

如果你不想使用弹出窗口,那么我建议你使用StackView。无论如何,你可能应该在游戏中的每个屏幕上使用它,因为它非常适合它。

票数 0
EN

Stack Overflow用户

发布于 2018-04-21 15:55:27

下面是我如何实现菜单系统:我使用component创建一个组件,并使用createObject()将其转换为该组件实例。

MyMenu.qml:

代码语言:javascript
代码运行次数:0
复制
import QtQuick 2.9

Popup {
    /* Menu Item 1 */
    /* etc etc */

}

Game.qml:

代码语言:javascript
代码运行次数:0
复制
Component {
   id: myMenuId
   MyMenu {

   }
}

Game {
  id: myGameId
property var dynamicItem
 Keys.onPressed: {
          if (event.key == Qt.Key_ESC) {
              dynamicItem = myMenuId.createObject(myGameId);
              dynamicItem.open()
           }

      }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49942551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档