没有CACurrentMediaTime()的cocos2d拍摄间隔

时间:2013-04-18 06:19:10

标签: cocos2d-iphone

我有一艘船,我想让它每1秒射一次。所以这就是我做的,

@property (nonatomic, assign) float lastDamageTime;

并在更新方法中

if (CACurrentMediaTime - self.lastDamageTime > 1)
{
    self.lastDamageTime = CACurrentMediaTime;
    [self shoot];
}

但问题是,比如我在船射击子弹后暂停游戏,然后1秒后,我恢复游戏,if语句通过检查,船将立即射击另一颗子弹。这不是我想要的。

那么,我能做些什么来确保每一天发射的子弹都会让我暂停比赛?我应该使用CCTimer吗?

提前感谢您的回答。

2 个答案:

答案 0 :(得分:0)

您可以尝试将拍摄安排为CCRepeatForever动作,以便cocos2d为您处理暂停。它看起来像这样(假设你在自定义ShipSprite内).-

CCDelayTime *delay = [CCDelayTime actionWithDuration:1.0];
CCCallFunc *funcShoot = [CCCallFunc actionWithTarget:self selector:@selector(shoot)];
CCRepeatForever *repeat = [CCRepeatForever actionWithAction:[CCSequence actionOne:delay two:funcShoot]];
[self runAction:repeat];

答案 1 :(得分:0)

而不是CCRepeatForever你可以试试这样的东西

[self schedule:@selector(shoot) interval:1];

在暂停代码中取消预定拍摄

[self unschedule:@selector(shoot)];

在您的代码中,它会检测到敌人的电话

[self unschedule:@selector(shoot)];
[self performSelector:@selector(shoot)];
[self schedule:@selector(shoot) interval:1];

它会立即拍摄,但它只会拍摄一次,然后以1秒的间隔重新开始等等......所以如果你需要改变它,你可以调整时间