0

メソッド「 displayWarningMessage 」で異なる時間間隔(たとえば、1秒後、2.6秒後など)で3回の後続の呼び出しをスケジュールすることを期待して次のコードを実行しましたが、機能しませんでした(最初にのみマッサージが表示されました) 。

スケジューラーに、特定の遅延で複数回表示するジョブを実行するメソッドシグネチャが見つかりません。誰か提案がありますか?

[self scheduleOnce:@selector(displayWarningMessage)  delay:0.7f];
[self scheduleOnce:@selector(displayWarningMessage)  delay:1.7f];
[self scheduleOnce:@selector(displayWarningMessage)  delay:3.7f];
4

3 に答える 3

1

ここでの問題は、最初のスケジュールを呼び出すと、正常にスケジュールされることです。しかし、次の即時呼び出しは警告をスローしています

CCScheduler#scheduleSelector. Selector already scheduled. Updating interval from: X.2 to X.2

これはログで確認できます。

できることは、セレクターが呼び出されたときです。メソッドの最後で、完了するまで、次回のために再度スケジュールすることができます。呼び出された回数を追跡するためにカウンターを取得し、すべての間隔を配列に入れてから、カウンターによって識別される特定のインデックスで間隔の次のセレクターをスケジュールすることができます。このような:

NSArray *intervals = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.7],[NSNumber numberWithFloat:1.7],[NSNumber numberWithFloat:3.7], nil];

int counter = 0;

//schedule it for the first time with object at index counter/index 0
[self scheduleOnce:@selector(displayWarningMessage)  delay:[(NSNumber *)[intervals objectAtIndex:counter]] floatValue];

セレクターで、次のようにします。

-(void)displayWarningMessage
{
    //do all your stuff here

    //increment counter
    counter ++;

    if(counter < [intervals count])
    {
        //schedule it for the next time with object at index counter/index 
        [self scheduleOnce:@selector(displayWarningMessage)  delay:[(NSNumber *)[intervals objectAtIndex:counter]] floatValue];
    }
}

intervalscounterもちろん、クラス ivar である必要があります。

于 2012-07-19T11:04:47.413 に答える
0

これを試して:

- (void)displayWarningMessage {
    //Stuff
}

- (void)callStuff {
    CCCallFunc *call = [CCCallFunc actionWithTarget:self selector:@selector(displayWarningMessage)];
    CCDelayTime *delay1 = [CCDelayTime actionWithDuration:0.7f];
    CCDelayTime *delay2 = [CCDelayTime actionWithDuration:1.7f];
    CCDelayTime *delay3 = [CCDelayTime actionWithDuration:3.7f];
    CCSequence *actionToRun = [CCSequence actions:delay1, call, delay2, call, delay3, call, nil];
    [self runAction:actionToRun];
}

それはあなたがやろうとしていることでうまくいくはずです.少なくともそれは私がそれをやろうと想像する方法です. 1 つの CCSequence でその CCCallFunc を複数回呼び出すことができ、個別に 3 回作成する必要はないと確信しています。もちろん、必要に応じて、これらの遅延を可変ベースにすることもできます。それがどうなるか教えてください。

于 2012-07-20T01:36:35.163 に答える
-1

メソッドが作成されます。

[self schedule: @selector(displayWarningMessage:) interval:3.2f];

-(void) displayWarningMessage:(ccTime) delta
{

    CCLOG(@"alert........!!!!!!");

}

警告メッセージが検出されない場合は Calling メソッドを使用します。

于 2016-01-08T12:54:39.803 に答える