用C语言写了一个贪吃蛇,求怎么利用双缓冲技术解决闪屏问题?
一是有闪屏问题,在网上找了说用双缓冲技术,看得我是一脸懵B。还有个奇葩问题就是,有时候蛇去食物的时候会黑一小会的屏。(我怀疑用了双缓冲就应该没这些问题了)。求好心人给我指...
一是有闪屏问题,在网上找了说用双缓冲技术,看得我是一脸懵B。还有个奇葩问题就是,有时候蛇去食物的时候会黑一小会的屏。(我怀疑用了双缓冲就应该没这些问题了)。求好心人给我指点一下
展开
2个回答
展开全部
人家说的双缓冲技术不是用于你这样的“黑窗口程序”的……
我没在黑窗口下做过游戏,所以不清楚你是怎么“将这些东西显示到屏幕上”的。但是我推测缓冲技术对于你的这个程序的问题没有效果。
3D游戏编程中的双缓冲技术指的是根据3D场景中摄像机的位置和角度,来生成一张“摄像机看到的图像”(也就是要显示到屏幕上的图像)时,生成的过程会有大量的计算,如果直接将“摄像机看到的图像”生成到屏幕上,那就会让观察者直接看着图像生成的过程,如果生成的速度很快那没问题,但显然得考虑到3D场景复杂、生成这张图像偏慢的情况,如果生成速度偏慢,那屏幕上就会看着图像从左到右或者从上到下一个个像素绘制出来的过程,这样的体验肯定很不好。所以我们先将图像“生成到一个缓冲区”,等图像生成完毕了,再将缓冲区里的完整的图像直接呈现到屏幕上,这样就可以避免“直接生成到屏幕上”导致的问题,而如果我们使用了两个缓冲区(将下一张图像和下下张图像分别“生成”到这两个缓冲区,然后顺序呈现到屏幕上),那就叫“双缓冲”,类似的有单缓冲和三缓冲。
如果不太理解“3D场景”,“摄像机”,“摄像机看到的画面”,请想象一下我们的世界就是一个“3D场景”,我们的眼睛就是“摄像机”,我们的眼睛看到的(投射到视网膜上的)就是“摄像机看到的画面”,我们就是玩家。
在类似CS这样的第一人称游戏中,我们的“摄像机”可以移动,去“观察”CS的“3D场景”。
在类似英雄联盟这样的“第三人称”游戏中,我们的“摄像机”是半固定的,我们只能以“上帝视角”去观察英雄联盟的“3D场景”
我没在黑窗口下做过游戏,所以不清楚你是怎么“将这些东西显示到屏幕上”的。但是我推测缓冲技术对于你的这个程序的问题没有效果。
3D游戏编程中的双缓冲技术指的是根据3D场景中摄像机的位置和角度,来生成一张“摄像机看到的图像”(也就是要显示到屏幕上的图像)时,生成的过程会有大量的计算,如果直接将“摄像机看到的图像”生成到屏幕上,那就会让观察者直接看着图像生成的过程,如果生成的速度很快那没问题,但显然得考虑到3D场景复杂、生成这张图像偏慢的情况,如果生成速度偏慢,那屏幕上就会看着图像从左到右或者从上到下一个个像素绘制出来的过程,这样的体验肯定很不好。所以我们先将图像“生成到一个缓冲区”,等图像生成完毕了,再将缓冲区里的完整的图像直接呈现到屏幕上,这样就可以避免“直接生成到屏幕上”导致的问题,而如果我们使用了两个缓冲区(将下一张图像和下下张图像分别“生成”到这两个缓冲区,然后顺序呈现到屏幕上),那就叫“双缓冲”,类似的有单缓冲和三缓冲。
如果不太理解“3D场景”,“摄像机”,“摄像机看到的画面”,请想象一下我们的世界就是一个“3D场景”,我们的眼睛就是“摄像机”,我们的眼睛看到的(投射到视网膜上的)就是“摄像机看到的画面”,我们就是玩家。
在类似CS这样的第一人称游戏中,我们的“摄像机”可以移动,去“观察”CS的“3D场景”。
在类似英雄联盟这样的“第三人称”游戏中,我们的“摄像机”是半固定的,我们只能以“上帝视角”去观察英雄联盟的“3D场景”
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询