在iOS中,每隔一段时间调用一个动作



我试图在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; 
}

如果没有太多的代码,很难知道你的问题是什么,但是这里有一些事情可以尝试道歉,如果其中任何一个是明显的。


是否保留了对计时器的引用?

这可能对调试有用。如果你有一个名为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)

停止重复发生的计时器的唯一方法是使其失效。因此,您可以检查它是否无效。

BOOL isInvalidated = [self.makeTargetTimer isValid];

你也可以在dealloc方法中这样做:

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

当应该接收偶数时,您是否在滚动?

如果你想在滚动时触发计时器,那么你需要使用NSRunLoopCommonModes。在这个问题上有一个很好的解释。

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

createTargets的实现是怎样的?

  • 您是否在此方法的主体上放置了NSLog语句?你确定没人叫吗?

相关内容

  • 没有找到相关文章

最新更新