0

CCSpriteこのコードを使用して、iOSデバイスの画面上を簡単に移動します。

[self schedule:@selector(update:) interval:0.0167];

- (void) update:(ccTime) delta {
    CGPoint currPos = self.position;
    currPos.x += xVelocity;
    currPos.y += yVelocity;

    self.position = currPos;
}

これは機能しますが、アニメーションはスムーズではありません。アニメーションの滑らかさを改善するにはどうすればよいですか?

私のシーンは非常に単純です(背景画像のあるフルスクリーンが1つと、ゆっくり動くCCSprite比較的小さいものが1つあります)。CCSprite

ccTimeデルタをログに記録しましたが、一貫性がありません(ほとんどの場合、指定した間隔である0.0167よりも大きくなります...場合によっては最大4倍になります)。

更新方法のモーションをデルタ時間に合わせて調整することを検討しました(デルタが大きい=>動きが大きいなど)。しかし、私のシーンの単純さを考えると、より良い方法があるようです(そしておそらく私が見逃している基本的なもの)。

4

2 に答える 2

2

スケジューラーは、間隔に従ってセレクターに対応して呼び出しようとしますが、他のプロセスが実行されている場合は、それよりも早くまたは遅くなる可能性があります(したがって、不整合が発生します)。

代わりに、xVelocityとyVelocityにデルタを掛けます。これにより、速度がはるかに滑らかなモーションにスケーリングされます。

例えば:

- (void) update:(ccTime) delta {
    CGPoint currPos = self.position;
    currPos.x += (xVelocity * delta);
    currPos.y += (yVelocity * delta);

    self.position = currPos;
}
于 2011-11-21T23:14:12.810 に答える
1

[self scheduleUpdate]直接呼び出すのではなく、デフォルトのメソッドを使用してみてください。違いが生じるかどうかを確認してください。この方法は、あなたがしていることのために設計されており、よりスムーズかもしれません。

于 2011-11-22T01:41:51.563 に答える