我想做个简单的游戏,游戏中的人物都是加载位图,在更新游戏画面时,我用的办法是重绘屏幕..
先把位图加载到内存,然后用BitBlt函数,把内存中的位图覆盖显示器上的位图..
但每次都会出现闪屏..另外,有没有什么办法,让画图过程都在内存中,比如,现有一张前景和背景图片,用什么办法在内存中,让这两张图片重叠,再一次性的显示到屏幕,我想这样应该就不会出现闪屏了..请高手指教,谢谢!!
先把位图加载到内存,然后用BitBlt函数,把内存中的位图覆盖显示器上的位图..
但每次都会出现闪屏..另外,有没有什么办法,让画图过程都在内存中,比如,现有一张前景和背景图片,用什么办法在内存中,让这两张图片重叠,再一次性的显示到屏幕,我想这样应该就不会出现闪屏了..请高手指教,谢谢!!
解决方案 »
- office2007样式程序不能修改窗口大小
- 菜鸟问题,关于类型转换,请指点……
- ***www.codetools.com怎么进不去了?谁知道***
- 一天写30行代码都写不到,我是不是很差?
- 求救:怎样用VC作一个广告发布的课题阿?谢谢!!是否要用到http协议阿?
- 请问高手:在VC中用来开关机和重启WINDOWS的函数是哪几个?
- 刚学VC,用ADO连接数据库,就遇到问题。。。
- 利用ADO做数据库连接,如何给DBGrid绑定数据源?
- vc中add-in下如何实现在VC工作区打开一个已有的工程文件并编译
- 参数传递的问题!
- CString 怎么识别中文?
- VC6读取Orcale中Blob出错?通过OO40连接
新建一个memdc,先在memdc上画好了在pDC->bitblt(0,0,width,height,&memdc,0,0,SRCCOPY);
显示出来就行了
CBitmap MemBitmap; //定义个位图对象
MemDC.CreateCompatibleDC(pDC); //建立与屏幕显示设备兼容的内存显示设备MemBitmap.CreateCompatibleBitmap(pDC,1024,800); //建立与屏幕显示兼容的位图
CBitmap *pOldBitmap=MemDC.SelectObject(&MemBitmap); //将位图选入内存显示设备
CBitmap BitmapBackground,BitmapSprite; //定义两个位图,背景位图和精灵位图
BitmapBackground.LoadBitmap(IDB_BACKGROUND); //加载背景位图
BitmapSprite.LoadBitmap(IDB_SPRITE); //加载精灵位图
MemDC.SelectObject(&BitmapBackground); //将背景位图选入内存显示设备
MemDC.SelectObject(&BitmapSprite); //将精灵位图选入内存显示设备
pDC->BitBlt(0,0,1024,800,&MemDC,0,0,SRCCOPY); //将内存中的位图拷贝到屏幕上进行显示结果只显示了那张精灵位图,没有实现双缓存...我知道双缓存的原理,但具体该怎么实现啊..能说清楚点吗??
CBitmap MemBitmap; //定义个位图对象
MemDC.CreateCompatibleDC(pDC); //建立与屏幕显示设备兼容的内存显示设备MemBitmap.CreateCompatibleBitmap(pDC,1024,800); //建立与屏幕显示兼容的位图
CBitmap *pOldBitmap=MemDC.SelectObject(&MemBitmap); //将位图选入内存显示设备
CBitmap BitmapBackground,BitmapSprite; //定义两个位图,背景位图和精灵位图
BitmapBackground.LoadBitmap(IDB_BACKGROUND); //加载背景位图
BitmapSprite.LoadBitmap(IDB_SPRITE); //加载精灵位图
MemDC.SelectObject(&BitmapBackground); //将背景位图选入内存显示设备
MemDC.SelectObject(&BitmapSprite); //将精灵位图选入内存显示设备
pDC->BitBlt(0,0,1024,800,&MemDC,0,0,SRCCOPY); //将内存中的位图拷贝到屏幕上进行显示结果只显示了那张精灵位图,没有实现双缓存...我知道双缓存的原理,但具体该怎么实现啊..能说清楚点吗??
CBitmap MemBitmap; //定义个位图对象
MemDC.CreateCompatibleDC(pDC); //建立与屏幕显示设备兼容的内存显示设备MemBitmap.CreateCompatibleBitmap(pDC,1024,800); //建立与屏幕显示兼容的位图
CBitmap *pOldBitmap=MemDC.SelectObject(&MemBitmap); //将位图选入内存显示设备
CBitmap BitmapBackground,BitmapSprite; //定义两个位图,背景位图和精灵位图
BitmapBackground.LoadBitmap(IDB_BACKGROUND); //加载背景位图
BitmapSprite.LoadBitmap(IDB_SPRITE); //加载精灵位图
MemDC.SelectObject(&BitmapBackground); //将背景位图选入内存显示设备
MemDC.SelectObject(&BitmapSprite); //将精灵位图选入内存显示设备
pDC->BitBlt(0,0,1024,800,&MemDC,0,0,SRCCOPY); //将内存中的位图拷贝到屏幕上进行显示结果只显示了那张精灵位图,没有实现双缓存...我知道双缓存的原理,但具体该怎么实现啊..能说清楚点吗??
CBitmap MemBitmap; //定义个位图对象
MemDC.CreateCompatibleDC(pDC); //建立与屏幕显示设备兼容的内存显示设备MemBitmap.CreateCompatibleBitmap(pDC,1024,800); //建立与屏幕显示兼容的位图
CBitmap *pOldBitmap=MemDC.SelectObject(&MemBitmap); //将位图选入内存显示设备
CBitmap BitmapBackground,BitmapSprite; //定义两个位图,背景位图和精灵位图
BitmapBackground.LoadBitmap(IDB_BACKGROUND); //加载背景位图
BitmapSprite.LoadBitmap(IDB_SPRITE); //加载精灵位图
MemDC.SelectObject(&BitmapBackground); //将背景位图选入内存显示设备
MemDC.SelectObject(&BitmapSprite); //将精灵位图选入内存显示设备
pDC->BitBlt(0,0,1024,800,&MemDC,0,0,SRCCOPY); //将内存中的位图拷贝到屏幕上进行显示结果只显示了那张精灵位图,没有实现双缓存...我知道双缓存的原理,但具体该怎么实现啊..能说清楚点吗??
CBitmap MemBitmap; //定义个位图对象
MemDC.CreateCompatibleDC(pDC); //建立与屏幕显示设备兼容的内存显示设备MemBitmap.CreateCompatibleBitmap(pDC,1024,800); //建立与屏幕显示兼容的位图
CBitmap *pOldBitmap=MemDC.SelectObject(&MemBitmap); //将位图选入内存显示设备
CBitmap BitmapBackground,BitmapSprite; //定义两个位图,背景位图和精灵位图
BitmapBackground.LoadBitmap(IDB_BACKGROUND); //加载背景位图
BitmapSprite.LoadBitmap(IDB_SPRITE); //加载精灵位图
MemDC.SelectObject(&BitmapBackground); //将背景位图选入内存显示设备
MemDC.SelectObject(&BitmapSprite); //将精灵位图选入内存显示设备
pDC->BitBlt(0,0,1024,800,&MemDC,0,0,SRCCOPY); //将内存中的位图拷贝到屏幕上进行显示结果只显示了那张精灵位图,没有实现双缓存...我知道双缓存的原理,但具体该怎么实现啊..能说清楚点吗??
CBitmap MemBitmap; //定义个位图对象
MemDC.CreateCompatibleDC(pDC); //建立与屏幕显示设备兼容的内存显示设备MemBitmap.CreateCompatibleBitmap(pDC,1024,800); //建立与屏幕显示兼容的位图
CBitmap *pOldBitmap=MemDC.SelectObject(&MemBitmap); //将位图选入内存显示设备
CBitmap BitmapBackground,BitmapSprite; //定义两个位图,背景位图和精灵位图
BitmapBackground.LoadBitmap(IDB_BACKGROUND); //加载背景位图
BitmapSprite.LoadBitmap(IDB_SPRITE); //加载精灵位图
MemDC.SelectObject(&BitmapBackground); //将背景位图选入内存显示设备
MemDC.SelectObject(&BitmapSprite); //将精灵位图选入内存显示设备
pDC->BitBlt(0,0,1024,800,&MemDC,0,0,SRCCOPY); //将内存中的位图拷贝到屏幕上进行显示结果只显示了那张精灵位图,没有实现双缓存...我知道双缓存的原理,但具体该怎么实现啊..能说清楚点吗??
CBitmap MemBitmap; //定义个位图对象
MemDC.CreateCompatibleDC(pDC); //建立与屏幕显示设备兼容的内存显示设备MemBitmap.CreateCompatibleBitmap(pDC,1024,800); //建立与屏幕显示兼容的位图
CBitmap *pOldBitmap=MemDC.SelectObject(&MemBitmap); //将位图选入内存显示设备
CBitmap BitmapBackground,BitmapSprite; //定义两个位图,背景位图和精灵位图
BitmapBackground.LoadBitmap(IDB_BACKGROUND); //加载背景位图
BitmapSprite.LoadBitmap(IDB_SPRITE); //加载精灵位图
MemDC.SelectObject(&BitmapBackground); //将背景位图选入内存显示设备
MemDC.SelectObject(&BitmapSprite); //将精灵位图选入内存显示设备
pDC->BitBlt(0,0,1024,800,&MemDC,0,0,SRCCOPY); //将内存中的位图拷贝到屏幕上进行显示结果只显示了那张精灵位图,没有实现双缓存...我知道双缓存的原理,但具体该怎么实现啊..能说清楚点吗??
CBitmap MemBitmap; //定义个位图对象
MemDC.CreateCompatibleDC(pDC); //建立与屏幕显示设备兼容的内存显示设备MemBitmap.CreateCompatibleBitmap(pDC,1024,800); //建立与屏幕显示兼容的位图
CBitmap *pOldBitmap=MemDC.SelectObject(&MemBitmap); //将位图选入内存显示设备
CBitmap BitmapBackground,BitmapSprite; //定义两个位图,背景位图和精灵位图
BitmapBackground.LoadBitmap(IDB_BACKGROUND); //加载背景位图
BitmapSprite.LoadBitmap(IDB_SPRITE); //加载精灵位图
MemDC.SelectObject(&BitmapBackground); //将背景位图选入内存显示设备
MemDC.SelectObject(&BitmapSprite); //将精灵位图选入内存显示设备
pDC->BitBlt(0,0,1024,800,&MemDC,0,0,SRCCOPY); //将内存中的位图拷贝到屏幕上进行显示结果只显示了那张精灵位图,没有实现双缓存...我知道双缓存的原理,但具体该怎么实现啊..能说清楚点吗??
memDC1.CreateCompatibleDC(pDC);
memDC2.CreateCompatibleDC(pDC);
CBitmap bitmap1,bitmap2,*oldmap;
CBitmap memBitmap;
memBitmap.CreateCompatibleBitmap(pDC,600,800);
memDC1.SelectObject(&memBitmap);
memDC1.FillSolidRect(0,0,600,800,RGB(255,255,255));
bitmap1.LoadBitmap(IDB_BITMAP1);
memDC2.SelectObject(&bitmap1);
memDC1.BitBlt(0,0,600,800,&memDC2,0,0,SRCCOPY);
bitmap2.LoadBitmap(IDB_BITMAP2);
memDC2.SelectObject(&bitmap2);
memDC1.BitBlt(0,0,600,800,&memDC2,0,0,SRCCOPY);
pDC->BitBlt(0,0,600,800,&memDC1,0,0,SRCCOPY);
你的情况应该是背景被覆盖掉了,略写了一段,你试试吧,背景图片要比前面的大才行啊!