4

Cocos3dccactionintervalを含む関数を呼び出そうとしています。特定の時間間隔でその関数を呼び出したいと思います。

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

ここで createTargets は、アクション イベントを含む関数です。関数 Straightit を実行すると、一度だけ正常に動作します。スケジュールしようとすると問題が発生します。関連する質問で既に説明されているさまざまな方法を試しました。しかし、何もうまくいきませんでした。. . .

ここにコードがあります

-(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; 
}
4

1 に答える 1

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)

繰り返し発生するタイマーを停止する唯一の方法は、タイマーを無効にすることです。したがって、無効になっているかどうかを確認できます。

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このメソッドの本体にステートメントを配置しましたか。呼び出されていないことは確かですか?
于 2013-06-25T16:16:14.530 に答える