社区
图形处理/算法
帖子详情
游戏制作过程中,如何解决闪屏问题???
lizhigang34
2008-03-13 11:13:28
我想做个简单的游戏,游戏中的人物都是加载位图,在更新游戏画面时,我用的办法是重绘屏幕..
先把位图加载到内存,然后用BitBlt函数,把内存中的位图覆盖显示器上的位图..
但每次都会出现闪屏..
另外,有没有什么办法,让画图过程都在内存中,比如,现有一张前景和背景图片,用什么办法在内存中,让这两张图片重叠,再一次性的显示到屏幕,我想这样应该就不会出现闪屏了..请高手指教,谢谢!!
...全文
235
12
打赏
收藏
游戏制作过程中,如何解决闪屏问题???
我想做个简单的游戏,游戏中的人物都是加载位图,在更新游戏画面时,我用的办法是重绘屏幕.. 先把位图加载到内存,然后用BitBlt函数,把内存中的位图覆盖显示器上的位图.. 但每次都会出现闪屏.. 另外,有没有什么办法,让画图过程都在内存中,比如,现有一张前景和背景图片,用什么办法在内存中,让这两张图片重叠,再一次性的显示到屏幕,我想这样应该就不会出现闪屏了..请高手指教,谢谢!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
scq2099yt
2008-03-16
打赏
举报
回复
双缓存
lizhigang34
2008-03-14
打赏
举报
回复
这是我在OnDraw(CDC *pDC)中写的代码
CDC MemDC;
//首先定义个显示设备对象
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);
//将内存中的位图拷贝到屏幕上进行显示
结果只显示了那张精灵位图,没有实现双缓存...我知道双缓存的原理,但具体该怎么实现啊..能说清楚点吗??
guanghong
2008-03-14
打赏
举报
回复
CDC memDC1,memDC2;
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);
你的情况应该是背景被覆盖掉了,略写了一段,你试试吧,背景图片要比前面的大才行啊!
「已注销」
2008-03-14
打赏
举报
回复
使用双缓冲是个问题. 但LZ注意WM_ERASEBKGND消息的处理:默认的情况下WM_ERASEBKGND的处理是用白色刷新背景----这自然会造成屏幕的闪烁.设置WM_ERASEBKGND返回0(切记为0),及可解决问题
lizhigang34
2008-03-13
打赏
举报
回复
这是我在OnDraw(CDC *pDC)中写的代码
CDC MemDC;
//首先定义个显示设备对象
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);
//将内存中的位图拷贝到屏幕上进行显示
结果只显示了那张精灵位图,没有实现双缓存...我知道双缓存的原理,但具体该怎么实现啊..能说清楚点吗??
lizhigang34
2008-03-13
打赏
举报
回复
这是我在OnDraw(CDC *pDC)中写的代码
CDC MemDC;
//首先定义个显示设备对象
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);
//将内存中的位图拷贝到屏幕上进行显示
结果只显示了那张精灵位图,没有实现双缓存...我知道双缓存的原理,但具体该怎么实现啊..能说清楚点吗??
lizhigang34
2008-03-13
打赏
举报
回复
这是我在OnDraw(CDC *pDC)中写的代码
CDC MemDC;
//首先定义个显示设备对象
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);
//将内存中的位图拷贝到屏幕上进行显示
结果只显示了那张精灵位图,没有实现双缓存...我知道双缓存的原理,但具体该怎么实现啊..能说清楚点吗??
lizhigang34
2008-03-13
打赏
举报
回复
这是我在OnDraw(CDC *pDC)中写的代码
CDC MemDC;
//首先定义个显示设备对象
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);
//将内存中的位图拷贝到屏幕上进行显示
结果只显示了那张精灵位图,没有实现双缓存...我知道双缓存的原理,但具体该怎么实现啊..能说清楚点吗??
lizhigang34
2008-03-13
打赏
举报
回复
这是我在OnDraw(CDC *pDC)中写的代码
CDC MemDC;
//首先定义个显示设备对象
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);
//将内存中的位图拷贝到屏幕上进行显示
结果只显示了那张精灵位图,没有实现双缓存...我知道双缓存的原理,但具体该怎么实现啊..能说清楚点吗??
lizhigang34
2008-03-13
打赏
举报
回复
这是我在OnDraw(CDC *pDC)中写的代码
CDC MemDC;
//首先定义个显示设备对象
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);
//将内存中的位图拷贝到屏幕上进行显示
结果只显示了那张精灵位图,没有实现双缓存...我知道双缓存的原理,但具体该怎么实现啊..能说清楚点吗??
lizhigang34
2008-03-13
打赏
举报
回复
这是我在OnDraw(CDC *pDC)中写的代码
CDC MemDC;
//首先定义个显示设备对象
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);
//将内存中的位图拷贝到屏幕上进行显示
结果只显示了那张精灵位图,没有实现双缓存...我知道双缓存的原理,但具体该怎么实现啊..能说清楚点吗??
guanghong
2008-03-13
打赏
举报
回复
思路你不都知道了么,就是双缓存
新建一个memdc,先在memdc上画好了
在pDC->bitblt(0,0,width,height,&memdc,0,0,SRCCOPY);
显示出来就行了
J2ME吞食鱼小
游戏
一款完整的手机
游戏
代码 实现LOGO,MENU,效果,特效,
解决
了
闪屏
问题
, 采用双缓冲技术。
赛车手机
游戏
实训报告借鉴.pdf
赛车手机
游戏
实训报告借鉴.pdf
shuanghuanchong
利用双缓冲区,
解决
GDI绘图
闪屏
问题
的关键技术。
开题报告.doc
开题报告.doc
双缓冲绘图技术做的移动小车
之前在网上下过一个移动小车的代码,不过运行后发现会
闪屏
,我用双缓冲绘图改进了一下,不会出现
闪屏
情况
图形处理/算法
19,469
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章