テクスチャ

基本

準備

ここでは、images1.atlasという名前のフォルダに複数の画像を入れておき、プロジェクトに追加する。

SKTextureAtlas *atlas1 = [SKTextureAtlas atlasNamed:@"images1"]; // 1
SKTexture *texture1 = [atlas1 textureNamed:@"filename1"]; // 2
​​SKSpriteNode *sprite1 = [SKSpriteNode spriteNodeWithTexture:texture1]; // 3
  1. images1.atlasフォルダの画像からテクスチャアトラスを作成
  2. テクスチャアトラスからfilename1.pngのテクスチャを作成
  3. テクスチャからスプライトを作成

例文

テクスチャアトラスの読み込み

SKTextureAtlas *atlas1 = [SKTextureAtlas atlasNamed:@"images1"];

テクスチャを取得してスプライトを作成

SKTexture *texture1 = [atlas1 textureNamed:@"filename1"];
SKSpriteNode *sprite1 = [SKSpriteNode spriteNodeWithTexture:texture1];

複数のテクスチャを切り替えてアニメーションする

テクスチャを配列に入れておく

NSArray *textures1 = @[texture0, texture1, texture2, ...];
sprites1 = [SKSpriteNode spriteNodeWithTexture:textures1[0]]; // 最初のテクスチャを決めておく、この場合は配列の0番
[sprites1 runAction:[SKAction repeatActionForever: 
                                   [SKAction animatWithTextures:textures
                                                                 timePerFrame:0.1f
                                                                              resize:NO
                                                                             restore:YES]]];
[self addChild:sprites1];

テクスチャアトラスの読み込みに時間がかかる場合

[atlas1 preloadWithCompletionHandler:^{
// 読み込み後に実行する処理を記述
}];

あるいはテクスチャアトラスのオブジェクトを配列に入れておき、

NSArray *array = @[atlas1, atlas2, atlas3];
[SKSpriteNode preloadTextureAtlases:array withCompletionHandler:^{
// 読み込み後に実行する処理を記述
}];

テクスチャアトラスからテクスチャ名の配列を得る

NSArray *array = atlas1.textureNams;

テクスチャの一部を取り出して新しいテクスチャを得る

SKTexture *texture1 = [SKTexture textureWithRect:CGRectMake(10, 10, 100, 100) inTexture:texture2];

テクスチャのサイズを得る

CGSize size = [texture1 size];

CIFilterを適用したテクスチャを返す

SKTexture texture1 = [texture2 textureByApplyingCIFilter:filter1];