我的像素编辑器马上就可以上线steam了,商店和应用的审核都过了,就等一到时间就发布了。
这个应用做的我还是挺头大的,因为基本没有做过比较大的成品的桌面工具,而且还是跨平台的。里面涉及很多技术问题之前都没有接触过,走了很多弯路,折腾消耗了很长的时间。不过现在回头看,倒也还好,正常的学习折腾阶段。可能目前还有bug。
软件功能属于基本的不能再基本的了,后面还好持续更新迭代。目前只实现了颜料板,工具栏,图层等基本功能。动画的帧没有实现,后期实现这个功能,需要捋一下帧跟图层的关系。这个现在还是脑子空白状态,说实话这种情况实现软件,在设计上不太合理,后面加帧的功能有可能需要大改代码结构。还有很多有意思的功能,比如笔刷,还有一些性能优化要做。还有一些基本的,比如快捷键映射,保存目录等一系列小功能。
技术上,其实做这个的初衷有一部分是为了实现游戏框架,因为我发现这东西跟游戏逻辑一模一样。游戏引擎完全通用。所以实现上我直接从底层写的引擎的相关逻辑,没用当前的一些游戏引擎。比如,我选择直接从opengl开始撸,说到opengl,这个我也断断续续学了好几次了,在这个编辑器场景下,我opengl的方案修改了三次方案,只为性能更好,现在也觉得有优化空间,还有几个优化的想法,但是得需要性能测试。
ui用了imgui,挺不错的一个库。完全可以深度定制,属于我的引擎的一部分了。完全可以在之后的游戏或者软件开发里继续用。说到ui,让我想起了这个软件编程语言的选择,本来开始想的是用纯c撸,但是后来发现c的库太少了。比如ui这里觉得imgui很好,最终觉得用他。就决定直接改c++的项目,但是里面代码还是一部分c一部分c++, c++基本只用到namespace和调库使用,还有一个std 库。std库提供的基本数据结构,能减少c的很多手撸代码的情况,算是特别方便了。
然后后来渐渐的,由于软件场景的需要,使用的c++的面向对象的功能越来越多。包括后来考虑跨平台的问题,升级到c++17的标准,看了很多cppreference的文档。觉得c++17甚至20提供了很多的新语法,不比现代语言差。慢慢的基本写的时候,都用c++的库,包括写法。尽量不写c,发现c++确实有很多优点(虽然现在很多c++高级功能还没用到)。让我再一次放下对语言的偏见。
觉得c++兼容的c的标准,属于成也萧何败萧何了。但是如果能尽量保持c++的风格,就也很好了。
其他的三方库用的很少,刚加入了psdlog作为文件日志的选择,刚开始封装了一个标准输出的日志代码,现在也用不上了,约等于白写。
编辑器支持psd文件的读写,使用的三方库,但是我也改了一些问题,当时挺头疼的。
还有一个很大的问题是国际化的问题,刚开始考虑复杂了,以为要通过操作系统的语言去切换软件的语言,后来steam官方说的是通过steam控制的。我刚开始选择了gettext这种老牌库,然后就坑了。在mac上,locale完全设置不了,但是自己启动时没问题的,通过steam启动,locale失效,设置也不生效。而且windows上没问题。为了解决这个问题,我本来想上icu4c这个库,因为这个库还能解决编码的问题,一举两得。但是感觉要改的地方有点多,最后手撸了个代码,自己实现了一个gettext。至于编码兼容的问题,目前适用大部分情况就可以了。后面再改的时候还是要用icu这个库。
说到跨平台和编码问题,确实c++这种语言,跨平台的问题太大了,包括代码和第三方库的编译,gettext我刚开始在windows上折腾,用的源码编译静态库,后来用的系统自带的。现在也用不上了。因为用camke管理的代码编译,windows下我用的mingw编译环境,这个也折腾了好几天。开始装了win7,想多兼容几个系统版本。库的链接一直不通过,我以为是版本问题,升级了版本,发现直接不能用了。后来升级win8.1发现一样的问题。然后才知道是库链接配置的问题。
这个软件,看似功能不多,但是细节做起来还是挺复杂的。除了上面这些不了解工具链或者系统环境等导致的问题,还有直接技术实现的盲区。我印象最深的而且很简单的场景是:刚开始实现完画布和画笔的时候,感觉很开心,那时候觉得这个软件至少实现百分之七八十的功能了。其实现在看来可能百分之十。然后我用画笔乱画的时候,发现一个问题,鼠标移动过快的时候,其实系统能检测到的根本不是连续的点,我的想法有点想当然了。这就涉及一个问题,线的补齐,而且还需要怎么样补齐的合理,这个是关键。刚开始是懵逼的,后来查了很多资料,发现针对问题的想法还是很重要的。
最后还得感慨一下,我这个steam坑位本来是要留给游戏的,现在变成像素编辑器了。倒是可以为以后的开发做技术积累和框架提前实现。只是我一直在想的问题,现在不准备从底层撸框架实现游戏了。现在看看使用JavaScript写了,这个引擎暂时在这个游戏上用不到了。只是因为JavaScript的跨平台能力,小程序之类的,webgl/webassembly这种的还是目前不是主流,肯定折腾的东西太多。学技术可以折腾底层,搞项目还是快速的框架比较好。
上一篇: nodejs的版本管理工具
下一篇: pwnable.kr第一题解题
0 Responses so far.