通过一系列的设计。最初的想法终于初见小成。还可以进行调试了。为了方便以后调用自己的模块,这里写一下博客总结一下吧。
首先,语言是C++。人物有6个,但是其中一个在打酱油。也就是一共是5个人一起开发。还有一个不会C++所以只好作为游戏设计师。涉及关卡和模式。
1.为了实现可复用性和接口无关性。所以我只好使用继承类。
obj和obj_state是两个最大的基类。第一个是各种有位置的物体。第二个是为了实现有限自动状态机。
有限状态自动机是一个可以把不同的状态产生不同的输出的概念。引入状态和状态的转移来获得低耦合的效果。其中有一篇文章介绍的非常好,告诉了我如何编写(一开始只是想到,但是觉得实现起来很复杂,其实是我想歪了。同时还知道了,内存碎片好像没啥影响)地址http://www.gameres.com/thread_479479_1_1.html,一定要好好看实现的过程。通过各种继承就可以实现不同的转换,真是太神奇了。
2.使用了底层了图像绘图。GDI。所以温习了一下图像和windows知识。发现忘了不少。ACM退役了,做点自己喜欢的事。
主要是实现了绘图的函数。但是获得了很多东西。
1.知道了GetDC需要手动释放。除非作为全局。
2.指导了各种Create都需要释放。否则内存爆炸。
3.知道了如何使用双缓冲绘图。因为Create***DC()获得的是一个1*1单色的DC,所以需要改变他的格式。就需要新select一个画布。所以需要用屏幕DC(scrDC)来Create一个合适的HBitmap对象,然后使用SelectObject选进去。这样就可以用来绘图了。
4.以后尽量不要使用各种位图来实现图像的拷贝,还有不要使用Bitblt来绘制图片。作为背景或者是实现双缓冲最后一步还是可以的。但是绘制图片最好的还是使用GDIplus中的函数和库。注意设置:
使用#include<afx.h> 并且工程属性添加使用共享的MFC库,就可以调用MFC函数。但是必须要把window.h搞掉。因为会重定义。其实有了afx.h就包含了window,h所以放到stdafx中就可以了。
#include "GdiPlus.h"
using namespace Gdiplus;
#pragma comment(lib,"gdiplus.lib")
#pragma comment(lib, "Msimg32.lib")
using namespace std;
这样设置一下。同时
绘图记得初始化
ULONG_PTR m_gdiplusToken; ///初始化gdiplus库,定义作为全局变量
GdiplusStartupInput gdiplusStartupInput;//在最开始的地方使用这个一般是InitInstance()中
GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);//在最开始的地方使用这个一般是InitInstance()中
绘图只要使用
Image image(PATH) ;
Graphics g(HDC) ;
g.DrawImage() ; 就可以了。可以实现任何格式。BMP , PNG, JPG ,GIF 等