游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3535|回复: 8

关于DrectDraw页面的一个问题。

[复制链接]

9

主题

50

帖子

70

积分

注册会员

Rank: 2

积分
70
发表于 2004-6-6 12:14:00 | 显示全部楼层 |阅读模式
请问各位大虾:

我建立了几个个页面,一个主页面pPSur,一个后备缓冲页面pBBuf,
还有两个离屏页面。pOPla1, pOPla2各放了一张位图。

然后我用BltFast把pOPla1贴到主页面pPSur,然后把pOPla2贴到
后备缓冲页面pBBuf,现在主页面和后备页面各有一张位图。

以后我隔一段时间调用pPSur->Flip(NULL, DDFLIP_WAIT);让屏幕上
交替显示这两张位图,

可是程序运行时却只能显示一张位图(原来贴到后备页面的),
难道另一张位图丢失了吗?

谢谢大虾指教!!

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20527
发表于 2004-6-6 12:34:00 | 显示全部楼层

Re:关于DrectDraw页面的一个问题。

你最好这样,每次都更新pBBuf,然后再把pBBuf Flip到pPSur。

9

主题

50

帖子

70

积分

注册会员

Rank: 2

积分
70
 楼主| 发表于 2004-6-6 15:41:00 | 显示全部楼层

Re:关于DrectDraw页面的一个问题。

每次都更新是不是太麻烦了呢,

有没有一劳永逸的方法呢。

呵呵。谢谢站长!

5

主题

37

帖子

37

积分

注册会员

Rank: 2

积分
37
发表于 2004-6-6 23:27:00 | 显示全部楼层

Re:关于DrectDraw页面的一个问题。

大概是这样
DDRAW里最好不要把离频表面的象素直接写到primery
这样很容易出错
一般的做发是pOPla1贴到pBBuf,pOPla2再贴到pOPla1,再由pOPla1贴到pBBuf
然后Filp,这样行成一个缓冲链。总之最好不要直接向主表面写象素。

36

主题

382

帖子

498

积分

中级会员

Rank: 3Rank: 3

积分
498
发表于 2004-6-7 06:29:00 | 显示全部楼层

Re:关于DrectDraw页面的一个问题。

他问得挺有趣,
交换之后,前面的页面丢了么?

我想问问,写主页面缓存后,是不是正常显示呢?
即显示你的主页面图像??

9

主题

50

帖子

70

积分

注册会员

Rank: 2

积分
70
 楼主| 发表于 2004-6-7 08:20:00 | 显示全部楼层

Re:关于DrectDraw页面的一个问题。

事实上,这个是《VC游戏设计》的一个程序。

可以看代码,按书上的本来意思是让两个图片“back1.bmp”和“back2.bmp”
在屏幕上交替显示。

//建立窗口,导入图片。directdraw系列对象在OnCreate中建立好了。
gameFrame::gameFrame()
{
        Create(NULL, "BeyondDream", WS_POPUP);
        hdc = ::CreateCompatibleDC(NULL);
        bmp1 = (HBITMAP):oadImage(NULL, "back1.bmp", IMAGE_BITMAP,
                                         640, 480, LR_LOADFROMFILE);
        bmp2 = (HBITMAP)::LoadImage(NULL, "back2.bmp", IMAGE_BITMAP,
                                         640, 480, LR_LOADFROMFILE);
        ::SelectObject(hdc, bmp1);
        LoadBmp();
        pPSur->BltFast(0, 0, pOPla, CRect(0, 0, 640, 480), DDBLTFAST_WAIT);
        Sleep(500); //延迟一段时间以看到直接在主页面上贴的图片。
       
        ::SelectObject(hdc, bmp2);
        LoadBmp();
        pBBuf->BltFast(0, 0, pOPla, CRect(0, 0, 640, 480), DDBLTFAST_WAIT);

       
}
在第一次,果然看到了一次位图交替显示。而且刚才直接贴到主页面的图象也正常显示。

//以后,每隔一段时间,就看到位图交替显示。
void gameFrame::OnTimer(UINT nIDEvent)
{
        pPSur->Flip(NULL, DDFLIP_WAIT);
       
        CFrameWnd::OnTimer(nIDEvent);
}
可是,运行结果是:一张图片和一个空白背景交替显示,难道还有一个页面丢失了吗?

9

主题

50

帖子

70

积分

注册会员

Rank: 2

积分
70
 楼主| 发表于 2004-6-7 08:24:00 | 显示全部楼层

Re: Re:关于DrectDraw页面的一个问题。

conan_0267: Re:关于DrectDraw页面的一个问题。
一般的做发是pOPla1贴到pBBuf,pOPla2再贴到pOPla1,再由pOPla1贴到pBBuf
然后Filp,这样行成一个缓冲链。总之最好不要直接向主表面写象素。


为什么不直接把pOPla2贴到pBBuf上呢,还用pOPla1做中转,那pOPla1不是被覆盖了吗?

9

主题

50

帖子

70

积分

注册会员

Rank: 2

积分
70
 楼主| 发表于 2004-6-7 08:34:00 | 显示全部楼层

Re:关于DrectDraw页面的一个问题。

DirectDraw的页面不就是两个页面交替的在屏幕上显示吗?

       pPSur->[   主页面  ]        pBBuf->[ 缓冲页面  ]      
到屏幕显示 <-[              ]                    [                ]

Flip 后

     pBBuf->[   刚才的主页面  ]        pPSur->[ 刚才的缓冲页面  ]      
                 [                       ] 到屏幕显示<-[                         ]


只是pPSur和pBBuf两个指针在每次Flip后指向了不同页面而已,
可以这样理解吗?

那页面丢失的情况是因何而起呢?

谢谢各位大虾指教, 我会不段努力学习的!

9

主题

37

帖子

59

积分

注册会员

Rank: 2

积分
59
发表于 2004-6-7 12:08:00 | 显示全部楼层

Re:关于DrectDraw页面的一个问题。

不成熟的想法,我想应该没有丢失,如果真的丢失了,那在你FLIP的过程中应该会产生闪烁或部份图像变化的效果,不知道你有没有出现这种问题?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-1 16:34

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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