社区
游戏开发
帖子详情
使用双缓冲区,背景是静态图片,是否很次都要重绘背景?
yndfcd
2003-08-21 09:26:31
我现在做一个小游戏,背景是一个静态的图片,大部分时间只需要绘制局部。
我的做法是每帧先将背景画上去,将后将每个精灵画上去。最后调用Flip来显示,有点速度有点慢,请问有什么方法可以只更新局部?用Clipper可以吗?怎么做?
请高手指点。
...全文
75
17
打赏
收藏
使用双缓冲区,背景是静态图片,是否很次都要重绘背景?
我现在做一个小游戏,背景是一个静态的图片,大部分时间只需要绘制局部。 我的做法是每帧先将背景画上去,将后将每个精灵画上去。最后调用Flip来显示,有点速度有点慢,请问有什么方法可以只更新局部?用Clipper可以吗?怎么做? 请高手指点。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yndfcd
2003-08-28
打赏
举报
回复
多谢各位,我还是自己去试吧。
yndfcd
2003-08-28
打赏
举报
回复
多谢各位,我还是自己去试吧。
yndfcd
2003-08-27
打赏
举报
回复
请问这种方法在初始化的时候是不是要把背景同时画在主表面和后台表面上?
DarthVader
2003-08-26
打赏
举报
回复
楼上正解啊
以前编DOS下游戏的时候 就这么做过
因为没用扩展内存 :(
kofightas
2003-08-26
打赏
举报
回复
就是说更新的时候只blt画面更改的那一部分就行了。这就叫局部刷新。
原来画的东西只要你不去清屏或往上画东西经过flip()是不会变的。没什么问题。
至于算法也不麻烦,只要记录当上一祯的精灵所在的rect,然后对这个rect blt背景页面。再画新的精灵就行
寻开心
2003-08-26
打赏
举报
回复
双缓冲的原理确实是让显示地址一直在变,但是它只是在你所定义的两个缓冲之间来回变化。
一次flip就是把当前的屏幕图像对应的显示内存地址编程了后台,把后台的显示内存地址变化到了当前的屏幕图像的地址。这个交换是显示卡内部进行的。
这种交换可以把当前屏幕图像带到后台的,它只是显示内存指针的交换而不是图像的copy所以速度非常的快。
cywater2000
2003-08-26
打赏
举报
回复
是吗?
我没有试过。
不过我好像记得双缓冲和普通图面是不一样的,它们的显存地址一直在变啊!
不过即使可以,我还是觉得太麻烦了。
还不如在需要的时候保存一帧。
寻开心
2003-08-26
打赏
举报
回复
双缓冲也一样啊。
它是不断在屏幕和后台之间翻转内容,上一帧的内容通过FLIP也会翻转到当前操作的后台上。
只要为每帧记录一个帧号,用来区别是不是前两次就可以了。
cywater2000
2003-08-26
打赏
举报
回复
我说呀,人家用的是双缓冲!!!是要Flip的!!!
怎么只更新部分嘛!!!!
To:楼主:
速度慢肯定是你的内部算法有问题,Copy一张位图到图面上没存在影响速度吧
难道你每次都是从硬盘上读?
你应该把背景读到内存里,用的时候再写到图面上
如果你觉得还是太慢,干脆给"背景"单独建一个“图面”不就行了!
这样Blt不就快了?
不过我觉得还是你其他算法有问题
寻开心
2003-08-25
打赏
举报
回复
可以的。
你需要自己记录精灵的包围盒大小以及上次的位置
在绘制的时候,屏幕上保留的是上一帧的图像,先只更新上次精灵所占据的背景部分的图像,这样就可以把背景还原成为没有任何精灵的状态,然后再重新绘制精灵的新的位置。
当然要看你的精灵的数量,已经在屏幕上的占据空间大小,精灵数量多或者占据空间大的时候这么做就不值得了。
hotness28
2003-08-25
打赏
举报
回复
跟踪精灵位置,局部重话,用Restore();
hesonglin111
2003-08-24
打赏
举报
回复
曾经尝试过,在游戏初始化的时候在primarysurface上画上图片,在游戏主过程中,只画精灵图片,结果没有任何效果。但是在参考了双缓冲程序后,把背景只画一次改成每次更新背景,就可以显示了。我没有对这个技术的确切了解,只是在编程中的感受罢了!
bopengbopeng
2003-08-22
打赏
举报
回复
其实没必要。现在的显卡都很好。
DarthVader
2003-08-21
打赏
举报
回复
用脏矩形
具体方法看这里:
http://www.gameres.com/Articles/Visual/2D/2DSend.htm
——2D游戏图像数据传输的优化技巧
hesonglin111
2003-08-21
打赏
举报
回复
背景是要重画的,至于局部更新好像是不行,应为如果只画一桢,是看不到背景的,所以要时时更新背景,局部更新好像是用在精灵图片的,可以用blt实现。
azheng0305
2003-08-21
打赏
举报
回复
如果你是用GDI做,可以的,呵呵。如果你用directx做的话,问题很大,应该不行,必须一帧一帧的重画。
yndfcd
2003-08-21
打赏
举报
回复
那个说得太粗了,能不能说得具体一点?
C#编程经验技巧宝典
14 <br>0028 “///”符号的
使用
技巧 14 <br>0029
使用
注释取消程序语句的执行 15 <br>2.2 语句 15 <br>0030 跳转语句GOTO的
使用
15 <br>0031 Continue语句的
使用
16 <br>0032 Break...
C#全能速查宝典
《C#全能速查宝典》共分为8章,分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#...,每一个知识点都配有具体的示例...
MFC
双缓冲
+提升绘图效率方法(号称三缓冲):自定义
静态
背景
不频繁擦除(★firecat推荐★)
应用场景是:绘制一个运动小球,在大屏幕...1、MFC克服C++窗体
重绘
时的闪烁问题,用到的技巧是
双缓冲
。
双缓冲
原理网上的文章好多,这里不赘述。 //---------------------------------MFC
双缓冲
//--------------...
VC 绘图,
使用
双缓冲
技术实现
VC 绘图,
使用
双缓冲
技术实现 2009-12-06 21:32:24| 分类: VC++ | 标签: |字号大中小 订阅 *******************************************************************例子**************************...
VC
双缓冲
绘图
*******************************************************************例子**************************************************... ********************所有的GDI绘图函数
使用
的都是逻辑坐标(逻辑范围)************
游戏开发
8,304
社区成员
23,682
社区内容
发帖
与我相关
我的任务
游戏开发
游戏开发相关内容讨论专区
复制链接
扫一扫
分享
社区描述
游戏开发相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章