最近在做一款基于Cocos2dx-lua的手机离线游戏。
我在 Google Play 上找到了一个名为 GameGuardian 的应用程序,它可以设置时间速度。该应用程序可能会修改gettimeofday()
. libc.so
我尝试了许多 API,例如os.time()
, SystemClock.elapsedRealtime()
,但都失败了。
有人可以给我一种避免应用程序影响的方法吗?
最近在做一款基于Cocos2dx-lua的手机离线游戏。
我在 Google Play 上找到了一个名为 GameGuardian 的应用程序,它可以设置时间速度。该应用程序可能会修改gettimeofday()
. libc.so
我尝试了许多 API,例如os.time()
, SystemClock.elapsedRealtime()
,但都失败了。
有人可以给我一种避免应用程序影响的方法吗?
唯一确定的方法是让您的应用程序联系您的游戏服务器以确保时间。许多安卓游戏都是这样做的。《战猫》就是一个例子。
比如说,您可以在应用程序启动后立即检查时间有效性,如果没有可用的连接,您可以允许在允许的时间内生成资源。例如,自上次确认时间以来不超过 1 小时。
其他想法可能是检查当前的 fps。硬件无法加速,因此启用 VSync 时帧将大致在同一时间渲染。如果您发现渲染单帧花费的时间明显多于应有的时间,并且如果它发生在许多帧上,则可能表明存在作弊的可能性。但这不是稳定的解决方案,因为您必须确保您的 fps 通常不会在弱设备上下降,并且它不会告诉您有关游戏未运行时花费的时间的任何信息。
如果您发现自上次保存未经确认的时间超过约 1 小时(以防用户调整 DST 等),则极端情况可能包括完全擦除应用程序的状态。
但通常你不能保护完全离线的游戏免受时间操纵。