0

いくつかのものをロードするのに数秒かかるアルゴリズムがあり、実際のロードを開始する前に、まずラベルに「ロード中」という文字列を設定したいと思います。これはすべて同じレイヤー内にあり、シーンを切り替えることはありません。

私はこれを簡単に行うことができると思いました:

-(void)startLoading{

[self unscheduleAllSelectors];//just in case the update is already scheduled

[self.loadingLabel setString:@"Loading...."];

[self scheduleUpdate];

 }

次に、私はこれを持っています:

-(void)update:(ccTime)delta{
[self unscheduleUpdate];
[self beginLoading];//another method that loads all the stuff

 }

私の理解では、私のメソッドbeginLoadingは次のフレームまで実行されるべきではありません。したがって、私のラベルは正しく更新されるはずです。しかし、これは起こっていません。すべてのアセットが読み込まれている間、わずかなフリーズが発生し、読み込みが開始される前にラベルが更新されることはありません。

私は一歩を逃していますか?

4

1 に答える 1

0

いいえ、何も見逃していません。私はこれとの戦いをやめ、今ではこの種の「遅延」タスクカタパルトを使用しています。最初の目盛りから2番目の目盛りへの移行で引き分けになることを確認する必要があります。

-(void) startLoading{
    _loadTicker=0; // an NSUInteger iVar declared in the .h
    [self schedule:@selector(tickOffLoading:)];
}

-(void) tickOffLoading:(ccTime) dt{

    _loadTicker++;
    if(_loadTicker==1) {
        [self.loadingLabel setString:@"Loading...."];
    } else {
        [self unschedule:@selector(tickOffLoading:)];
        [self beginLoading];
    }
}
于 2012-06-01T16:35:31.847 に答える