2011-07-30 1 views
0

私はただ1つのオブジェクトの2次元の翻訳ベースのアニメーションだけを含むiPhoneのゲームに取り組んでいます。このオブジェクトはUIViewからサブクラス化され、Quartz-2Dで描画されます。翻訳は現在、各フレームをチェックし、UIViewにその場所を変更するよう指示するNSTimerによって適用されます。iOSクォーツによるフレームバイナリ

しかし、次のフレームでUIViewがどこに移動するかを決定するかなり複雑な数学があります。 iOSシミュレータでゲームをテストするのはうまくいきますが、iPhoneでテストするときは間違いなくフレームをスキップしているようです。

私の質問は、フレームごとにビューフレームを変換する私の方法ですか?私はOpenGLがもっと一般的にゲームに使われていることは知っていますが、そのような単純なアニメーションのためにOpenGLを設定することは残念です。それにもかかわらず、それは面倒の価値があるのですか?

答えて

0

iPhoneシミュレータの問題は、Macと同じリソースにアクセスできることです。あなたのMacのラム、ビデオカードなど。私がやっていることは、iPhone SDKに付属のinstruments.appを開いて、CoreAnimationテンプレートを使ってリソースの管理方法を見ていることです。割り振りを見て、何かがうまくいっているかどうかを確認することもできます。 CPUも役立つかもしれません。

tl; dr iPhone simは、お使いのMacのRAMとGFXカードを使用します。インストゥルメントのシーケンスを見て、少し遅れていないかどうか確認してください。

1

翻訳を計算するためにどのような複雑な数学が行われているのかわからなければ、言うことは難しいです。このためにOpenGLを使用するのは、GPUが実際にボトルネックになっている場合のみです。私はこれが当てはまるとは思わないが、スキップされたフレームの原因となっている部分をテストする必要があります。

一般に、UIViewCALayerはOpenGLの上に実装されているため、UIViewの翻訳にはすでにGPUが使用されています。

脇の下として、NSTimerの代わりにCADisplayLinkを使用すると、おそらくゲームループにとっては良いでしょう。

+0

CADisplayLinkは良いアイデアです。ありがとうございます。ボトルネックについては、基本的にはすべてのフレームを更新する一連のラインである別のアニメーションが実際に存在することを忘れてしまいました。私は、現在Quartzで描かれているこれはおそらくボトルネックであり、OpenGLで行うべきであることを認識しています。 – pinerd314159