让我们说我正在开发一款游戏并且存在重生这样的东西。用户可在15分钟后重生。有什么常见的做法可以避免作弊时间吗?我的意思是,没有什么能阻止用户改变系统时间并将其设置为未来。我知道,部分这可以通过使用服务器端解决,但没有任何东西可以阻止用户完全禁用网络。 PS。游戏是跨平台的,因此解决方案对于antroid和iOS都很有趣。 PS2。我知道有几款游戏都有解决方案。
答案 0 :(得分:1)
对于类似这样的事情,您可以简单地将自己的计时器与系统时间完全分开。如果您在玩家死亡时开始倒计时15分钟,他们将无法修改您的内部计时器。我不熟悉iOS开发(NSTimer看起来像是一种可能),但我知道在Android中它很容易:
// create 30 second internal countdown timer
new CountDownTimer(30000, 3000) {
public void onTick(long millisUntilFinished) {
// store time remaining in database every 3 seconds in case user exits the game
dbHelper.updateDeathTimer(millisUntilFinished);
}
public void onFinish() {
// player respawns now
}
}.start();
为了解决玩家关闭游戏的问题,我建议你也设置一个内部计时器来缓存它的游戏。数据库中的当前状态是定期的,例如每30秒左右,如果你要坚持使用15分钟的计时器。
下面是一些伪造的代码,当玩家在游戏中死亡并且我们的重生计时器仍在进行中时它可能会是什么样子。
// When game resumes check database and begin updated death timer if necessary
onGameResume() {
if(dbHelper.isUserDead()) {
// resume respawn timer
new CountDownTimer(dbHelper.getRespawnTime(), 15000) {
public void onTick(long millisUntilFinished) {
// store time remaining in database every 15 seconds in case user exits the game
dbHelper.updateDeathTimer(millisUntilFinished);
}
public void onFinish() {
// player respawns now
}
}.start();
}
}
答案 1 :(得分:0)
您可以存储事件的时间(在您的情况下生成),然后针对它运行timeIntervalSinceReferenceDate并查看它是否超出您的限制(15分钟)。
iOS方面的风险是应用程序进入后台并且计时器停止。
答案 2 :(得分:-1)
它实际上不是答案,而只是一个想法。 如果我们使用tickCount怎么办?每个操作系统都有此属性。 例如,Android和中的android.os.SystemClock.elapsedRealtime() iOS中的[NSProcessInfo processInfo].systemUptime 他们应该提供所需的价值。