c++ - 令人晕眩的游戏关卡表示(格式)

标签 c++ oop

您将如何存储 Dizzy-like 的游戏等级冒险游戏?您将如何指定可步行区域和图形?它是基于瓦片的、基于像素的还是可行走的表面可以用 vector 来描述?

最佳答案

非常古老的冒险游戏(如 80 年代的 Sierra 的任务)过去实际上维护整个屏幕的单独位图,代表 z 深度和 Material ,以确定您的角色可以去哪里和隐藏在哪里。他们会使用像素采样来检查他们的小 Sprite 会去哪里。

虽然当前的机器速度更快,但长边滚动级别使这种方法不切实际,恕我直言。您必须使用更稀疏的表示形式。

一种选择是将您的游戏“缩小”为不可见的方 block ,这样更容易表示。这样做的主要问题是它会限制您的设计(例如,很难做对角线平台),并且会使动画效果很差(例如,您的角色的脚实际上没有接触到平台)。恕我直言,此选项适用于类似塞尔达的冒险游戏,但不适用于 Action 游戏。

第二种选择是通过一些 vector 表示来表示游戏世界并实现一些碰撞检测。我个人会选择第二种解决方案,特别是如果您可以聪明地组织数据结构以最大限度地减少访问时间(例如,可以更快地访问靠近角色当前位置的世界元素子集)。

如果有可用的 2D 游戏引擎提供这种功能,我不会感到惊讶,因为肯定有 3D 引擎可以做到这一点。事实上,您可能会发现使用现有的 3D 游戏引擎并使用它来渲染 2D 会更容易。

关于c++ - 令人晕眩的游戏关卡表示(格式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2827964/

相关文章:

python - 什么是 __del__ 方法以及如何调用它?

python - 创建没有深拷贝的列表子类

c++ - 如何将一个对象声明为我的类的一部分?

c++ - 使用 Boost::asio::async_send_to 发送加密数据时出错

c++ - 在 C++ 中,派生类指针应该指向基类指针吗?

c++ - Type Alias 一个自定义类的对象

C++ stdio::rename();同步?

c++ - 删除元素时 std::vector 中可能存在不一致

javascript - Easeljs (createjs) 无法绑定(bind)两个事件监听器

iOS:具有外部参数的对象类中的 setter