《春日记》开发记录【5】

来源:互联网 发布:英伟达显卡驱动优化器 编辑:程序博客网 时间:2024/05/05 01:00

自己用Laravel写的小博客和CSDN的博客以后同步更新:
《春日记》开发记录【5】

这次我来讲一下在一些特殊的需求上,我是怎么实现的。

总体来看这次我牺牲了可重用性换来更低复杂性。
我把所有的模块都设置为强自治的系统,即模块所有需要的资源都由模块自己收集。
上层模块只负责调用其初始化接口,享受即插即用的服务。

Painter

在春日记中,所有的绘图都是以矩形作为图元的,我使用三角扇形来实现。
而OpenGL使用buffer中的序列化数据来作为一个图元的绘制数据。
为了避免每帧都生成一个长数据块拖慢速度。
我是用painter中的紧邻数组来管理sprite数据,
当OpenGL绘制的时候只需将数组整块拷贝过去即可。

为了让使用起来更流畅,使用painter创建一个sprite后,
sprite会被返回。
其中包含了一些设置位置、锚点之类的操作。
这些操作最终还是在修改painter数组中的紧邻数据段。

它提供了一个简单初始化,能初始化一个读取精灵并且迅速返回。
这时就可以一边绘制读取精灵,一边进行完全初始化。

Frame

opengl的初始化操作也被封装在这里,所以需要绘图线程来运行它的初始化。
没有使用深度检测和蒙版检测,只打开了反走样和混合功能。

Resource

这里为了将其它模块简化,我将这个模块的返回资源限定必须为最简单最直接的类型。
即如果painter来的读取,虽然资源文件是加密过后的Png,
也必须返回最直接的rgba32数组图像,这样可以将其它模块和复杂的加密资源文件隔开。

资源文件中的贴图是一张一张的png,它负责将贴图解码后拼接在一起,
提高opengl的效率。同时它也负责读取剧情脚本,即时从ttf生成字体位图。

0 0
原创粉丝点击