做第一个可复用游戏的心得(1) 周二 - 周6

通过一系列的设计。最初的想法终于初见小成。还可以进行调试了。为了方便以后调用自己的模块,这里写一下博客总结一下吧。

首先,语言是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 等

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值