游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1401|回复: 2

急!关于DirectDraw的一个问题!!!

[复制链接]

8

主题

10

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2006-5-9 18:22:00 | 显示全部楼层 |阅读模式
各大哥大姐看了此贴后一定要回!!!!!!
创建一个普通页面的方法是不是:先创建一个有大小的页面时,先创建一个主页面再对其大小进行描述???

创建一个背景页面其中一段程序是:
if(DD_OK!=DDS[SPrimary] ->GetAttachedSurface(&&ddsd.ddsCaps,&DDS[SBuffer]))
return FALSE;
主页面,背景页面,离屏页面的创建的关键的一段代码能不能详细的写一写!并说明一下它们三者间的创方式的区别!
上面代码中的DDS[SPrimary]是不是一个数组如果是那么SPrimary能是一个整数变量????
数组名DDS能不能被别的数组名所代替??

6

主题

16

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2006-5-9 23:16:00 | 显示全部楼层

Re: 急!关于DirectDraw的一个问题!!!

我也初学游戏编程,说说我的理解
LPDIRECTDRAW7 lpdd;  //主接口
LPDIRECTDRAWSUFACE7 lpddsprimary;  //主表面
LPDIRECTDRAWSUFACE7 lpddsback;   //副表面
LPDIRECTDRAWSUFACE7 lpddsoff;   //离屏表面

//创建主接口
DirectDrawCreateEx(NULL,(void**)&lpdd,IID_IDirectDraw7,NULL);
//设置协作等级和显示模式,略
//取得住表面
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
ddsd.dwBackBufferCount = 1;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX | DDSCAPS_FLIP;
lpdd->CreateSurface(&ddsd,&lpddsprimary,NULL);
//取得副表面
ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;
lpddsprimary->GetAttachedSurface(&ddsd.ddsCaps,&lpddsback);

主副表面的关系:相信你已经知道怎么在住表面上画图,但是我们不希望玩家看到我们表面上先出来一个飞船,再出来一个人物,再出来一个敌人吧。所以我们先把所有需要绘制的东西都渲染在副表面上,然后用lpddsprimary->Filp()来切换主副表面,使所有内容一下子出现在屏幕上。

然后是离屏表面
ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS | DDSD_CKSRCBLT;
ddsd.dwWidth = width;
ddsd.dwHeight = height;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | mem_flag;(mem_flag决定离屏表面在显存中还是主存中)
lpdd->CreateSurface(&ddsd,&lpddsoff,NULL);
离屏表面的作用,我的理解是为了速度。与从内存中一个字节一个字节地将数据复制到住表面或者副表面上,directdraw的blt方法更快,可以充分利用硬件加速。所以我们通常讲精灵动作的每一帧做一个离屏表面,然后需要时将某一帧的离屏表面blt到副表面上,然后flip()。

请高手指导。

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2006-5-10 08:37:00 | 显示全部楼层

Re:急!关于DirectDraw的一个问题!!!

对于DDS[SPrimary]这些问题,可以发现你C++学得还不够好.你还是在学C++过程中自我解决这类问题吧.你最后2句的猜测基本是正确的.

创建表面,DDRAW教程里都有.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 11:34

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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