游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3066|回复: 6

Ali+Tab以后...

[复制链接]

53

主题

241

帖子

252

积分

中级会员

Rank: 3Rank: 3

积分
252
发表于 2005-6-2 04:36:00 | 显示全部楼层 |阅读模式
游戏中全屏模式时切换回桌面,然后再回到游戏,这时只看见黑乎乎一片,估计是D3DDevice.Present方法失效了,有什么办法可以解决? [em24]

53

主题

241

帖子

252

积分

中级会员

Rank: 3Rank: 3

积分
252
 楼主| 发表于 2005-6-2 04:53:00 | 显示全部楼层

Re:Ali+Tab以后...

附加一问:在使用全屏模式时,一般都会对窗口切换做些处理,我的做法是在游戏循环中加入顶窗口检测代码,当发现游戏窗口并不是顶窗口时,作出应变,但是在实践中发现此办法并不可靠,例如在按下(一瞬间)Ali+Tab后,明明检测到游戏窗口已经不是顶窗口,但此时游戏窗口还是独占屏幕。。。而且每次循环都要检测一次,太浪费资源了。。。
请教各位高人是如何处理窗口切换的?

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2005-6-2 10:13:00 | 显示全部楼层

Re:Ali+Tab以后...

适时 执行Lost reset
微软例子中有的!
真正的全屏模式,
alt_tab一般都是不处理的呀!会自动切回桌面分辨率!

53

主题

241

帖子

252

积分

中级会员

Rank: 3Rank: 3

积分
252
 楼主| 发表于 2005-6-2 17:39:00 | 显示全部楼层

Re: Re:Ali+Tab以后...

lights: Re:Ali+Tab以后...

alt_tab一般都是不处理的呀!会自动切回桌面分辨率!


这个自动切回桌面分辨率是没错,可总得处理些什么吧?至少,得告诉D3DDevice不要Present啊

微软那里怎么找不到VB+DX8的例子了???能提供个非微软的下载吗?

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2005-6-3 11:50:00 | 显示全部楼层

Re:Ali+Tab以后...

你是自己写循环么?只要在窗口状态改变事件发生时处理就可以了!

0

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2005-6-12 09:11:00 | 显示全部楼层

Re:Ali+Tab以后...

如果不行的话,用窗口信息HOOK吧.

7

主题

87

帖子

109

积分

注册会员

Rank: 2

积分
109
QQ
发表于 2005-6-12 21:11:00 | 显示全部楼层

Re:Ali+Tab以后...

        游戏场景和桌面切换后,首先要重建Direct3DDevice,然后重建各种场景资源(材质,顶点缓存等).
        对于重建Direct3DDevice,最简单的方法是在主渲染循环的开头(第一行)加上"On Error Resume Next",然后紧跟着加入如下两句( 其中假设d3dd为已创建的Direct3DDevice,d3dpp是已创建的D3DPresent_Parameters):
   "If d3dd.TestCooperativeLevel = D3DErr_DeviceLost Then Exit Function"
   "If d3dd.TestCooperativeLevel = D3DErr_DeviceNotReset Then d3dd.reset d3dpp"
两句的顺序可以随意.
        对于重建各种场景资源,可专门做一个名字类似"RestorScene"这样的函数,紧跟在上两句的后面进行调用.
        写完上面的内容后再写具体的渲染内容.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-25 23:06

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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