成就系统可以在以后的开发中实施吗?


12

我不确定是否要在自己的游戏中实现此功能。我不希望该项目失控,所以我首先关注核心机制。

假设我进行数据驱动并存储所有内容,此功能是否易于稍后实现?


3
几年前,我将某个知名的DOS游戏移植到了Windows上-如果我们要对游戏玩法进行任何更改,我本想添加到其中的一件事-一定是成就。因此,如果我可以为显然不适合该功能的超过10年历史的游戏添加成就,我几乎可以说可以在任何地方添加成就。哎呀,这个非常站点有成就..
杰瑞Komppa

Answers:


19

您是从实现技术的角度还是从设计的分支角度询问?无论哪种方式,您问题的答案都是“是”。

从技术方面来说,通常来说,您只需要在代码中找到与成就事件相关的钩子,然后在其中放入统计信息跟踪代码即可。如果要跟踪的事情并非游戏中已经发生的离散事件(例如:X播放时间),则可能需要添加一些新内容。

从设计的角度来看,成就是外在动力,将它们添加到核心游戏循环中并不会发挥太大的作用,除非是想要寻找它们的人。因此,无论如何,它们都非常安全。


是的,我现在正在这样做。链接shotsFired++到实例化新子弹shotsHit++的部分以及子弹影响其他玩家的部分非常容易。这有助于我追踪到谁射了什么子弹(因为我使用信息来追踪谁被杀死了等)
bobobobo

5

只要您的游戏引擎设计合理,并使用某种可观察的事件系统(由感兴趣的各方生成并监听事件),那么以后很容易“插入”成就系统(通过添加适当的听众)。这种设计非常灵活。


2

由于现有人员已经添加了很好的答案,因此让我回答未发现的情况。

如果您完全可以完成游戏的编码,现在开始编写成就代码,并且发现维护太多的变量和计数并在某些事件之类的事件中清除它们非常复杂。

您始终可以创建一个类(最好是单例)来接收所有事件。现在列出您的所有成就。然后列出所有需要跟踪的游戏事件。例如,我当前的列表如下所示

杀戮敌人-步行,子弹玩家死亡-摔倒,健康ENTER_ROOM,EXIT_ROOM等

这些额外的细节(例如行走,子弹)可以作为参数。现在,在该成就跟踪类中有一个名为fireEvent的函数。搜索代码中您需要触发fireEvents的所有位置,然后调用该函数。现在,在成就类中完成其余的工作。这是不打扰现有代码和代码成就的最安全方法。对我来说效果很快。


对于后期开发实施,这是一个非常好的解决方案。我会牢记这一点,因为我仍然不确定是否要实现它。我可能会在以后的阶段中这样做,因为我不希望我的项目范围失去控制。
布莱恩·哈灵顿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.