⑨chu ⑨chu
关注数: 31 粉丝数: 338 发帖数: 13,078 关注贴吧数: 18
论设计的失败——f2d的反思 bplayer算是告一段落了,高级弹幕搞起来很麻烦,就先扔(坑)着了。应该回归游戏编程了,但是最近没什么心情,来反思一下f2d的错误设计 f2d如果能称为游戏引擎那一定是个笑话,连基础的对象池(内存池)都没有,对象通过引用计数的方式管理一旦忘记释放又只能拜托crt函数去追踪。此外整个"引擎"包装在dll之中使得我不敢试图在Create系函数中抛出异常,只能在接口边界捕获再以屈指可数的几个errcode返回。倘若引擎有一个事件系统的话到还可以导出下log文件,但是我没完成这样一个事件系统(见下),最后弥补的方法是把错误打印到debug输出上(类似trace)。除此之外引擎也缺乏自己的算法容器库等等。而且,包括常见的2d游戏算法暂未实现,虽然目前而言并非致命问题。 我说过我先入的是c#而非c,于是命名规则也是c#ms的驼峰式。思想上也想把引擎设计成完全的oop形式,甚至于没有一个静态变量。这也是目前引擎的风格,全部是类。好处显而易见,你可以把一个类复制到别的地方,然后立即投入使用。而且类与类之间相互独立,互不干扰。我甚至于打算一个程序可以同时存在n个实例。 但是事实证明,这种完全的oop设计是没有必要的,甚至可以是一种灾难。 以上面的事件系统为例,如果我要设计那么我会搞一个CEventSystem。然后公开一个PushEvent的方法用以向log文件写出信息。于是为了使用这个对象,又为了尽可能减少静态变量。那么这个类应该放在框架类里面,然后构造各个子类时作为参数传递。于是每一个子对象都要保存一个evt事件系统指针。尽管可以用异常减少这种指针的传递,但是对于非致命性错误又无能为力了。 而纯c的写法异常简单,定义一个函数,然后调用就行了,必要时放个临界区加个锁。 因此,f2d作为一次尝试明确了一点: 没必要oop的时候不要增加设计上的复杂性。 估计写完stg游戏这个框架可以弃了。 接下来准备去读一些引擎的源码然后向3d进军。 (最后希望能把2d和3d结合起来。fancyGE? 嘛,希望吧)
首页 1 2 3 下一页