首先说一下sfml吧
这个打飞机游戏是大一下学期作为c++的课程作业而写的,现在看来非常之烂,而且传代码的时候也是无脑地把整个工程拖了进去(orz)
下面说一下写这个游戏时的一些感想。
sfml还是很方便的,读取资源也支持很多类型。消息机制也是比较好的,随时随地都能捕获键盘,鼠标的事件,非常适合用来写游戏。不过写按钮之类的gui就比较累了,还是winform那样的设计比较方便,不过自己搞一套也不是很难,写点游戏菜单还是很好的。
我个人很喜欢像这样循环的绘图,每一帧刷新一次,以前用opengl的时候太感人了,手动刷新不说,刷新率还不够,会一直闪屏。
还有一点比较好的就是sfml内置了很多图形,遇到一些几何问题的时候就很方便,不过似乎并没有什么大用处,一般来说还是需要自己写很多东西,因为sfml似乎所有纹理都是按矩形算的。所以计算碰撞的时候就会有很多限制,不过xna貌似也是这样?用unity的时候直接把物体的边描出来就行了,自己写多边形碰撞算法还是很痛苦的。
不过我觉得sfml的字体设置怪蛋疼的,需要自己找一个字体文件放在目录下然后读取。字体文件的读取貌似挺费时的吧,不知为什么这么设计,是为了不同平台之间的兼容性吗?还有一个资源比较蛋疼就是音乐,居然不支持主流的格式,不知道现在改没有,不过找mp3转ogg的软件还是挺害怕中流氓软件的,所以还专门开了个虚拟机来转。
不过整体来说,用sfml写游戏的体验还是不错的。
xna
看到这个库的介绍,心中一下子就觉得:哇,真nb。
用这个库是因为课程设计要求,写了一个连连看游戏.
一用起来就觉得:哇,这个和sfml怎么这么像。
不过c#和c++还是有很大区别的,最大的区别就是不能用全局变量瞎jb写。
消息机制和sfml还是比较像,不过最大的区别还是在这个draw和update,这两个函数是不同步的,这样设计还是很好的,效率会比较高,而且一些耗时的逻辑不会卡住界面。然而我这个程序里面还是全部丢在draw里面了,我深刻反省。
资源加载也变得比较统一了,统一用的content,不过编译出来的.xnb是不是稍微大了一点啊,这是为了读取的时候省时吗?不是很懂。
听说xna写3d游戏也是非常方便的,不过我这个连连看也没有写成3d游戏的想法,单就2d游戏这一块来看,xna和sfml真的很像,画图也是用一个类似window的东西来画。于是又是一层一层往下传,感觉我这样设计是不是有点问题?
不过写游戏真的非常麻烦,逻辑还是非常复杂的,这个连连看写的依然很屎,写完之后我自己还是有点看不下去。
唉,果然自己还是太弱了。