我正在做一个反应游戏,在那里你可以摧毁敌人并获得积分。现在我想要快速销毁它们,如果有一个特定的时间间隔,组合乘数应该再次归零。
我想多点这样的观点:2 * 2 = 4 * 2 = 8 * 2 = 16 * 2 ...... (如果你摧毁一个敌人,你得到2分)。
我在这里添加点数:
if (CGRectIntersectsRect(enemy.frame, player.frame)) {
points = points + 1;
[enemy removeFromParent];
}
我总是可以将当前点乘以2,但是如果有特定的时间而没有得分,我想重置组合乘数。
我希望有人可以帮助我。 (请在目标c中填写代码)
答案 0 :(得分:1)
似乎没有比记录最后一个敌人被摧毁的时间更复杂,然后在update:
方法决定组合是否已经过去,因为在任何超时时间内没有更多的敌人被击中你允许。
我不熟悉Sprite工具包,但update
似乎传递当前时间;优秀。您需要记录以下内容:
timeout
(时间):当前超时。这将随着游戏的进行而减少,使其变得更难。lastEnemyKillTime
(时间):最后一个敌人被杀的时间。comboPoints
(整数):每次点击用户获得的点数。随着组合的扩展,这将会增加。points
(整数):当前得分。所以,像这样:
@interface MyClass ()
{
NSTimeInterval _timeout;
NSTimeInterval _lastEnemyKillTime;
BOOL _comboFactor;
NSUInteger _points;
}
@end
我猜Sprite Kit使用init:
方法;用它来初始化变量:
- (id)init
{
self = [super init];
if (self != nil) {
_timeout = 1.0;
_lastEnemyKillTime = 0.0;
_points = 0;
_comboPoints = 1;
}
}
update:
方法类似于:
- (void)update:(NSTimeInterval)currentTime
{
BOOL withinTimeout = currentTime - _lastEnemyKillTime <= _timeout;
if (CGRectIntersectsRect(enemy.frame, player.frame)) {
_inCombo = withinTimeout;
if (_inCombo)
_comboPoints *= 2;
_points += _comboPoint;
_lastEnemyKillTime = currentTime;
[enemy removeFromParent];
} else if (_comboPoints > 1 && !withinTimeout) {
_lastEnemyKillTime = 0.0;
_comboPoints = 1;
}
}
答案 1 :(得分:0)
你需要跟踪最后一个敌人的休闲时间戳和因素。处理下一个kill时,检查时间戳,如果它低于阈值,则提高因子。当前kill的时间取代了时间戳。
如果你还没有更好的地方(服务或某事),你可以创建一个FightRecorder
课程作为单身人士。
NSDate *newKillTime = new NSDate;
FightRecorder recorder = [FightRecorder instance];
if([newKillTime timeIntervalSinceDate:recorder.lastKillTime] < SCORE_BOUNDS_IN_SEC) {
recorder.factor++; // could also be a method
points = points + [recorder calculateScore]; // do your score math here
}
else {
[recorder reset]; // set the inner state of the fight recorder to no-bonus
}
recorder.lastKillTime = newKillTime; // record the date for the next kill