【发布时间】:2013-10-14 08:16:00
【问题描述】:
我一直致力于修复旧游戏的项目,并最终获得了新的想法,添加了一些关于游戏世界的酷炫额外信息,并实时跟踪游戏本身对用户隐藏的一些重要信息(没有实际原因)并遇到了这个问题:
当我尝试在游戏上绘制以显示我想要的信息时,游戏会更新自己的窗口并进行绘制。
我的第一种方法是使用带有 HWND_TOPMOST 的窗口位于游戏窗口的顶部,但它没有按预期工作,窗口只是不会越过游戏窗口并且不会显示信息。
第二种方法是使用 GDI 函数,例如 TextOut,文本在那里,但会闪烁很多,并且强制它在很短的时间内绘制会占用太多内存。
我想要一些关于如何在不实际挂钩 DX 功能或类似的东西的情况下做到这一点的想法(因为我对 DX 知之甚少)。有什么方法可以在这个窗口上实际绘制以显示信息而不闪烁?
【问题讨论】:
-
要在窗口游戏上绘制而不闪烁,建议您在临时位图上绘制文本,然后在窗口游戏上绘制此位图。
-
您希望我们就如何破解我们一无所知的实现细节的程序提供建议?
-
我想后缓冲不是这里的问题,因为我只调用了一个 TextOut 并且仍然闪烁。大卫,我很抱歉,但这不是关于实际破解游戏,我猜更多的是关于在 directdraw 窗口上绘图,但如果需要,我可以提供一些关于游戏本身的信息,如果你相信它会有所帮助。
-
嗯,这在某种意义上肯定是黑客行为。无论如何,如果我们不知道游戏实际在做什么,就很难知道该建议什么。
-
Rising lands, 1997。游戏只能全屏运行,因为它很旧,我想在 win 7 上运行它会有很多问题(从内存管理到绘图,一切都不同)。可以在游戏绘制场景后绕道而行,但是我在 ASM 中编写游戏修复程序,并且使用 asm 完成所有这些工作会很痛苦......另一部分是 delphi,实际上写钩子和东西很糟糕像那样。我以前这样做过,但在较新的游戏中,HWND_TOPMOST 应该将我的窗口放在游戏上,但在这种情况下它不会。
标签: delphi assembly directx gdi