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