难啊!我想在游戏中(如极品飞车3此类的全屏游戏)上写字,该怎么办呢?我总是解决不了字的闪烁问题。

CandyCat 2001-05-17 05:35:00
我是这样做的:
void CFullscreenView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
HDC hdc = CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL);
SetBkMode(hdc,TRANSPARENT );
SetTextColor(hdc,RGB(0,255,255));

TCHAR text[30];
wsprintf(text,TEXT("我来试一试"));
TextOut(hdc,210,50,text,lstrlen(text));
DeleteDC(hdc);
CView::OnTimer(nIDEvent);
}
无论我把时间设的再短,可是怎么也解决不了闪烁的问题,该怎么办呢?
...全文
317 28 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
CandyCat 2001-05-24
  • 打赏
  • 举报
回复
终于能加到300分啦。。。。。
加上!
CandyCat 2001-05-20
  • 打赏
  • 举报
回复
非常感谢大家对这个问题的关心。
我学VC没有多久,是个十足的菜鸟。:)

前几天有个朋友问我是否能在全屏幕的游戏中部打上他自己的一些信息(做演示用),我想可以借此机会做做这个方面的练习,于是就出现了上面的问题。
本以为不会很复杂,现在看来,如果想要解决这个问题,需要很多方面的基础知识啊。

我会努力的!
为表示对大家的感谢,我会将分数加到我所能加的最高分。
xhy 2001-05-19
  • 打赏
  • 举报
回复

呵呵,可以用直接写屏技术--很高深的:-》直接用彩色笔再显示器上写("我来试一试"));
保证没有问题!

老兄是不是想做游戏修改器?要不为什么要再其他游戏上写字呢?

嘿嘿,用所谓的double buffer 想在其他游戏中写屏幕是不可能的!
很多游戏也确实是用double buffer进行切换,但是你怎么知道“他”什么时候切换surface呢?
不停的画是不行的。除非,这个除非。。。。。采用

hook住每一次Flip() Or Blt操作,而且得到游戏的surface,呵呵想知道吗?
关键:
Hook DirectDraw的所以操作。
hello008 2001-05-19
  • 打赏
  • 举报
回复
先在memdc上写字,再使用bitblt copy到display的DC
铜戈 2001-05-18
  • 打赏
  • 举报
回复
不过,不用ddraw的话,双缓冲是比较慢的(具体看游戏的复杂度)
ddraw的窗口方式比较讨厌,因为你不能改桌面颜色模式(不是技术上的)
否则辉映想其他程序
而且直接写屏对颜色模式的要求很严格(除非你用它的dc方式,那样的话很慢,ddraw的优势也减小了)
建议你还是先好好看看怎样用hdc(非ddraw)下的双缓冲把,不管怎样都是基础.对以后会有帮助的
ddraw学起来很快,可是图像理论就比较复杂了
当然这个问题比较简单,根本用不到

msdn里有很多资料和例子,自己看吧
铜戈 2001-05-18
  • 打赏
  • 举报
回复
gdi行!
用双缓冲,说了多少变
为什么不翻番资料呢?
akiko 2001-05-18
  • 打赏
  • 举报
回复
用kovaschi(kovaschi) 的说法就很好,开几个backbuffer,再flip就行了,查一下有关DirectDraw的知识。
zheng_rui 2001-05-18
  • 打赏
  • 举报
回复
一般来说,在黑场的时候画上去,因为游戏一般也是这样
yukiyexue 2001-05-18
  • 打赏
  • 举报
回复
只能ddraw了,我也不知道gdi应该不行啦
dave75 2001-05-18
  • 打赏
  • 举报
回复
gz
CandyCat 2001-05-18
  • 打赏
  • 举报
回复
to fulaoxiao(米米) 
我和你担心的一样,因为游戏本身是不停地在刷屏啊。
fulaoxiao 2001-05-18
  • 打赏
  • 举报
回复
哎,我不懂CreateDC(...DISPLAY...)的具体机制,但它恐怕是直接进显存了,游戏也在不停的刷新显存,那样写屏,不闪烁都不行啊。
DDRAW的Flip()方法恐怕对你没什么帮助,因为我用DDRAW做过东西。
你必须以与游戏同步(稍滞后一点点)的方式写屏才行。
111222 2001-05-18
  • 打赏
  • 举报
回复
系啊,16BIT或者8BIT的DDraw...
CandyCat 2001-05-17
  • 打赏
  • 举报
回复
to kovaschi(kovaschi) 
分数没有问题的 :)我先加到130分。

能给我一个例子程序吗?谢谢!
CandyApple2000@263.net
kovaschi 2001-05-17
  • 打赏
  • 举报
回复
创建两个缓冲区,一个在前台显示,一个在后台,把你想显示的东西先贴到后台,然后切换前台后台。用DirectDraw实现很简单,用GDI也行。给分!
CandyCat 2001-05-17
  • 打赏
  • 举报
回复
CandyCat 2001-05-17
  • 打赏
  • 举报
回复
也就是说,现在有两种方法可以解决:双缓冲和DirectDraw了。
可我一种也没有接触过 :(
如果用双缓冲,是不是我需要建两个DC,一个是我要写的字,另一个是游戏的画面?

大家能够讲得再具体些就好了。
我把分加上。
leohart 2001-05-17
  • 打赏
  • 举报
回复
会闪是因为在写屏到一半就被写到屏幕了,你无论怎么短的时间,一般都会出现这情况
leohart 2001-05-17
  • 打赏
  • 举报
回复
可不可以用判断垂直回扫信号来解决哪,我记的在DOS下编游戏有用到,好象DX编程里也有啊,不过我是菜鸟,没自己实验过,希望有帮助!
铜戈 2001-05-17
  • 打赏
  • 举报
回复
再建一个compatibledc,将屏幕写在它上面,然后一次更新
加载更多回复(8)

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧