如何在基于Cocos2dx的离线游戏中防止时间作弊?

最近,我正在开发一个基于Cocos2dx-lua的手机离线游戏。

我在Google Play上发现了一个叫做GameGuardian的应用,它可以设置时间速度。这个应用可能会修改libc.so中的gettimeofday()方法。我尝试过很多API,比如os.time()SystemClock.elapsedRealtime(),但都失败了。

请问有人能给我一个避免这个应用影响游戏的方法吗?

点赞
用户5675002
用户5675002

唯一可靠的方法是让你的应用程序联系游戏服务器来确保时间。很多安卓游戏都这样做。例如,《猫和老鼠战争》。

比如,你可以在应用程序启动时检查时间有效性,如果没有连接可用,你可以允许资源生成一段允许的时间。例如,从上一次确认时间开始不超过1小时。

另一个想法是检查当前 fps。硬件无法加速,因此当启用 VSync 时,帧将在大致相同的时间内呈现。如果你发现单个帧的呈现时间比它应有的时间要长很多,而且如果这种情况发生在很多帧上,那么可能会表明作弊的可能性。但这不是稳定的解决方案,因为你必须确保在弱设备上fps正常,而且它并不能告诉你游戏没有运行时花费的时间。

极端情况可能包括完全擦除应用程序的状态,如果你发现自上次保存的未确认时间以来时间倒退了超过~1小时(以防用户调整了 DST 等)。

但一般来说,你无法完全保护离线游戏免受时间篡改的影响。

2016-12-06 11:16:51