0

cocos2dを使ってiPhoneアプリを開発しようとしています。一定の時間間隔を呼び出すメソッドを呼び出すために「scheduledTimerWithTimeInterval」を使用しています。しかし、今では時間間隔が徐々に増加しています。このため、時間は徐々に遅くなります。ここに私のコードがあります:

- (void) methodTime: (id) sender{

    NSTimer *rat =[NSTimer scheduledTimerWithTimeInterval:(.5) target:self selector:@selector(rotation:) userInfo:nil repeats:YES]; 
}

- (void) rotation:(NSTimer *)theTimer{

    NSLog(@"I m  # %i", i);
    i=i+10;   // Here , i is a global int variable.
    i=i % 1440;
        if(i==0){
            [theTimer invalidate];

        }
        else {
         int rotationNum=i;
        Sprite *sp = [Sprite spriteWithFile: @"1.png"];
        sp.position=cpv(220,180.5);
        sp.rotation=rotationNum;
        [self add:sp];      
        }

}
4

5 に答える 5

2

NSTimer を使用しないでください。cocos2d のベスト プラクティスを確認してください。

于 2009-02-07T01:22:10.083 に答える
2

0.5 秒ごとに、スプライトのリストにスプライトを追加しているように見えます。最終的にリストが非常に大きくなり、そのすべてのデータにより、メソッドの実行に 0.5 秒以上かかるようになります。これにより、タイマーが可能な限り速く起動しますが、メソッドが終了するのを常に待っているため、それほど速くはありません。

あなたのコードについて詳しく知らなくても、それが私の最善の推測です。

于 2009-02-05T11:07:16.487 に答える
0

オブジェクトを継続的に回転させるだけなら、CATransforms と Core Animation の方が適しているかもしれません。

于 2009-02-04T16:02:20.403 に答える
0

Cocos2d-iphone の組み込みインターバルを使用します。

デモ cocos プロジェクトを調べてみると、このようなことを cocos フレームワークでどのように「行うべき」かがわかります。

于 2009-02-05T11:34:54.200 に答える
0

あなたの質問を理解するのに苦労しました。「質問」で引用符を 1 つも使用していません。

コードの実行に 0.5 秒以上かかる可能性はありますか? 特に、バックグラウンドで実行される作業の量が反復ごとに増加するためです。(より多くのスプライト。)

この関数を高速化するようにしてください。たとえば、その PNG をメモリにロードし、毎回ファイルからロードしないでください。(とにかく、それはメモリにとってより良いです。)

ところで: そのループは危険なほど無限ループのように見えます。(効果があるのか​​もしれませんが…)

于 2009-02-04T13:24:36.180 に答える