dasasdhba
发表于 2023-7-29 01:22:09
修了 Overlap2D 相关的 bug,调整大部分 _EnterTree() 中的内容为 event TreeEntered += xxx,这样就不需要 override _EnterTree,灵活一点。
之前写的 StateMachine 跟 Node._Process(delta) 相性不太好,正在考虑改为基于 delegate 的形式。
也在考虑后续怎么快速为各种 spawner 生成 godot 编辑器可用的 packedscene 资源,一个一个自行打包实为繁琐。目前的一个不成熟想法是为特定 cs 文件指定同文件名的 json 文件,开发编辑器扩展来处理这些 json 文件并自动生成 packedscene 资源。不过最好能不做成自动生成,毕竟有时候难免需要基于自动生成的结果做一些进一步的工作。
说到这个还有个问题是,我 spawner 是计划做成一系列泛型类,但要想以脚本形式给一个 godot 编辑器节点加脚本,这个脚本文件的文件名必须和其里面希望被加到节点的类名一致。这很讨厌,比如我做了一个 troopaspawner<T> where T : troopa,那要想在编辑器上用我还得 greentroopa redtroopa 等等都给它单独整个 cs 文件,简直。所以更好的想法是直接针对这些泛型 spawner 写生成配置,直接把这些个形式上的 cs 文件和 packedscene 都搞好才比较方便。
dasasdhba
发表于 2023-7-30 19:26:26
现在卡在了 StateMachine 设计方面,感觉无论如何设计都与 Godot 的节点树 process 模式有些冲突。如果要想用 delegate 绑特定的 process 函数,那基本上需要等实例化之后才行,换言之我得全塞到构造函数里面去。不然的话就得绑静态函数,这样的话需要把实例本身也作为参数传进来,但这样一方面麻烦不说另一方面还要求绑的函数必须得是 public,虽然这好像不是什么大事,毕竟像 gdscript 根本就没有这方面的区分。(不过问题是我已经设计了一大堆 protected 方法,有点懒得改了。)
此外,statemachine 这东西本身一般来说还得处理状态开始时,状态结束时,以及两个特定状态之间发生切换时的事情,这就又提出了我该把这些东西放哪的麻烦。
也许我应该直接把 unity C# 那边一些开源的 fsm 直接改改拿来用才对,自己空想也老是想不出什么满意的方案,直接抄得了。
dasasdhba
发表于 2023-8-1 23:10:40
完成马里奥运动(移动跳跃游泳走单格修正),不过仅限运动,音效动画啥也没加,之后再弄。下蹲卡墙等方面的修正还在考虑如何处理较为合适,至少目前的 StateMachine 模式可以很方便地让我切一个 State 完成这事,倒也无妨。
dasasdhba
发表于 2023-8-3 01:12:19
过段时间可以考虑先放到 git 上了,毕竟有个版本控制还是方便得多,到时候可能开个新帖,不过名字我还是没想好(
这几天完善了一些 entity 类的设计,顺便也在考虑 sprite 这方面怎么处理比较合适。如果说有那种不同的类需要互相访问 sprite 相关数据的需求,那就有必要统一一下开发规范。比如敌人死亡一般都需要把 sprite 相关数据传给尸体对象,这些东西肯定更希望用类似于 enemy 抽象类去完成,那么在抽象类里边就有必要规定 sprite 的处理方式。