- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我只是在玩一个旧的 SNES RPG(Mana 的 secret ,如果有人在乎的话)并且想知道一些关于游戏编程的一般知识。
抱歉,有些脑残问题,我真的是初学者。 :)
这些问题很笼统,但使用 SNES 风格的 RPG 作为"template"来了解我的意思:
游戏如何跟踪其“世界”中的所有对象、触发事件等?例如,它如何跟踪哪些宝箱已经打开、哪些门被锁住、哪些故事事件已经触发?
它是否基本上创建一个元素数组,每个元素对应一个箱子/门/事件/等,并在打开/触发时“标记”每个元素(将其值从 0 更改为 1)?如果有多种方法,它们是什么?
如何处理“变量列表”?即,如果您有一个游戏,当您可以拥有大量元素(即:盔甲、剑)并且每个元素都有 X 时,这是如何完成的?
我的猜测:有一个结构体,它有一个大数组,每个可能的对象都有一个点(一个 X 个整数数组,其中 X 是要拥有的可能对象的数量),其中每个元素的值表示您拥有多少个该对象, 然后对每个对象都有一个巨大的枚举,以便一个对象与相应的索引匹配,并访问它,例如: numberOfSwords = inventory[SWORDS] 其中 SWORDS 是枚举的一部分,并且有一些与之关联的整数。我有多近?
对象的数量可以变化的情况如何?即,如果我有一个游戏,屏幕上有一定数量的敌人,他们随时可能被杀死/生出新的敌人,在我看来,我需要一系列“敌人”对象来循环通过和过程,但元素的数量会随时变化。通常的方法是什么?链表?
非常感谢任何帮助/提示/指针。
最佳答案
以非常基本的方式,您的答案不会太远,事情可以按照您提到的方式完成。然而,空间和处理能力可以发挥作用,因此您可能希望将其缩小到打开和关闭位,而不是使用一系列 bool 值来跟踪哪些宝箱或您在事件链中的距离,并使用位运算符隐藏以查看您在故事情节中的位置,或者是否将您将要显示的宝箱显示为打开或关闭。
对于库存,与其跟踪玩家拥有的每种元素的数量,不如为玩家可以拾取的所有元素提供基础元素;武器、盔甲甚至金钱。然后,您可以制作一个仅包含玩家拥有的项目的链接列表。使用您提到的项目的枚举,然后使用该项目的数量。这将允许对事物进行排序,并且也只会将玩家角色实际拥有/拥有的项目保留在内存中。您可以扩展此数据结构以跟踪该项目是否已配备。您可能会在 items 表中保留更通用的 item 的排序信息。
敌人可能会更复杂一些,因为你需要对他们做更多的事情。不过,这里的链接列表仍然可能是您最好的选择。这样从列表中删除对象会更容易一些(可以在玩家杀死它们时简单地删除链接等,或者在列表中任何需要的地方添加新敌人。)
老实说,没有一个答案,它可能取决于很多事情。最好的方法就是简单地尝试一下。对于一个简单的“如果我为此做这个怎么办”,它真的不会花那么长时间来试一试,看看你能走多远。如果您开始遇到问题,您可以开始考虑其他选项:)
希望这会有所帮助。
编辑:只是想添加一个指向 www.codesampler.com 的链接。通常更多面向 DirectX 的教程站点,但作为初学者,它可以让您开始思考或为您提供一系列起点。作为一个额外的好处,很多 DirectX SDK 示例/示例开始被格式化,非常类似于这个站点的教程是如何完成的。可以帮助您轻松了解整个事情。
关于C++ 初学者游戏编程 : Keeping track of objects, 库存列表、对象/字符的不同数量的数组等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4131054/
HTTP Keep Alive是如何实现的?它在内部使用 TCP Keep Alive 吗?如果不是,服务器如何检测客户端是死是活? 最佳答案 我知道这是一个老问题,但仍然: HTTP Keep-Al
我需要在每次连接到我的网站和获取数据时节省时间。 这是我的工作。 ESP 模块连接到家庭 WiFi。 AT+CIPMUX=0 --> 响应OK AT+CWMODE=1 --> 响应OK AT+CIPS
我尝试添加新标题的方法: request.Headers.GetType().InvokeMember("ChangeInternal", BindingFlags.Instance | Bi
我听说 Connection:Keep-Alive header 会告诉服务器将客户端和服务器之间的连接保持一段时间,以防止每次客户端向服务器建立请求时都要付出努力。我尝试将其添加到请求的 heade
我遇到了一种我一直在研究的垂直 slider 的问题。问题是,当我更改显示分辨率时,右侧缩略图的高度与左侧图片的高度不同。很难用文字来解释,所以我做了一个代码笔来帮助我更好地理解它。是这样的: htt
我在 apache 服务器上使用 http keep-alive, 比方说我要求它保持连接打开最多 2 分钟... 现在,如果连接被创建并闲置一分钟,php 持有的资源, 像 mysql 连接、文件句
我看到一些 proguard 配置有这样的行: -keep class a.b.** {} 我对 {} 的使用感到困惑。这个我知道 -keep class a.b.**表示保留包a.b及其子包中的所有
keep-alive的设计初衷 有些业务场景需要根据不同的判断条件,动态地在多个组件之间切换。频繁的组件切换会导致组件反复渲染,如果组件包含有大量的逻辑和dom节点,极易造成性能问题。其次,切换后组件
我知道有一个 DELETE FROM WHERE mysql 中的命令,如果表达式有效,则从指定表中删除元组。 然而,在取keep only表达式的补码时总是使用德摩根定律成为一种负担。 我的问题
我已经尝试了 2 个小时让我的页脚留在底部。 我一直在尝试“Matthew James Taylors”技术,但没有成功。 有人看到我遗漏了什么或做错了什么吗? 这是一个活生生的例子:http://g
是否有工具或流程可以让您的函数、选择器和“for 循环”方便且可搜索以供将来使用?我什么也没用,偶尔会重新学习我已经解决的类似问题。 背景:我正在学习 jQuery 和 Javascript,并开始看
所以根据haproxy作者的说法,谁知道关于http的一两件事: Keep-alive was invented to reduce CPU usage on servers when CPUs we
我正在尝试确定客户端是否已关闭来自 netty 的套接字连接。有办法做到这一点吗? 最佳答案 在客户端通过 close() 关闭套接字并且 TCP 关闭握手已成功完成的通常情况下,channelIna
我已经在本地主题分支 上工作了一段时间,偶尔只做一些更改。 与此同时,master 分支有了显着的发展。我决定将 master 分支中的新更改 merge 到我的本地主题分支中(与我从中分支出来的
1、作用 主要用于保留组件状态或避免重新渲染。 2、用法 <keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。 <ke
HTTP 长连接,也称为 HTTP 持久连接(HTTP Persistent Connection)或 HTTP 连接重用,是一种在 HTTP 协议中实现的机制。 在传统的 HTTP
我需要合并一些 dll,文件名和程序集名称都需要与我的主 dll (mydll.dll) 相同。我还需要 pdb 文件。我如何完成这项工作? 以下是我尝试过的一些方法: 只需使用 ILMerge my
我有一个在其他字段中具有FileField的表单。假设用户选择了一个文件,然后按Submit(提交),另一个字段触发了ValidationError。 当我取回表单时,页面上出现错误,用户为文件字段选
我正在学习 akka 流,在代码中遇到了 Keep.left 和 Keep.right: implicit val system = ActorSystem("KafkaProducer") impl
我正在一个项目中,有人检查了一些文件夹和文件,这些文件夹和文件不应该位于存储库中,并且应该位于我们本地,我尝试通过以下命令删除它们,这给了我这个错误 svn delete filename --kee
我是一名优秀的程序员,十分优秀!