每5秒增加一次NSnumber - Cocos2d

时间:2014-06-03 20:18:59

标签: ios cocos2d-iphone nsnumber

我试图在Cocos2d中每5秒将NSNumber递增1,但由于某种原因它不起作用(可能是明显的错误)。我正在使用更新方法,但我认为这可能是错误的地方。目前它只增加+1一次。我需要它每5秒钟不停地执行此操作:

-(void) update: (CCTime) delta
{
    // Save a string:
    NSNumber *anInt = [NSNumber numberWithInt:500];

    NSNumber *bNumber = [NSNumber numberWithInt:[anInt intValue] + 1];

    NSLog(@"Update Number%@",bNumber);   

}

2 个答案:

答案 0 :(得分:1)

每5秒运行一次的简单方法是:

创建一个存储您的号码和计时器的属性:

@property (nonatomic, assign) int bNumber;
@property (nonatomic, strong) NSTimer* timer;

然后将数字初始化为500(我假设根据您的示例,您希望它从500开始)并创建计时器:

- (instanceType)init
{
    self = [super init];

    if (self)
    {
        self.bNumber = 500;

        self.timer = [NSTimer scheduledTimerWithTimeInterval:5.0f
                                              target:self
                                            selector:@selector(incrementScore:)
                                            userInfo:nil
                                             repeats:YES];
    }
}

然后创建一个执行增量的方法:

- (void)incrementScore:(NSTimer *)timer
{
    self.bNumber++;
    NSLog(@"Number = %d", self.bNumber);
}

完成后不要忘记使计时器无效:

- (void)dealloc
{
    // If not using arc don't forget super dealloc
    [super dealloc];

    [self.timer invalidate];
    self.timer = nil;
}

这是一种方式。如果要在cocos2d中使用更新方法,则需要跟踪累积的增量。一旦该值达到或超过5秒内的总毫秒数,则将数字加1。 Delta是自上次更新以来经过的毫秒数。例如,属性将是:

@property (nonatomic, assign) int bNumber;
@property (nonatomic, assign) CCTime totalDelta;

然后在更新中,您将执行以下操作(一秒钟内有1000毫秒):

- (void)update:(CCTime)delta
{
    const CCTime FiveSeconds = 5000.0f;
    self.totalDelta += delta;

    if (self.totalDelta >= FiveSeconds)
    {
        self.totalDelta = 0;
        self.bNumber++;

        NSLog(@"Number = %d", self.bNumber);
    }
}

我希望这有帮助。你要做的事情非常简单,所以我建议在开始制作游戏之前先搞清楚Obj-C编程。

答案 1 :(得分:0)

我认为方法[self schedule:@selector(methodName) interval:intervalValue];是您的选择。

代码示例:

```

static CGFloat playTime = 0.0;
@implementation GameScene {

}

-(void)onEnter
{
    CCLOG(@"on enter");
    [self schedule:@selector(runTimer) interval:5.0];
    [super onEnter];
}

-(void) runTimer {
    playTime += 1;
}

```