BNB,是纯2d的,也不需要特效,所以使用DirectDraw足够了;于是装了个DXSDK 9.0c,准备做一个2D的基础库,实现Sprite ,input,Screen,Font,GUI,Time 的管理;但毕竟还是造‘车轮’的工作;干脆找个完善的2d 引擎。(为什么不用D3d,原因是我还刚入门,5.7号才去书店买书啊……但DDraw却用了很长时间了)
想起以前在sf.net上看到的MCDX还不错,C#开发的,纯ddraw的封装;从名字上看应该是受了XX年前的C++版CDX的影响(当时CDX我还学过,以为做游戏有它足够了);马上下载了一份,mcdx已经更新到2.0 了,大致看了一下,结构还不错,上手大概就是10来分钟;于是乎就出了这么一段代码:
CDXControl 是一个可视组件,是唯一可以添加到工具栏上的,等同于Surface的管理器,负责控制显示设备的刷新、控制属性等等方面;
CDXSprite 就是一个精灵基类,它提供了Draw的方法,可以制定绘制到某个Surface,当然这样做很灵活,其实也可以再增加一个精灵管理类,统一管理绘制、移动、碰撞检测、消亡。
CDXTile 负责管理Tile,比如连续的图块,它用于切割和制定存储方式(系统内存、显存)
CDXAnimation 用于管理图块的动画顺序,被CDXSprite CDXMap用到;
CDXTimer 高分辨率计时器(我一直这样称呼的),很精确,比不负责任的Time消息好多了
CDXInput 收集键盘和鼠标的消息
为了出第一个EXE,暂时这些足够了;
这个MCDX给我的第一影响,是结构比较清晰,但还不强大,有些部分可能和我原来的设计思路有点不一致,感觉有点别扭;不过仔细想想,却是比较灵活多变,见仁见智吧,反正有源码,不顺眼马上改改得了。
首先,先做个小人在屏幕上跑动看看
添加CDXControl 到Form上,设置 UseGameLoop = true;
在CDXControl 的 InitializeObjects 事件中初始化Sprite 和相关的元素;
//建立sprite的图像元素切割器,48/57是人物每帧画面的大小,16是总帧数
//制定透明色,这里是用的紫色
//创建sprite
现在要做的就是绘制图形,在CDXControl 的 DrawFrame 事件里
更新画面,在CDXControl 的 MoveFrame 事件里
现在可以看到了运行结果;
可以看到MCDX确实简化了许多工作量,简单好用,不过还是太简单了点,嘿嘿;看来我想真正做好这个生日礼物还得再改改它了~
想试试的,建议看看MCDX带的演示;