在我正在制作的游戏中,我需要制作一个基于时间的评分系统。
如果您在游戏的第一秒获得比赛。那场比赛比我在游戏的最后一秒得到一场比赛更有价值。
所以换句话说,你越快完成关卡,你得到的分数就越多。有谁知道如何实现这一目标?我知道每个级别的总时间。
游戏是实时的,因此需要在游戏早期显示高分,随着时间的推移分数会降低。
谢谢。
在我正在制作的游戏中,我需要制作一个基于时间的评分系统。
如果您在游戏的第一秒获得比赛。那场比赛比我在游戏的最后一秒得到一场比赛更有价值。
所以换句话说,你越快完成关卡,你得到的分数就越多。有谁知道如何实现这一目标?我知道每个级别的总时间。
游戏是实时的,因此需要在游戏早期显示高分,随着时间的推移分数会降低。
谢谢。
定义每个级别的最长时间,然后做一些数学技巧:
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
为此,您可以使用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();
所以在任何时候,你只需要将奖金加到总分上。