2013-06-22 88 views
4

我正試圖調用一個函數,其中包含ccactioninterval in Cocos3d。我想以特定的時間間隔呼叫該功能。當我嘗試NSTimer時,我發現它有時可用,有時不起作用。在iOS中調用特定時間間隔的動作

 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; 
} 
+2

你還試過什麼,什麼都不起作用。你嘗試過CCTimer嗎? – Wain

+0

我試過調度器和cctimer。已撥打電話但未執行操作 –

+0

如果已撥打電話但未執行操作,我會說問題出在操作上,請顯示該代碼。 – Wain

回答

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) 
} 

你滾動時,甚至應該被接受?

如果你想在滾動的時候觸發定時器,那麼你需要使用NSRunLoopCommonModesthis question有很好的補償。

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

什麼是你的createTargets實現什麼樣的?

  • 你把NSLog聲明放在這個方法的主體上。你確定它沒有被叫?
+0

感謝您的回覆。我有與行動有關的問題。我給了一個函數來調用。該函數創建一個meshnode並分配一個動作來執行。我想在特定時間間隔內使用指定操作的節點 –

+0

我的代碼已作爲評論@ Wain給出。所以請看看它 –

相關問題