0

私は cocos2d 連続実行 ios ゲームを構築しています。このゲームでは、キャラクターがアニメーション化されてシーンを実行します。背景、キャラクタの足元の地面、走っているキャラクタの後ろのフェンスが反対方向に動き、前方への動きをシミュレートします。キャラクター自体はその場で走るようにアニメーション化されています。時折、追加のスプライトがシーン内を移動します。

すべての動き (キャラクターのインプレース アニメーションを除く) は更新メソッドで発生します。

追加のスプライトがシーンを通り過ぎると、すべての可動部分が途切れることに気付きました。追加のスプライトがなくなると、スタッターはなくなります。

また、スタッターは ipad 3 (ios 6.0.1) ではほとんど感じられませんが、iphone 3gs (ios 6.0.1) と ipad 1 (ios 5.1.1) では最も目立ち、 iphone 4 (ios 6.0.1)。

これにどこから対処すればよいかわかりません - 追加のスプライトの実際のレンダリングを削除しようとしました。また、キャラクターの背後にあるフェンスも削除しようとしましたが、どちらの変更もスタッターには影響しませんでした。

助言がありますか?

更新:@Fogmeisterが以下に提案したように、時間プロファイラーを実行して修正しました。更新のたびにディスク i/o を実行して、状態変数を検索していたことがわかりました。私はそれを最適化し、スタッターはすべてのデバイスでなくなりました. ありがとう!

4

2 に答える 2

2

コードで時間を費やし、スタッターを引き起こしている原因を特定する必要があります。

古い、低速のデバイスではスタッターが多くなり、新しいより強力なデバイスではスタッターが少なくなるため、これは単なる最適化の問題のようです。

TimeProfiler機器を使用してアプリを分析します。これにより、時間が費やされている場所がわかり、時間を取っている関数(行ではない場合)をほぼ瞬時に示すことができます。

最適化を開始できることがわかったら。

于 2013-01-14T08:27:08.097 に答える
1

スプライトを動かすためのコードは何ですか? メソッドで位置を手動で更新する場合は、フレームレートのわずかな変動を考慮して、-(void) update:(ccTime) delta {}各動きに を乗算していることを確認してください。delta

于 2013-01-14T08:44:53.333 に答える