我试图在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);
}
答案 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;
}
```