2

わかりました、これは壁に向かって叫んでいます...だから我慢してください。

Xcode で SpriteKit テンプレートを使用して簡単なゲームのコーディングを開始しました。

という名前のフォルダーに 2 つの PNG を追加Stage01.atlasし、それをプロジェクトにドラッグしました。どのオプションを選択したか思い出せません。なぜなら、プロジェクト ナビゲーターに青色のフォルダー アイコンとして表示されるからです (おそらく拡張子があるためでしょうか?)。

次に、いくつかのスプライトをインスタンス化しました

[[SKSpriteNode alloc] initWithImageNamed:@"My_Image_Name_Without_The_@2x_Or_Extension"];

ビルド設定でテクスチャアトラスを有効にするのを忘れていたため、最初は機能しませんでした。その後、それは魅力のように機能しましたが...

次に、新しい種類のスプライトを表示するために、3 番目の PNG をアトラスに追加しました。

新しいスプライトはどこにも見当たりませんでした。

クリーン インストールを試みます。デバイスからアプリを削除し、クリーン、ビルドします。

これで、すべてのスプライトが、背面の境界線と大きな赤い "X" が内側にある白いクワッドとしてレンダリングされます。次のようなコンソール メッセージも表示されます。

SKTexture: Error loading image resource: "My_Image_Name_Without_The_@2x_Or_Extension"

.atlas フォルダーを削除して、「追加されたフォルダーのグループを作成する」および「追加されたフォルダーのフォルダー参照を作成する」の両方として、再度追加しようとしました(これにより、リソースがバンドル ルートではなくサブフォルダーに配置される可能性があります)。 、したがって、通常はUIImageなどにとって重要です)、役に立たない.

スプライト作成コードを次のように置き換えました。

SKTexture* texture = [SKTexture textureWithImageNamed:name];
SKSpriteNode* body = [[SKSpriteNode alloc] initWithTexture:texture];

...そしてブレークポイントを配置して、テクスチャがnil. そうではありません

それで、何が得られますか?

補足: テンプレートにバンドルされている「宇宙船」テクスチャは問題なくレンダリングされます。

補足 2: 誰かが「spritekit」というタグを作成します (SO は「既に存在するため」使用できませんが、提案としては出てきません)。

4

1 に答える 1

7

テクスチャ アトラス テクスチャを使用するには、まずテクスチャ アトラスをロードする必要があります。

SKTextureAtlas* atlas = [SKTextureAtlas atlasNamed:@"Stage01"];

次に、そのテクスチャからスプライトを作成できます。

SKTexture* texture = [atlas textureNamed:@"My_Image_..."];
SKSpriteNode* body = [SKSpriteNode spriteNodeWithTexture:texture];

最初にこれが機能したという事実は、.atlas が生成されずに画像が追加されたためである可能性があり、後でプロジェクトから画像を削除しても、Xcode はアプリ バンドルからリソースを削除しないため、展開されたアプリ バンドルに残ります。 . そのため、Sprite Kit は最初はアトラス以外の画像を使用していましたが、それらを見つけることができず、テクスチャ アトラスでそれらを自動的に検索したり、アトラスを自動ロードしたりしません。

于 2013-11-08T17:08:01.417 に答える