1

在我正在制作的游戏中,我需要制作一个基于时间的评分系统。

如果您在游戏的第一秒获得比赛。那场比赛比我在游戏的最后一秒得到一场比赛更有价值。

所以换句话说,你越快完成关卡,你得到的分数就越多。有谁知道如何实现这一目标?我知道每个级别的总时间。

游戏是实时的,因此需要在游戏早期显示高分,随着时间的推移分数会降低。

谢谢。

4

2 回答 2

2

定义每个级别的最长时间,然后做一些数学技巧:

score = Math.max(0, levelMaxTime - timeSpent) * levelScore;

例子:

timeSpent = 12; // The player completed the level in 12 seconds
levelMaxTime = 20; // The player has to completed the level within 30 seconds
levelScore = 50; // The player will be awarded of 50 points per remaining second

// Compute the final score
score = Math.max(0, levelMaxTime - timeSpent) * levelScore; // 400 points
于 2012-10-23T08:08:49.297 回答
2

为此,您可以使用Timer 类。因此,您应该以类似于以下内容结尾:

private var delay:uint = 1000;
private var repeat:uint = 3;
private var timer:Timer = new Timer(delay, repeat);

为滴答声添加侦听器...

timer.addEventListener(TimerEvent.TIMER, timerHandler);
timer.addEventListener(TimerEvent.TIMER_COMPLETE, completeHandler);

// Reduce bonus with time by a percentage
private function timerHandler(e:TimerEvent):void { scoreBonus *= 0.9;  }

// Set bonus to 0
private function completeHandler(e:TimerEvent):void { scoreBonus = 0; }

现在设置分数奖金并在您希望开始奖金的地方启动计时器。

scoreBonus = 10;

timer.start();

所以在任何时候,你只需要将奖金加到总分上。

于 2012-10-23T08:25:02.227 回答