跳转至

创建经验 HUD

想象你想要一个显示当前等级、每小时经验以及角色升级前需要玩多长时间的 HUD。首先,你可以用 Cheat Engine 找到包含等级和经验的变量。当你知道这些值时,你可以用游戏特定的算法或硬编码的经验表计算达到下一级所需的经验。

当你知道升级需要多少经验时,你可以计算每小时经验。用伪代码表示,这个过程可能看起来像这样:

// 这个示例假设时间以毫秒存储
// 对于秒,移除 "1000 * "
timeUnitsPerHour = 1000 * 60 * 60
timePassed = (currentTime - startTime)
 timePassedToHourRatio = timeUnitsPerHour / 
timePassed
hourlyExp = expGained * timePassedToHourRatio
 remainingExp = nextExp - currentExp
 hoursToGo = remainingExp / hourlyExp

要找到你的每小时经验 hourlyExp,你需要存储 HUD 首次启动时的经验和时间;分别是 startExp 和 startTime。这个示例还假设 currentLevel 和 currentExp 已经定义,其中 currentLevel 是角色等级,currentExp 是当前经验值。

有了这些值,hourlyExp 可以通过把一小时时间单位与已过时间的比率①乘以自 startTime 以来获得的经验②来计算。本例中时间单位是毫秒,所以时间单位要乘以 1,000。

接下来,从 nextExp 中减去 currentExp,确定升级所需的剩余经验③。要计算升级还剩多少小时,用你的剩余经验除以每小时经验④。

当你拥有所有这些信息时,终于可以在屏幕上显示它。使用本书示例代码提供的 Direct3D 钩子引擎,你可以在 EndScene() 钩子回调内部用这个调用绘制文本:

hook->drawText(
    10, 10,
    D3DCOLOR_ARGB(255, 255, 0, 0),
    "Will reach level %d in %0.20f hours (%d exp 
per hour)",
    currentLevel, hoursToGo, hourlyExp);

这就是一个可用的经验跟踪 HUD 所需的全部。这些方程的变体可以用来计算 KPH、DPS、GPH 和其他有用的基于时间的度量。此外,你可以用 Direct3D 钩子的 drawText() 函数显示你能定位和规范化的任何信息。钩子还包含 addSpriteImage() 和 drawSpriteImage() 函数,你可以用来绘制自己的自定义图像,让你的 HUD 随心所欲地花哨。