c嵌入式编程设计模式全屏游戏模式

全屏模式 -
技术文档(Document)
作者:newboy2& 来自:
  全屏模式是DirectDraw的最常用方式,各种用DX开发的商业游戏大都采用全屏模式。
  全屏模式下,你的(游戏)应用程序界面占据了整个屏幕空间,而且你几乎拥有了全部的控制计算机进行绘图的功能,而对应地,窗口模式只占据屏幕的一部分,二者区别的一个很重要之处就是:全屏模式下你可以设定屏幕的分辨率(屏幕的显示大小,单位:像素)和色深,上面谈到的分辨率其实就是Windows的分辨率,通过右击桌面查看其显示属性可以获取它们,如:
  320 x 240
  640 x 480
  800 x 600
  1024 x 76
  当然还不只这些,有些显卡支持60种以上的显示模式,显示模式=屏幕大小+色深的组合,色深定义了任一时刻可以(通过编程手段)显示在屏幕上的最大的色彩总数,它们遵循以下简单的规则:
  色深数越高 = 程序运行速度越慢 + 视觉效果越好;
  色深数越低 = 程序运行得越快 + 视觉效果越差;
  记住这个对你编程时为你的程序选择哪种显示方案很有用,如果你的游戏不打算使用高精度的画面就不要设置过高的色深,因为这会使游戏的运行速度打折扣,下面列出了编程时可能使用到的四种色深:
  8 bit - 256色
  16 bit - 65536色
  24 bit - 16百万色 *
  32 bit - 16.7百万色 *(*表示相对占用较多的系统资源)
  24位显示模式与32位真彩色显示模式之间的差别其实很小,做一些关于它们之间效果比较的实验,或许你可以发现这种差别。
  这是你有能力开始写代码任何实际的代码之前要明白的最后一件事情,DDraw使用一种叫&绘图页&的机制来承载图片信息,其实绘图页实际表示内存中某块特定的(图片数据)存储区,为便于理解,你可以把绘图页通俗地想象成内存中的一张白纸,向这张白纸上作贴图操作后绘图页中便有了这个图片的所有数据,这个绘图页便代表了这个图片,因此每个绘图页可以是不同的大小,绘图页可以通过加载硬盘里的某一张图片来填冲,也可以在系统后缓冲区由几张图片拼接形成,通过下面的学习,你将会对它们有一个更清的认识,但是到现在为止,你只要弄清主绘图页和后缓冲区绘图页的概念就行了,存储在主绘图页的任何内容都是屏幕当前实际显示的内容,在DX的全屏模式下,主绘图页的大小与屏幕大小等同,后缓冲区绘图页就是被设置成下一帧(或下一屏)要显示的页面内容,但是它在没有被设置成主绘图页之前,仅仅存在系统缓冲区内。
  DX中引入后缓冲区绘图页可以防止屏幕闪烁,怎么理解呢?直接向主绘页图页贴图固然行得通,但当不断地向一个主绘图页贴大量的图片时(用静图制作动画效果时),或者当主绘图页由大量的小图组合而成的情况下直接在主绘图页上作拼接操作(主绘图页可能是由各种Tiles拼接起来的地图背景),由于主绘图页的内容会即时地显示在屏幕上,这二种情况下,屏幕的显示就会出现闪烁或延迟,而后缓冲区绘图页就解决了这个问题,首先这些小图可以先在内存中组合成一张大图贴在后缓冲区绘图页里,再把这个后缓冲区绘图页设置成主绘图页(术语称把后缓冲区绘图页拷贝到主绘图页,在程序中是调用一些页面复制函数来实现的,后面会讲到),这样就不会出现闪烁问题了。
本站中所有文章以及图形均为作者本人、公司所有,本站所有资讯仅供参考,若有任何损失本站概不负责,请自行斟酌。
Copyright &
游戏开发资源网() All Rights reserved.
This site is optimized for at least
resolution (hi-color) viewing
with a browser that supports style sheets.共有 1628 人关注过本帖
标题:系统不支持全屏模式,怎么办?
等 级:论坛游民
帖 子:77
专家分:15
结帖率:70.59%
&&问题点数:0&&回复次数:9&&&
系统不支持全屏模式,怎么办?
/* request auto detection */
int gdriver = DETECT, gmode,
int stangle = 45, endangle = 135;
int radius = 100;
/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, &&);&&&&&&&&&//每次到这儿的时候,发现总是弹出一个窗口说是系统不支持全屏模式。这个应该怎么办呢?我的系统是win-7 32位机,旗舰版
/* read result of initialization */
errorcode = graphresult(); /* an error occurred */
if (errorcode != grOk)
搜索更多相关主题的帖子:
&&&&&&&&&&
等 级:贵宾
威 望:102
帖 子:3256
专家分:12605
我猜你的编译器是TC。
重剑无锋,大巧不工
等 级:小飞侠
帖 子:920
专家分:2514
回复 2楼 beyondyf
杨大哥好!
TC 编译器不支持全屏吗?没用过TC还真不知道。
冰冻三尺,非一日之寒;士别三日,不足刮目相看!
等 级:贵宾
威 望:102
帖 子:3256
专家分:12605
回复 3楼 waterstar
哦,不是TC不支持全屏(在DOS及wind95\98阶段可以很好的全屏,我的TC也只能到这里,之后系统换了,编译器也换VC了)。
我想是win7不支持TC的全屏方式。这个编译器太老了,不用也罢。
重剑无锋,大巧不工
等 级:论坛游民
帖 子:77
专家分:15
那个小飞侠不知道是谁啊,我认识你吗????
等 级:论坛游民
帖 子:77
专家分:15
那应该怎么办才能避免这种方式,同时又能实现这些函数的使用。
来 自:心灵世界
等 级:职业侠客
帖 子:172
专家分:399
你换XP&&&或者双系统&&&虚拟机
毕竟是以前的东西了!
不管怎么走、总有一个终点...
等 级:论坛游民
帖 子:77
专家分:15
等 级:小飞侠
帖 子:920
专家分:2514
回复 4楼 beyondyf
谢谢杨大哥!
冰冻三尺,非一日之寒;士别三日,不足刮目相看!
等 级:新手上路
安装dosbox,编译的程序拖到上面就可运行。
版权所有,并保留所有权利。
Powered by , Processed in 0.037111 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights ReservedThe page is temporarily unavailable
nginx error!
The page you are looking for is temporarily unavailable.
Please try again later.
Website Administrator
Something has triggered an error on your
This is the default error page for
nginx that is distributed with
It is located
/usr/share/nginx/html/50x.html
You should customize this error page for your own
site or edit the error_page directive in
the nginx configuration file
/etc/nginx/nginx.conf.typedef struct _D3DPRESENT_PARAMETERS_
BackBufferW
BackBufferH
BackBufferF
BackBufferC
D3DMULTISAMPLE_TYPE MultiSampleT
MultiSampleQ
D3DSWAPEFFECT
EnableAutoDepthS
AutoDepthStencilF
/* FullScreen_RefreshRateInHz must be zero for Windowed mode */
FullScreen_RefreshRateInHz;
PresentationI
} D3DPRESENT_PARAMETERS;
BackBufferWidth
BackBufferHeight
后备缓存区所需要的宽度和高度。
如果使用全屏模式,则必须使用显示器所支持的分辨率(使用EnumAdapterMode获取各种分辨率)
如果使用窗口模式,默认使用0。
BackBufferFormat
后备缓冲区使用的颜色模式。即颜色深度和格式。
如果使用全屏模式,可以使用设备支持的任何颜色模式。使用CheckDeviceType方法来检查。
如果使用窗口模式,则必须使用当前窗口使用的颜色模式。可以使用D3DFMT_UNKOWN,系统会自动获取该值。
BackBufferCount
后备缓冲区的数目。可以为0,1,2,3.
通常一个后备缓冲区就足够了。
MultiSampleType
多重采样类别,用于图形反锯齿。使用1X & 16X。
注意,使用高级别的多重采样类别的话,会消耗更多的图形显存。
SwapEffect
指定系统如何将后台缓冲区的内容复制到前台缓冲区,从而在屏幕上显示。它的值有:
D3DSWAPEFFECT_DISCARD:清除后台缓存的内容
D3DSWAPEEFECT_FLIP:保留后台缓存的内容。当缓存区&1时。
D3DSWAPEFFECT_COPY: 保留后台缓存的内容,缓冲区=1时。
一般情况下使用D3DSWAPEFFECT_DISCARD
hDeviceWindow
指定进行渲染的窗口。
指定窗口模式。True = 窗口模式;False = 全屏模式
EnableAutoDepthStencil
指定是否需要DirectX自动管理深度缓冲(用于关于每个像素点的深度信息)。3D场景应该开启深度测试。
AutoDepthStencilFormat
深度缓冲的格式。一般使用D3DFMT_D16,即深度值用16位二进制表示。位数越多,场景绘制得越精确,相应内存消耗更多。
D3DPRESENTFLAG_LOCKABLE_BACKBUFFER表示锁定后备缓冲区。一般情况下不使用。默认为0.
FullScreen_RefreshRateInHz
指定屏幕刷新率。
如果使用全屏模式的话,使用屏幕支持的任意频率(使用EnumAdapterModes获取)。值为0表示使用默认刷新率。
如果使用窗口模式的话,值必须为0,表示使用桌面刷新率。
FullScreen_PresentationInterval
指定后备缓冲区与前台缓冲区的交换频率。一般情况下使用D3DPRESENT_INTERVAL_DEFAULT.
D3DPRESENT_INTERVAL_DEFAULT: &窗口模式一定得用该选项!
D3DPRESENT_INTERVAL_IMMEDIATE: VSync关闭,立即更新~
D3DPRESENT_INTERVAL_ONE:等待一个垂直扫描周期才更新,有助于减少剪断和撕裂效果。
D3DPRESENT_INTERVAL_TWO ~ FOUR:分别等待相应个数周期才更新!
&创建Device代码段:
bool CApp::InitD3D()
IDirect3D9 *d3d=0;
d3d=Direct3DCreate9(D3D_SDK_VERSION);
if (d3d==NULL)
MessageBox(m_hwnd,_T("Direct3DCreate9 ERROR!"),_T("ERROR"),MB_OK);
return false;
D3DDEVTYPE d3dt=D3DDEVTYPE_HAL;
d3d-&GetDeviceCaps(D3DADAPTER_DEFAULT,d3dt,&caps);
if (caps.DevCaps& D3DDEVCAPS_HWTRANSFORMANDLIGHT)
vp=D3DCREATE_HARDWARE_VERTEXPROCESSING;
vp=D3DCREATE_SOFTWARE_VERTEXPROCESSING;
D3DPRESENT_PARAMETERS d3
d3dpp.AutoDepthStencilFormat=D3DFMT_D24S8;
d3dpp.BackBufferFormat=D3DFMT_A8R8G8B8;
d3dpp.EnableAutoDepthStencil=true;
d3dpp.Flags=0;
d3dpp.hDeviceWindow=m_
d3dpp.Windowed=m_bW
d3dpp.MultiSampleQuality=0;
d3dpp.MultiSampleType=D3DMULTISAMPLE_NONE;
if (m_bWindowed)//窗口模式
d3dpp.BackBufferCount=1;
d3dpp.BackBufferHeight=0;
//窗口模式,默认使用0
d3dpp.BackBufferWidth=0;
//窗口模式,默认使用0
d3dpp.PresentationInterval=D3DPRESENT_INTERVAL_DEFAULT;
//窗口模式一定得用 D3DPRESENT_INTERVAL_DEFAULT !
d3dpp.FullScreen_RefreshRateInHz=0;//显示器刷新率,窗口模式该值必须为0
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
//指定系统如何将后台缓冲区的内容复制到前台缓冲区 D3DSWAPEFFECT_DISCARD:清除后台缓存的内容
//全屏模式
d3dpp.BackBufferCount=2;
d3dpp.BackBufferHeight=m_//可以用 GetSystemMetrics(SM_CXSCREEN) 获得屏幕宽
d3dpp.BackBufferWidth=m_
//可以用 GetSystemMetrics(SM_CYSCREEN) 获得屏幕高
d3dpp.PresentationInterval=D3DPRESENT_INTERVAL_IMMEDIATE;
d3dpp.FullScreen_RefreshRateInHz=D3DPRESENT_RATE_DEFAULT;//显示器刷新率,窗口模式该值必须为0
d3dpp.SwapEffect=D3DSWAPEFFECT_FLIP;
//D3DSWAPEEFECT_FLIP:保留后台缓存的内容。当缓存区&1时。
HRESULT hr=0;
hr=d3d-&CreateDevice(D3DADAPTER_DEFAULT,d3dt,m_hwnd,vp,&d3dpp,&m_device);
if (FAILED(hr))
MessageBox(m_hwnd,_T("CreateDevice ERROR"),_T("ERROR"),MB_OK);
safe_release(d3d);
return false;
return true;
&另外创建窗口的style风格也不一样:
//创建窗口
if (m_bWindowed)//窗口模式
m_hwnd=CreateWindowEx(NULL,_T("DXCLASSNAME"),lpcwTitle,
(WS_OVERLAPPEDWINDOW|WS_VISIBLE)&~WS_THICKFRAME,0,0,
m_width,m_height,NULL,NULL,hinstance,NULL);
//全屏模式
m_hwnd=CreateWindowEx(NULL,_T("DXCLASSNAME"),lpcwTitle,
(WS_EX_TOPMOST|WS_VISIBLE|WS_POPUP),0,0,
m_width,m_height,NULL,NULL,hinstance,NULL);
阅读(...) 评论()后使用快捷导航没有帐号?
查看: 7687|回复: 23
服务器:YY频道
游戏ID:春晓姐姐
她还没有牵手的人
新人欢迎积分1 阅读权限99积分35535精华0UID帖子金钱266673 威望48
Lv.10, 积分 35535, 距离下一级还需 19465 积分
UID帖子威望48 多玩草8031 草
我昨天刚下的游戏,第一次进去,一进去就是全屏模式,我找到了设置界面,设置成窗口模式了,但是窗口不能缩小啊,还是满满的一屏,这和全屏没区别啊,怎么办?求助求助,我想要小窗口模式哇~
服务器:花果山
游戏ID:溪酱酱酱
她还没有牵手的人
感觉自己像个SB
新人欢迎积分1 阅读权限100积分47425精华10UID3311658帖子金钱87056 威望25
UID3311658帖子威望25 多玩草3087 草
分辨率调整以下
新人欢迎积分1 阅读权限90积分23522精华0UID帖子金钱97492 威望12
             相逢一笑泯恩仇。  
Lv.9, 积分 23522, 距离下一级还需 11478 积分
UID帖子威望12 多玩草178 草
我的安装不上 - -& && &
服务器:YY频道
游戏ID:春晓姐姐
她还没有牵手的人
新人欢迎积分1 阅读权限99积分35535精华0UID帖子金钱266673 威望48
Lv.10, 积分 35535, 距离下一级还需 19465 积分
UID帖子威望48 多玩草8031 草
溪。TINA 发表于
分辨率调整以下
小溪厉害,调一下分别率就可以啦!小窗口果然一点都不卡了!谢谢啦~
ByeBBsFriend
新人欢迎积分0 阅读权限100积分59539精华0UID帖子金钱-28645 威望13
我的孤独是一座花园。
Lv.11, 积分 59539, 距离下一级还需 30461 积分
UID帖子威望13 多玩草71 草
分辨率可以调
◆◇丶木槿昔年
新人欢迎积分1 阅读权限1积分67174精华5UID帖子金钱386772 威望60
头像被屏蔽
????、昨天的欢笑响耳边????、无声的岁月飘然去
UID帖子威望60 多玩草1441 草
游戏设置里面有啊
签名被屏蔽
◆◇丶木槿昔年
新人欢迎积分1 阅读权限1积分67174精华5UID帖子金钱386772 威望60
头像被屏蔽
????、昨天的欢笑响耳边????、无声的岁月飘然去
UID帖子威望60 多玩草1441 草
调分辨率。。。
签名被屏蔽
服务器:班德尔城
游戏ID:辛小妞
她还没有牵手的人
新人欢迎积分2 阅读权限0积分117553精华0UID帖子金钱16738 威望28
头像被屏蔽
以后要开心!
UID帖子威望28 多玩草3513 草
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
新人欢迎积分0 阅读权限90积分22218精华0UID帖子金钱1097 威望3
Lv.9, 积分 22218, 距离下一级还需 12782 积分
UID帖子威望3 多玩草518 草
辛小妞 发表于
说真的我也不知道切换。 @车里热Jessica& &。
切换什么& && &
新人欢迎积分1 阅读权限120积分171257精华1UID5258149帖子金钱60346 威望43
Lv.13, 积分 171257, 距离下一级还需 13743 积分
UID5258149帖子威望43 多玩草632 草
调整分辨率的。。
看我脸色行事
新人欢迎积分0 阅读权限100积分59476精华0UID帖子金钱113808 威望13
Lv.11, 积分 59476, 距离下一级还需 30524 积分
UID帖子威望13 多玩草721 草
春晓姐,这么快就换啦?
玩斗战神啦~
服务器:电信五区
游戏ID:那一秒de温柔
爱你一心一意
新人欢迎积分1 阅读权限100积分72729精华3UID7684615帖子金钱78043 威望34
? —不要叫我大王— ?
? —叫我女王大人— ?
Lv.11, 积分 72729, 距离下一级还需 17271 积分
UID7684615帖子威望34 多玩草1041 草
设置不能调节么
服务器:两界山/征服之海
游戏ID:咕咕、本尊/天然萌的小七酱
她还没有牵手的人
新人欢迎积分0 阅读权限90积分38538精华0UID帖子金钱305004 威望26
-置心世事外,无喜亦无忧-
UID帖子威望26 多玩草4752 草
服务器:联赛VIP区 桃芷山
游戏ID:小翟cherish
她还没有牵手的人
向日葵般温暖
新人欢迎积分1 阅读权限100积分85513精华0UID帖子金钱19338 威望30
健康、快乐。 永远永远。
Lv.11, 积分 85513, 距离下一级还需 4487 积分
UID帖子威望30 多玩草403 草
‖团子不给吃‖
新人欢迎积分1 阅读权限105积分91945精华1UID帖子金钱201879 威望34
水军第五军军团副指挥官
Lv.12, 积分 91945, 距离下一级还需 43055 积分
UID帖子威望34 多玩草5533 草
分辨率不对吧
元宝专属二阶勋章。已绝版
贴图新苗勋章
贴图新苗勋章
斗战神功勋勋章
斗战神版块功勋勋章
贴图萌勋章
贴图萌勋章
QQ仙灵功勋勋章
QQ仙灵功勋勋章
万圣节勋章
万圣节勋章
初级在线标兵
论坛在线时间达1000小时即可申请
爱情守望者
爱情守望者
马年新春勋章
手机APP马年迎春,马上有钱!
多玩2013年度庆典
快来参与2013年度活动吧!
美图特工队
美图特工队
助人为乐奖
助人为乐奖
中级人缘勋章
中级人缘勋章
元宝专属一阶勋章。已绝版
话题王小红花
话题王小红花
劳动节勋章
劳动节勋章
多玩写手勋章
多玩写手勋章
活动奖励勋章
活动奖励勋章
初级人缘勋章
初级人缘勋章
节日守望者
节日守望者
春天纪念勋章
夏天纪念勋章
冬天纪念勋章
动漫喵耳勋章
动漫喵耳勋章
龙之谷活跃勋章
在龙之谷版面活跃而奖励的勋章
漂浮者勋章
漂浮者勋章
圣诞活动勋章
圣诞活动勋章
处女座勋章
处女座勋章
天涯明月刀功勋勋章
这就是武侠
游戏名人勋章
游戏名人勋章
幽暗女王之心
幽暗女王之心
永恒功勋勋章
永恒功勋勋章
炉石传说版面勋章
剑灵少先队
你拿到了剑灵国服的第一滴血!
英雄联盟功勋勋章
英雄联盟功勋勋章
秋天纪念勋章
疾风之刃MM勋章
疾风之刃MM自爆活动专属
端午节勋章
端午节勋章
人缘大师勋章
人缘大师勋章
原创先锋勋章
原创先锋勋章
DOTA2功勋勋章
DOTA2杰出会员专属
天蝎座勋章
天蝎座勋章
手机论坛勋章
APP发帖双倍积分,登陆即送勋章!
甜蜜情侣勋章
甜蜜情侣勋章
诛仙小碧瑶
诛仙MM专属勋章
九阴功勋勋章
九阴功勋勋章
新人进步奖
新人进步奖
阳光热情勋章
阳光热情勋章
中等灌水标兵勋章
中等灌水标兵勋章
2012论坛年度勋章
参与2012年度活动发放
仙剑五勋章
仙剑五勋章
解答员勋章
解答员勋章
基地雷神勋章
基地雷神勋章
相恋情侣勋章
相恋情侣勋章
需要金钱:1100
Powered by
手机盒子客户端点击或扫描下载

我要回帖

更多关于 游戏编程模式 的文章

 

随机推荐