我正在研究SFML 2中的2d自上而下的游戏,需要找到一种优雅的方式来使一切正常工作并融合在一起。
请允许我解释一下。我有许多类都继承自抽象基础,该基础为所有类提供了draw方法和update方法。
在游戏循环中,我调用update然后在每个类上绘画,我认为这是一种非常常见的方法。我有瓷砖,碰撞,播放器和包含所有瓷砖/图像/纹理的资源管理器的类。由于SFML中输入的工作方式,我决定让每个类在其更新调用中处理输入(如果需要)。
到目前为止,我一直根据需要传递依赖关系,例如,在按下播放键时在玩家类中,我在碰撞类上调用了一个方法来检查玩家想要移动到的位置是否是碰撞,并且只有在没有碰撞的情况下才移动播放器。
这在大多数情况下都可以正常工作,但是我相信可以做得更好,但我不确定如何做。
现在,我需要执行一些更复杂的事情,例如:玩家能够走到地面上的某个物体,按一下键来捡起/掠夺它,然后它就会显示在库存中。这意味着需要发生一些事情:
- 在按键时检查播放器是否在可放物范围内,否则不要继续。
- 查找项目。
- 将项目上的精灵纹理从其默认纹理更新为“掠夺”纹理。
- 更新项目的碰撞:它可能已更改形状或已完全移除。
- 需要使用添加的项目更新库存。
我如何使一切交流?在我当前的系统中,我的类将超出范围,并且方法调用到处都是。我可以将所有类捆绑在一个大管理器中,并为每个类提供对父管理器类的引用,但这似乎只好一点。
任何帮助/建议将不胜感激!如果有什么不清楚的地方,我很乐于扩展。