在iOS中以特定间隔调用操作

时间:2013-06-22 11:05:13

标签: ios nstimer cocos3d

我正在尝试在 Cocos3d 中调用包含 ccactioninterval 的函数。我想在特定的时间间隔调用该函数。当我尝试 NSTimer 时,我发现它有时会工作,有时也不会。

      NSTimer makeTarget=[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(createTargets) userInfo:nil repeats:YES];

这里createTargets是包含动作事件的函数。当我运行该功能时,直接工作正常一次。当我尝试安排它时出现问题。我尝试过针对相关问题已经解释的不同方法。但没有什么对我有用。 。 。

这是代码

-(void) addTargets {      
    NSTimer *makeTarget = [NSTimer scheduledTimerWithTimeInterval:2.0
              target:self selector:@selector(createTargets) userInfo:nil repeats:YES]; 
}

-(void)createTargets {
    CC3MeshNode *target = (CC3MeshNode*)[self getNodeNamed: @"obj1"];    
    int minVal=-5;
    int maxVal=5;    
    float avgVal; 
    avgVal = maxVal- minVal;      
    float Value = ((float)arc4random()/ARC4RANDOM_MAX)*avgVal+minVal ;          
    [target setLocation:cc3v(Value, 5.0, 0.0)];    
    CCActionInterval *moveTarget = [CC3MoveBy actionWithDuration:7.0 moveBy:cc3v(0.0, -10.0, 0.0)];     
    CCActionInterval *removeTarget = [CCCallFuncN actionWithTarget:self selector:@selector(removeTarget:)];       
    [target runAction:[CCSequence actionOne:moveTarget two:removeTarget]];   
}

-(void)removeTarget:(CC3MeshNode*)targ {  
    [self removeChild:targ];  
    targ=nil; 
}

1 个答案:

答案 0 :(得分:5)

如果没有太多的代码,很难说出你的问题,但如果有任何明显的话,这里有一些事情可以道歉。


您是否持有对计时器的引用?

这可能对调试很有用。如果您有一个名为makeTargetTimer的属性,那么您可以这样做:

NSTimer * makeTargetTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(createTargets) userInfo:nil repeats:YES];
self.makeTargetTimer = makeTargetTimer // Save to a property for later use (or just use an iVar)

停止重新发生计时器的唯一方法是invalidate它。因此,您可以检查它是否已失效。

BOOL isInvalidated = [self.makeTargetTimer isValid];

此外,您可能还想在dealloc方法中执行此操作:

- (void) dealloc {
    [_makeTargetTimer invalidate];  // Stops the timer from firing (Assumes ARC)
}

在收到偶数时是否滚动?

如果您希望在滚动时触发计时器,则需要使用NSRunLoopCommonModes。在this question中有一个很好的赎罪。

 [[NSRunLoop currentRunLoop] addTimer:makeTargetTimer forMode:NSRunLoopCommonModes]; 

您对createTargets的实施情况如何?

  • 您是否在此方法的正文中添加了NSLog个语句。你确定没有被召唤吗?