私は非常に単純な「ゲーム」を iPhone にセットアップしました。物事は動き回ったり、回転したり、操作したりできます。シミュレーターでは問題なく動作しますが、デバイスでは約 0.25 FPS になり、タッチを認識する時間がないほど遅いようです。
Item
これはもともと、それぞれが Tick と Draw 関数を持つ s の配列を持つ UIView を使用していました。アプリの開始時に、Tick を呼び出す 60 FPS で発射するタイマーを開始し、Tick の最後に呼び出します。[self setNeedsDisplay];
動作が非常に遅かったので、アイテムを再描画する代わりにレイヤーを移動してItem
、クラスをクラスのサブクラスに変えました。CALayer
ただし、CALayer
フレームごとに手動で動かしていましたが、これは明らかに良くありません。それでも遅すぎました。そこで、最終目的地に移動するように指示し、そこに到達するまでのティック数に等しい長さを与えました。
それは問題なく機能しましたが、何かを操作すると、その動きを止めて代わりに別のことをする必要がある場合があります。そこで、すべてのティックを移動することに戻り、新しい位置を設定するだけでなく、それを CATransaction でラップし、トランザクションにティックと同じ長さを与えました。
正常に動作しますが、新しい問題が発生します。何かをアニメーション化する場合、 を呼び出すティックごとに [self setNeedsDisplay] を使用する必要がdrawInContext:
あり、これは速度低下の大きな問題のようです。
以前のようにすべてを手動で描画する方法はありませんか? CGContext* 呼び出しを行っていたところ、シミュレーターで問題なく動作しました。J2ME または組み込み C++ で同様のものを実装すれば、問題なく動作します。私は何が欠けていますか?興味深い手動アニメーションを作成するには、OpenGL を学ぶ必要がありますか?