使用 QGraphicsScene 和 QGraphicsView 在 Qt 中开始基于 Tile 的游戏

2024-06-18

我将开始在 Qt 中编写基于 2D 图块的游戏,并阅读 QGraphicsScene 和 QGraphicsView 类,这些类旨在显示和处理大量 2D 对象。

我的问题是,使用 QGraphicsScene 创建一个包含大量图块的世界是否可行?我可以一次性添加整个世界吗?还是我应该尝试实施一些措施来限制该区域?我读过 QGraphicsScene 可以处理“数千个项目”,但是 2D 图块地图可以很容易变得非常非常大(200x200 个图块?不是那么多,但这已经是 40,000 个对象了,这已经很多了)。

该地图也将是几乎静态的,因此可以将其绘制为一个大像素图,但这确实阻止您使用 QGraphicsScene 中的所有奇特的东西,例如处理独立项目上的鼠标点击等。除此之外,我'我将绘制不会与图块网格对齐的玩家、NPC 等。是否有一些优化的东西可以使用大量静态对象和它们之上的一些动态对象?

使用 QGraphicsScene 和 QGraphicsView 是一个好主意吗?还是我应该尝试在 Qt 中寻找替代方案,或者可能是一个不同的、更面向游戏的库?

提前致谢


您应该使用 QGraphicsView。

The 40,000 筹码 http://doc.qt.io/qt-5/qtwidgets-graphicsview-chip-example.htmlQt 文档是您仔细检查的最佳示例。它处理大量元素的复杂性,以多种比例绘制它们等等。

玩一下这个例子,你会发现,如果你缩小,你可以在任何视图中选择和拖放多个芯片,或者你可以放大到足以看到照片上的一些文本,那么所有的芯片实际上组成了一张大照片。单独的芯片。理解每个部分需要时间,但这是一个非常值得研究的透彻示例。

In the 芯片.cpp http://doc.qt.io/qt-5/qtwidgets-graphicsview-chip-chip-cpp.html源代码中,它展示了如何通过使用基于样式选项中存储的转换的“LevelOfDetail”或 lod 变量 switch 语句来快速运行。

Qt Graphics View 已经过优化,可以完成您在问题中讨论的许多事情,但需要一段时间才能理解如何处理它。

如果您仍然对要使用的地图的大小有疑问,我会将图块布局存储在硬盘上,并在需要时加载您需要的图块布局,并将不需要的图块布局从场景中删除,如下所示必要的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 QGraphicsScene 和 QGraphicsView 在 Qt 中开始基于 Tile 的游戏 的相关文章

  • Linux 上的静态 Qt5 构建:部署时如何处理字体?

    我使用这些配置选项创建了 Qt 5 2 0 库的静态版本 Ubuntu 12 04 开源 确认许可 force pkg config 发布 静止的 前缀 home juzzlin qt5 无icu opengl桌面 无油嘴滑舌 辅助功能 n
  • 是否可以根据 QSlider 的位置来改变其手柄的颜色?

    我非常清楚如何通过样式表自定义 QSlider 但我想知道是否可以执行以下操作 我希望滑块的手柄从蓝色变为黄色 当设置在左侧时 它是蓝色的 设置在左侧时 它是蓝色的 当你将它向右移动时 它会出现从蓝色到黄色的渐变 如果可以通过样式表 如何实
  • 使用 QGraphicsScene 和 QGraphicsView 在 Qt 中开始基于 Tile 的游戏

    我将开始在 Qt 中编写基于 2D 图块的游戏 并阅读 QGraphicsScene 和 QGraphicsView 类 这些类旨在显示和处理大量 2D 对象 我的问题是 使用 QGraphicsScene 创建一个包含大量图块的世界是否可
  • Qt:将数字转换为 QString、QVariant 或 QString::number 哪个更好

    我只是好奇 比方说 我需要在控制台中输出一个数字 代码是 include
  • QT:模块“QtWebView”未安装

    我的操作系统是win10 QT版本是Qt5 7 mingw53 32 目标操作系统是win10 当我使用qmlscene执行qml文件时 发生了一些错误 qrc qml 3 模块 QtWebView 未安装 我的 qml 文件如下 impo
  • Qt 5.3 QPlainTextEdit 更改 QTextCursor 颜色

    我想更改下面的光标颜色QPlainTextEdit小部件 我能够将其宽度设置为6 但我想改变颜色或者它 是否可以 QFontMetrics fm font setCursorWidth fm averageCharWidth setCurs
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • 如何为QTableView中的当前项目设置样式表

    When QTableView编辑控件对于发生编辑的当前项目可见 当窗口中没有活动的编辑控件时QTableView当前项目的样式使用QTableView selection background color 如何只为当前项目设置不同的样式
  • 使用 qt 创建和使用共享库

    我对共享库很陌生 所以我对如何创建 使用共享库有疑问 我正在使用 Qt Creator 和 qt 5 4 2 以及 Microsoft Visual C 11 0 编译器 在我的项目中 我需要创建一个 dll 它从外部库调用函数 有 h l
  • Android 上与 Qt 5.2 的蓝牙通信[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想使用 Qt 框架使我的 Android 设备能够通过蓝牙进行通信 截至今天 Qt 5 2 是最新的 据我所知 尚不支持蓝牙 在本页
  • 通过信号/槽将 QVector 从工作线程传递到主线程

    目前 我在将 QVector 传递到线程之间时遇到一些麻烦 目前我有一个主线程 GUI Thread 和一个频繁发出 QVector 数组的工作线程 在向量内直接发出数据之前看起来不错 接收者是主线程中的一个槽 但该槽接收到的数据是乱码 这
  • Qt:使用 QObject::connect 指定多种连接类型

    我想知道是否可以指定多种连接类型 例如 我希望我的连接类型是排队连接和唯一连接 是否可以在一份声明中具体说明这一点 QObject connect ptrSender SIGNAL ptrReceiver SLOT Queued and u
  • Android 上的 QT 应用程序中的 java.nio.channels.OverlappingFileLockException

    我的 QT 应用程序崩溃了java nio channels OverlappingFileLockException例外Nokia 1具有以下调用堆栈的设备 FATAL EXCEPTION dbp processing com googl
  • 仅使 QTreeWidgetItem 的一列可编辑

    我有一个QTreeWidgetItem有两列数据 有什么办法可以只让第二列可编辑吗 当我执行以下操作时 QTreeWidgetItem item new QTreeWidgetItem item gt setFlags item gt fl
  • 如何在 Qt4 OpenGL 应用程序中启用 HiDPI (Retina) 支持?

    我正在使用带有 QGraphicsView 的 QGraphicsScene 如中所述这个文件 https doc qt io archives qq qq26 openglcanvas html 我打算最终将 Qt 小部件覆盖在我的 Op
  • Qt,颜色选择器对话框?

    Qt 是否有如下所示的颜色选择器对话框 它还需要有一个 OnColorChanged 信号 当选定的颜色发生变化时会调用该信号 我想在他们改变颜色时提供实时预览 这就是原因 使用谷歌我只能找到这个 它是一个圆边上的三角形 我个人认为它看起来
  • 2D Java 游戏。将精灵移动到平铺图像上方

    gt 简短介绍 您可以跳过这部分 我很高兴终于能够在这个平台上发帖 因为我自己通过这个社区获得了很多知识 只是通过阅读 所以我想说 大家好 谢谢 实际内容 序言 虽然我在公司使用 Objective C 进行开发 但我对 JAVA 开发非常
  • 超越堆栈采样:C++ 分析器

    黑客的故事 日期是 2010 年 2 月 12 日 圣诞节前的日子已经过去了 作为一名 Windows 程序员 我几乎遇到了一个主要障碍 我一直在使用 AQTime 我尝试过 sleepy shiny very sleepy 就在我们说话的
  • 更改 QGraphicsView 中的光标

    我正在尝试更改 a 的光标QGraphicsView而ScrollHandDrag已开启 但似乎不起作用 如果禁用 我可以更改光标ScrollHandDrag但不是在它处于活动状态时 我不知道我可能做错了什么 下面是重现该问题的代码的一部分
  • 如何在qt中使用QImage和QPainter将两张图像合并为一张? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 您好 我正在开发一个 blackberry10 应用程序 在应用程序内 我有两个图像 我只需要将这两个图像合并为一个图像 Cascades

随机推荐

  • 如何将所有后代节点和链接设置为与 2 级祖先相同的颜色?

    我有一个 d3 js 树 其后代节点接收其 2 级祖先的节点颜色 这在级别 2 到级别 3 之间有效 但在级别 4 及以上级别停止工作 相关代码 var colourScale d3 scale ordinal domain MD Prof
  • 请解释*贪婪量词的工作原理

    Pattern ptn Pattern compile a Matcher mtch ptn matcher bbaac if mtch find System out println mtch group 输出 不打印任何内容 Patte
  • 防止使用不完整类型实例化模板类

    我正在写一个库 它的布局看起来类似于 A h include
  • 当CSS文件存在时,无法在服务器上找到它们[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 当运行本地服务器时 这一切都运行良好 我有 header html 其中包含以下代码 在 public html 目录 与 header h
  • 设置滚动条粗细

    有没有办法调整滚动条的粗细JScrollPane 默认值有点笨拙 一个快速但又肮脏的解决方案是将宽度 高度明确设置为例如10 像素通过 jScrollPane getVerticalScrollBar setPreferredSize ne
  • 如何关闭 HTML 输入表单字段建议?

    我所说的建议是指当您开始输入时会出现下拉菜单 并且它的建议基于您之前输入的内容 例如 当我在标题字段中输入 a 时 它会给我大量的建议 这非常烦人 如何关闭此功能 你想要的是禁用 HTMLautocomplete属性 在这里设置 autoc
  • Python 3d 金字塔

    我是 3D 绘图新手 我只想用 5 个点建造一个金字塔并通过它切出一个平面 我的问题是我不知道如何填充两侧 points np array 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 fig plt figure ax fi
  • iphone sdk - 调用视图的超级视图的视图控制器的方法

    你好 我如何在当前视图中调用当前视图的超级视图的视图控制器中实现的方法 你能帮我吗 谢谢 通常这是通过代表完成的 让您的视图接口定义一个协议和对某个委托的引用 然后让你的父视图控制器实现这个协议 然后父母会这样做 someView fooD
  • 使用“presentModalViewController”加载视图

    我正在尝试从另一个视图控制器加载临时的滑入视图 我的应用程序的视图控制器的结构如下 Application gt Tab Bar Controller gt TabBarItem gt View Controller 在此视图控制器中 我有
  • 我的 Visual Studio 2008 模板有什么问题?

    我正在尝试为 Visual Studio 创建自己的类模板 称为 公共类 我跟着有关如何手动创建项目模板的官方 MSDN 说明 http msdn microsoft com en us library ms247113 aspx几乎一字不
  • UILocalNotification 播放自定义声音

    我在我的应用程序中实现了本地通知 但我只是想知道是否有一种方法可以播放不属于 iPhone 应用程序主包的一部分的声音 基本上在我的应用程序中 我希望用户录制生成本地通知时播放的声音 而不是播放预先录制的或默认的声音 据我所知 这是可以实现
  • 数组所有可能的组合

    我有一个字符串数组 ted williams golden voice radio 我希望这些关键字的所有可能组合采用以下形式 ted williams golden voice radio ted williams ted golden
  • 如何通过API网关从lambda正确返回二进制文件(图像)

    这是我的 lambda exports handler async event gt const hex 89504e470d0a1a0a0000000d49484452000000a0000000a00800000000aea438f10
  • 如何将curlpp 添加到我的项目中?

    我正在尝试从 vb net 过渡到 C 但我陷入了困境 我从下载了curpp这给了我一个 dll exp 和 lib 文件 我将包含这 3 个文件的目录添加到项目属性中的 附加库目录 链接器 gt 常规 接下来 我将 ws2 32 lib
  • Artifactory OSS 源代码位于哪里?

    我可以下载最新的 Artifactory OSS 版本 5 2 1 但我似乎找不到它的源代码 Artifactory 文档链接到https api bintray com content jfrog artifactory jfrog ar
  • UITextField 在模拟器中崩溃,但在 iPhone 4 (4.2) 中则不然

    我面临一个奇怪的问题 不知道如何解决 我的应用程序中有一个带有 3 个文本字段的简单视图控制器 我已在 h 中将它们定义为 IBOutlet 并将它们与文件的所有者链接起来 其中两个使用默认键盘定义 另一个使用手机键盘键盘 当我尝试编辑电话
  • Anaconda:ModuleNotFoundError:没有名为“conda”的模块

    请注意 此错误与 stackoverflow 中显示的错误 并有答案 不同 它绝对不是重复的 我以前见过这个错误 并且能够通过修改 PATH 以包含 conda 的路径来修复它 如下所示 export PATH opt cloudera p
  • 使用 node-sass 监视整个目录时指定输出文件名

    目前 我可以在查看单个 SCSS 文件时使用 package json 文件中的 node sass build 命令指定文件名 sass build node sass src scss main scss dist css main m
  • 为什么删除void*是UB而不是编译错误?

    为什么要通过删除对象void 是未定义的行为 而不是编译错误 void foo void p delete p 这段代码编译并生成代码 尽管有关于 gcc 和 clang 的警告 令人惊讶的是 ICC 没有给出警告 2 5 warning
  • 使用 QGraphicsScene 和 QGraphicsView 在 Qt 中开始基于 Tile 的游戏

    我将开始在 Qt 中编写基于 2D 图块的游戏 并阅读 QGraphicsScene 和 QGraphicsView 类 这些类旨在显示和处理大量 2D 对象 我的问题是 使用 QGraphicsScene 创建一个包含大量图块的世界是否可