又到了每年的这个时候。 如果您还没有阅读我的上次验尸,这是自上次我卡住以来的略微延续。 在这里,我将总结我在Ludum Dare期间发现的想法和其他事情。 希望您能从本文中学到与我一样的知识。 但是到目前为止,这是我使用此引擎所做的最有趣的果酱。

说到这,如果您还没有尝试过我们的游戏,我真的很鼓励您! 留下一些反馈,因为我很想听听您对任何事情的想法! 您认为我能做得更好吗? 您的经历如何? 你喜欢它吗?
对我而言,Jam的乐趣不仅在于主题和时间限制,还在于我们可以通过引擎限制来做什么。 我将再次讨论使用引擎时遇到的一些麻烦,我真正希望获得的一些便利以及在Jam期间做出的一些较差的选择。
自定义引擎限制:
好消息! 我没有从头开始重写引擎,因此大多数位和组件与上次都相同,甚至在这里和那里都有所改进。 我提到了我不喜欢的东西的全部清单,实际上我解决了自上次以来的大部分问题。 我将在下一部分中讨论这些。
对于这一部分,我将再次讨论范围界定,因为我认为这对任何项目都是一项艰巨的任务。 如果您希望项目成功,则需要确定范围并削减范围,然后再次确定范围。 到目前为止,这与软件的使用相结合,使人们充满了难以估计的错误估计,这是在各地发生灾难的好方法。 为了很好地确定范围,您需要了解您要解决的问题,幸运的是,进入此Jam时要牢记这一点。
鉴于引擎已经变得更好了,但还远远不够完美,我们必须应对新的问题。
- 没有动画
我没有计划任何动画,精灵表或其他引擎可能免费提供的任何精美的瓷砖作品。 在某些情况下,我后悔没有精灵动画,例如对中央的火焰进行动画处理,以及对按钮进行动画处理(悬停/按下/释放时)。
但是史蒂芬,您可以通过删除旧的精灵并将其替换为新的精灵来伪造动画! 好吧,我以为不幸的是,也陷入了这个困境,还有另一个错误,我们无法对绘制精灵的顺序进行排序。这意味着我们不能只删除并重新添加精灵:(。
因此,涉及动画的所有内容都被剪切掉了,没有足够的时间了。 更何况,我在果酱期间还没有完全从事艺术创作,所以我买不起额外的艺术品。 总的来说,我认为如果动画到位,游戏本来可以更好,哦,好吧,下一个Jam!
- 没有重物理游戏
物理系统效率很低。 在场景中有许多移动物体的情况下,Box2D的运行速度非常慢。 一旦达到约500个活动对象,我的FPS就会下降。 部分原因是因为我没有对象回收器,因此目前移动/创建/销毁对象非常昂贵。 这里有很多工作需要解决,但是我很快就开始碰到“这可能是图书馆的限制”墙。
在“卡纸”期间,我发现试图一次移动同一区域中的500个实体有多么可怕。 我发现“最好是尽可能地避免物理模拟。” 这可能适用于那里的每个物理系统。 我确定某些系统内置了该优化功能。
结果是,在此卡纸上几乎没有做过物理学方面的工作。 鼠标经过物理模拟(用于碰撞),仅此而已。 在某一时刻,我们使每个生成的物体与火发生碰撞,以触发一个事件来做其他事情。 对于物理学来说,这被证明是太多了。 这是从游戏中删除的,可能会变得更好!
- 没有使用“真实” python的经验
惊喜! 这次,我和我的团队都使用我们都不熟悉的语言编写游戏。 我的意思是,我们之前曾接触过Python脚本,说要在此处更新变量,然后在此处更改输出。 但是我们从来没有从头开始用Python编写过东西。 Python语言中有很多东西我们没有利用,例如可选的命名参数,协程,枚举类,python标准库和自由的无类型变量。 部分原因是我们的大多数编程知识都来自C ++,因此其中的大多数概念对于我们来说并不是免费提供的。
随着时间的流逝,这种情况只会变得越来越好,随着我们学习更多的语言功能,我们可以利用Python更快地解决问题。

更不用说我们有一些可怕的Jam骇客,有一天我可以在另一篇文章中谈论。
话虽这么说,我们在这里采取了“不要让事情做得太复杂”的路线。 很好 我认为正确的数学方法是正确的,并且应该是Jam编程中最难的部分。 我们不应该为使语言功能正确而奋斗。 坚持基础,并做得足够好以使其正常工作。
- 没有资源预加载
是的,我这里不好! 我放了一点球进入这个果酱,添加了预加载器。 我们想要声音,我们想要精灵。 我们都得到了! 但是现在我们有一个问题,在游戏过程中会从磁盘加载资源。 有时这可能会导致FPS大幅下降! 那很糟。
幸运的是,我们在游戏中没有太多资源,但这肯定使我们避免疯狂增加我们想要添加的内容。 我们拥有的最大资产是结尾的“ tada”,我们不介意FPS下降以显示此处的功劳。
- 游戏编辑器很差
上次Jam我抱怨说,没有视觉上的方式来调试系统。 因此,自上次Jam以来,我添加了很多东西,例如游戏中的实体查看器以及Box2D Physics Visualizer。 不幸的是,我认为足够好的解决方案最终根本不是很有用:(。在很多情况下,它为我们解决了一些错误,因此-并非完全是垃圾!我认为有用的!
我将来希望看到的一些东西:
- 在调试器中命名实体的能力

- 从快照加载的能力(保存状态)
回到SNES仿真时代,从状态保存和加载的能力是仿真器提供的最有用的功能之一。 这在游戏中也有一些非常有用的调试用途。
- 使用脚本时更好的工作流程
有时我只想在脚本中更改一个魔术数字,然后看它能做什么。 也许下一点可能是解决此问题……
- 在游戏中编辑实体和脚本的能力
能够在游戏仍在运行时编辑实体,然后将实体热重载到游戏中,这是很好的,但是只有在我们具有savestate时才可能!
- 只需一天的实际工作时间(〜12小时)
与每个范围界定问题一样,您必须意识到自己的主要资源是时间,以及该时间需要花多少钱(成本)。 我们只有一天才能真正地将所有内容整合在一起,然后在这里和那里分散时间来完成其余的工作。 因此,对我们而言,专注于首先完成我们认为最重要的事情非常重要。
这次我们实际上有一款可以让您完成的游戏!! 我们有更多的时间进行测试,也有更多的时间来重复一些未完成得很好的想法。
我喜欢的东西:
- 我们真的进入了“让卡纸”的思维定势,左,右和中部有很多骇客
这是我们的第三个果酱。 一些重要的收获是:以“只交付它,不用担心维护它”的思想观念进入“困境”。 从事软件工作的人员接受了很多培训,目的是“不要让您的代码对其他人来说太可怕了”。
这是Jam体验附带的东西,仅仅是撤消训练以完成工作的能力。 知道在哪里可以使用快捷方式,知道您所做的一切的明确生命周期。
例如,我需要一个事件系统,该系统可以在事件发生时播放文本。 我制作了一个微型事件系统,可以以一种速度播放文本。 对于我来说,这足以解决我的问题,并且可以通过大量的复制/粘贴排序来减轻按时播放文本的负担。 可以,因为我再也不会为游戏计划过20行文字了。 如果我需要更多,可以添加一些复制粘贴的行,但是它永远不会爆炸。
但是,在“果酱”设置之外,我想要一种更可维护的方式来处理文本。 如果我想要更多文本怎么办? 如果我也需要使文本动画化怎么办? 我该如何处理非英文文本?
- 事实证明,Python脚本可以极大地改善迭代时间
这次我们进行了很多有价值的对话,我们说“试试看”,然后尝试看是否可行。 能够快速迭代是我们添加Python的原因。 和男孩做到了!
我们能够完全用python处理事物,而无需进行1-2分钟的长时间重新编译。 对于一个问题,我们能够为2-3种不同的解决方案提供原型,然后选择哪种方案效果更好。
我们花了令人惊讶的时间使鼠标正常工作,但事实证明这完全是一个不同的问题,因此我们一起进行了调查,以获取所需的结果。 顺便说一句,如果全屏显示会损坏鼠标。 希望人们不会以全屏播放吗?
总体上对此结果感到非常满意! 对序列化系统的组合也很满意,我可以轻松地向Python添加新的绑定。 这仍然是一种痛苦,但是如果没有的话,肯定会更加痛苦。
- 对话系统
在卡纸期间,我能够快速将文本输入系统组合在一起。 尽管输入系统的“干扰”质量显示在我无法完全控制对话框的末尾。 一个快速的对话框,但没有排序字符串的能力,这要花一点钱。

我希望将YARN之类的内容集成到引擎更新中,以便我可以更轻松地管理文本提示。 对于我来说,这实际上将是非常令人兴奋的,因为这可能是我提供的第一个纯Python /组合系统。
- 美术和非编程类作品有更多时间
能够将Jam的前2-3个小时花在概念设计上,并完成所有艺术品工作确实很有趣。 花时间写故事也很有趣。 我认为有意义的游戏才是最能吸引人的游戏。 电子游戏结合了视觉,听觉和互动元素,将含义传达给玩家。 这是许多其他媒介无法轻松完成的事情,这也是我最喜欢的游戏!