游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5919|回复: 22

请教如何使用重绘Surface?

[复制链接]

8

主题

45

帖子

109

积分

注册会员

Rank: 2

积分
109
发表于 2007-1-16 14:59:00 | 显示全部楼层 |阅读模式
vb.net+DDraw
程序在最小话或者切换其他程序时会出错,应该是先捕捉到上述动作,然后保存,接着释放,当本程序再被激活时恢复,但是查找半天也没这样的函数,请赐教

45

主题

222

帖子

229

积分

中级会员

Rank: 3Rank: 3

积分
229
发表于 2007-1-17 15:29:00 | 显示全部楼层

Re:请教如何使用重绘Surface?

这里好像已经没有使用.net+dx9的人了。
应该有reset方法吧。dx8里都有。
你去看看dx9 sdk中带的例子。肯定有这方面的解决方法。

8

主题

45

帖子

109

积分

注册会员

Rank: 2

积分
109
 楼主| 发表于 2007-1-17 19:58:00 | 显示全部楼层

Re:请教如何使用重绘Surface?

难道都是用c++了.....
谢谢楼上提醒

9

主题

688

帖子

688

积分

高级会员

Rank: 4

积分
688
发表于 2007-1-17 21:54:00 | 显示全部楼层

Re:请教如何使用重绘Surface?

先release,然后重建所有表面,重新加载位图?

8

主题

45

帖子

109

积分

注册会员

Rank: 2

积分
109
 楼主| 发表于 2007-1-17 23:06:00 | 显示全部楼层

Re:请教如何使用重绘Surface?

是release设备吗?surface好象没那个函数.那么如何捕捉最小化或者切换程序的动作呢?

9

主题

688

帖子

688

积分

高级会员

Rank: 4

积分
688
发表于 2007-1-17 23:21:00 | 显示全部楼层

Re:请教如何使用重绘Surface?

在窗口函数里处理WM_ACTIVATE消息。
在MSDN里查WM_ACTIVATE.

12

主题

525

帖子

525

积分

高级会员

Rank: 4

积分
525
发表于 2007-1-18 01:00:00 | 显示全部楼层

Re:请教如何使用重绘Surface?

.NET??
站着看

9

主题

688

帖子

688

积分

高级会员

Rank: 4

积分
688
发表于 2007-1-18 03:11:00 | 显示全部楼层

Re:请教如何使用重绘Surface?

4.4         页面的丢失与恢复
        当一个DirectDraw程序被最小化时,它就丧失了对页面的控制权,如果我们的程序不知道,继续改变页面时就会发生"DDERR_SURFACELOST"错误。而当我们重新回到DirectDraw程序时Windows不会帮我们把页面恢复,如果我们不自己恢复页面用户就会看到黑屏。为了避免出现这种情况,我们可以写一个恢复页面的函数:
        void RestoreSurface( )
        {
                lpDD->RestoreAllSurfaces( ); //恢复所有页面
                ReloadBitmap( );//自己的调图函数,重新画上页面内容
        }

        值得注意的是Windows也不会帮我们恢复页面的实际内容,我们要象上面的程序那样,再调用自己的调图函数才行。应该什么时候调用RestoreSurface( )呢?是不是每一条改变页面的语句都要测试一下有没有发生DDERR_SURFACELOST错误呢?其实并不需要。一般游戏的引擎都是频繁刷新式,每秒钟要刷新几十次,每一次刷新必然要调用上面提到的Flip( )。所以我们可以写一个FlipSurface( )然后以后调用它来换页:
        void FlipSurface( )
        {
                HRESULT ddrval;
                ddrval=lpDDSPrimary->Flip(NULL,DDFLIP_WAIT);
                if (ddrval==DDERR_SURFACELOST)
                        RestoreSurface( );
        }

以上来自于彭博的<游戏编程指南>,希望有所帮助。

9

主题

688

帖子

688

积分

高级会员

Rank: 4

积分
688
发表于 2007-1-18 03:22:00 | 显示全部楼层

Re:请教如何使用重绘Surface?

看来不必跟踪WM_ACTIVATE消息。

8

主题

45

帖子

109

积分

注册会员

Rank: 2

积分
109
 楼主| 发表于 2007-1-18 09:34:00 | 显示全部楼层

Re:请教如何使用重绘Surface?

谢谢,那篇文章我有.我能写初始化函数,说白了就是我不知道需要重绘时把他放在哪里
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 06:57

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表