1

標準の UIViewController ( TestViewController ) があり、このコントローラーのviewWillLayoutSubviewsメソッドで、新しい SKView サブクラス ( TestView ) をインスタンス化し、サブビューとしてコントローラーのビューに追加します。さらに、ユーザーが SKScene サブクラス ( TestScene ) でアクションを制御できるようにするためのボタンをいくつか追加します。TestSceneは、TestViewのinitメソッドでインスタンス化されます。TestViewがサブビューとしてTestViewController のビューに追加された直後に、単に呼び出すTestViewのメソッドである[testView presentScene]も呼び出します。[自己 presentScene: testScene] .

TestViewControllerで前述のボタンを押すことは、新しい SKSpriteNode サブクラス ( TestSpriteNode ) をインスタンス化、子としてシーンに追加する( TestViewを介して) TestSceneでメソッドを呼び出すことを意味します。これは機能しますが、最初のTestSpriteNodeが追加されると、新しいスプライトをレンダリングするTestSceneで断続的に長い遅延が発生するという問題があります。時々それは完全に機能しますが、ほとんどの場合は動かなくなり、ボタンを複数回押すと複数のスプライトが一度に表示され、その後すべてが完全に機能します. この問題は、シミュレーターと私のデバイスで発生することに注意してください。

TestScene の- (void)didMoveToView:(SKView*)viewに新しいTestSpriteNodeを追加しようとしましたが、TestSpriteNodeがすぐに表示され、ボタンを押して新しいTestSpriteNodeを追加すると遅延が発生します。ボタンを押すとTestSceneで呼び出されるメソッドにブレーク ポイントを追加すると、すぐに呼び出されることがわかりますが、追加されたTestSpriteNodeはすぐにはレンダリングされません。

動的に追加された SKSpriteNodes のレンダリングの遅延に対処する回答が既にある場合は、事前にお詫び申し上げます。私はそれを見つけることができませんでした。新しい SKSpriteNodes を SKScene に追加することについて、私が誤解していることはありますか?

4

1 に答える 1

0

コードなしで言うのは難しいです。ただし、これを考慮してください。スプライトがメモリに読み込まれていないテクスチャを使用している場合、スプライトを作成すると画像ファイルがテクスチャとして読み込まれます。画像が大きいほど、読み込みに時間がかかります。これは、同じテクスチャを使用する後続のスプライトでは発生しません。

まだすべての画像が SKTextureAtlas に追加されていることを確認していない場合は、シーンの作成前または作成中にテクスチャ アトラスをプリロードします。アトラスを使用すると、画像名でテクスチャを取得し、それらを使用して、テクスチャのロード遅延なしでスプライトを作成できます。

于 2013-11-22T21:24:12.740 に答える