在游戏开发中,我们经常会遇到需要组织对象信息的问题,比如一个FPS游戏中,包括玩家,敌人,武器,陷阱到整个关卡。
这里的建议是,按照Godot的设计思路,将每个对象分解并抽象为一个细部,比如玩家由武器和角色(角色动画,控制器等等)组成,然后,为武器设计脚本,脚本中包含init(),reset(),destory(),为玩家角色设计脚本,脚本同样包含init(),reset(),destory()方法,同理设计敌人的脚本(也包含这三个方法),到整个关卡的脚本(也包含这三个方法),这样,玩家初始化时,调用玩家的init(),然后玩家脚本调用当前武器的init()方法,同理下,整个关卡初始化时,调用各个具体对象的init(),整个关卡重玩时,调用各个具体对象的reset(),整个关卡结束或退出时,调用各个具体对象的destory()方法。
这么做的好处时,各个具体对象由自己的init(),reset(),destory()管理(即完全面向对象思路),这样不用当心漏了某个参数未初始化或会重制而导致游戏难以跟踪的bug。并且,这样还可以单独通过调用某个对象的init(),reset()或destory()来调式。
建议:
1.在设计脚本时,为当前对象编写脚本,应该在每次添加一个新的参数(如name,age等)时,应同时保证init(),reset()和destory()方法的更新(即应该在这三个方法包含对该新增参数的初始化,重制和销毁逻辑)。这样就可以保证每次调用init(),reset()或destory()时是正确的逻辑,如果漏了更新init(),reset()或destory方法,那么可能会导致游戏开发中难以跟踪的bug。
2.建议就算游戏不包含“重玩”机值,也应该为每个具体对象包含reset()方法,这样,但后续需要添加类似“重玩”的逻辑时,整个关卡就不用做太大的调整或担心漏了哪些参数。