SKNode

プロパティ

透明度 (0.0で透明、1.0で不透明)

alpha

CGFloat
初期値 1.0(不透明)
範囲 0.0~1.0

コード例

sprite1.alpha = 0.0; // 透明になる(以下sprite1はSKSpriteNodeオブジェクトとする)

子ノード(配列。読み込みのみ。)

children

NSArray*

ノードの矩形(子ノードは無視される。読み込のみ)

frame

CGRect

calculateAccumulatedFrameメソッドでは子ノードを含む矩形が得られる。

非表示 (YESで非表示、NOで表示)

hidden

BOOL
初期値 NO(表示)

コード例

sprite1.hidden = YES; // 非表示になる

名前

name

NSString*

コード例

node1.name = @"node_name1"; // ノードに名前を付けることができる。名前でノードを探すことができる。

親ノード

parent

SKNode*

アクションが実行中かどうか

paused

BOOL

物理体(物理シミュレーションが実行される)

physicsBody

SKPhysicsBody*

SKPhysicsBodyオブジェクトをこのプロパティに設定すると、重力による落下や衝突などのシミュレーション計算が行われます。
実際のスプライトの画像に関係なく、物体の形を自分で設定する必要があります。
物理計算を簡略化して動作を早くするためには、単純な矩形や円形にすると良いでしょう。

コード例

sprite1.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:sprite1.size];

位置

position

CGPoint

コード例

sprite1.position = CGPointMake(100.0, 200.0);

ノードが配置されたシーン(読込のみ)

scene

SKScene*

アクションの速度

speed

CGFloat
初期値 1.0

ユーザー定義のデータ

userData

NSMutableDictionary*

コード例

sprite1.userData = [NSMutableDictionary dictionary]; // 最初に初期化してから使う
[sprite1.userData setValue:@"value1" forKey:@"key1"]; // 自由にデータを設定できる。ここではkey1にvalue1を設定した。
NSLog(@"%@", sprite1.userData[@"key1"]);     // データの読み込み

タッチ操作を受け付けるか

userInteractionEnabled

BOOL
初期値 NO(初期値がNOなので独自のタッチ処理をする場合は注意)

X方向のスケール

xScale

CGFloat
初期値 1.0

縦横同じく拡大する場合はsetScaleメソッドの利用も考慮してください。

コード例

sprite1.xScale = 2.0; // 横方向に2倍

Y方向のスケール

yScale

CGFloat
初期値 1.0

Z方向の重なり順(大きいほど手前に表示される)

zPosition

CGFloat
初期値 0.0

回転角度(ラジアン)

zRotation

CGFloat
初期値 0.0

コード例

sprite1.zRotation = 45.0  / 180.0 * M_PI; // 反時計回りに45度回転

ノードを作成するクラスメソッド

ノードを作成

+ (instancetype)node

コード例

// 新しくノードを作成する
SKNode* node1 = [SKNode node];

ノードの矩形サイズを調べる

含まれるノードを子孫までたどって矩形サイズを返す

- (CGRect)calculateAccumulatedFrame

それぞれのノードのxScale、yScale、zRotationプロパティの効果も考慮されます。

ノードのスケールを設定する

スケールを設定

- (void)setScale:(CGFloat)scale

scale ノードのxScaleとyScaleに設定する値 

ノードツリーに関する処理

ノードを子ノードリストの最後に追加する

- (void)addChild:(SKNode *)node

node 追加するノード 

コード例

[self addChild:sprite1]; // シーンクラスに記述する例、sprite1をシーンに追加

指定した位置に子ノードを追加する

- (void)insertChild:(SKNode *)node atIndex:(NSInteger)index

node 追加するノード
index ノードを挿入する配列の位置

親から自身を削除

- (void)removeFromParent

コード例

[sprite1 removeFromParent]; // sprite1をシーンから削除する時の例

全ての子ノードを削除

- (void)removeAllChildren

コード例

[self removeAllChildren]; // シーンから全てのノードを削除(シーンのクラス内に記述した時)

配列にあるノードを削除する

- (void)removeChildrenInArray:(NSArray *)nodes

nodes SKNodeオブジェクトを格納した配列

このノードが指定したノードの子かどうか

- (BOOL)inParentHierarchy:(SKNode *)parent

parent 調べるノード

コード例

BOOL isParent = [sprite1 inParentHierarchy:sprite2]; // sprite1がsprite2の子ノードかどうかを調べる

名前付きノードの処理

名前を指定して子ノードを返す

- (SKNode *)childNodeWithName:(NSString *)name

name ノードの名前

見つからない場合はnilを返す。
同じ名前のノードが複数ある場合は、最初のノードを返す。

コード例

SKSpriteNode *sprite1 = (SKSpriteNode*)[self childNodeWithName:@"node_name1"]; // シーンで、node_name1の名前のついたスプライトノードを探す。

指定した名前の子ノードそれぞれに対してブロック内の命令を実行

- (void)enumerateChildNodesWithName:(NSString *)name usingBlock:(void (^)(SKNode *node, BOOL *stop))block

name 探索するノードの名前
block 実行するブロック文
node:名前が一致したノード
stop:YESをセットするとそこで探索を中止する 

コード例

[self enumerateChildNodesWithName:@"node_name1" usingBlock:^(SKNode *node, BOOL *stop) {
// ここに実行したい命令を記述
}];

アクションの実行

アクションを実行

- (void)runAction:(SKAction *)action

action シーンのアニメーションループが実行される時、次に実行されることになるアクション 

コード例

[sprite1 runAction:action1];

アクションを実行して、完了後にブロック内の命令を実行

- (void)runAction:(SKAction *)action completion:(void (^)(void))block

action 実行するアクション
block アクション完了時に実行されるブロック文

キーを指定してアクションを実行

- (void)runAction:(SKAction *)action withKey:(NSString *)key

action 実行するアクション
key アクションを特定する一意な文字列

このメソッドの動作はrunActionメソッドと同じだが、後で繰り返し実行されるために内部に保持される。もし同じキー名のアクションが実行されていたら、新しいアクションを追加する前にそれは削除される。

指定したキーのアクションを返す

- (SKAction *)actionForKey:(NSString *)key

key アクションを特定する一意な文字列 

キーに対応するアクションがない場合はnilを返す。

アクションが実行中かどうか

- (BOOL)hasActions

全てのアクションを削除

- (void)removeAllActions

キーを指定してアクションを削除

- (void)removeActionForKey:(NSString *)key

key アクションを特定する一意な文字列

ノード座標系の変換

別のノードの座標をこのノードの座標に変換する

- (CGPoint)convertPoint:(CGPoint)point fromNode:(SKNode *)node

point 別のノードの座標系での座標
node このノードの階層化にあるノード 

このノードの座標を別のノードの座標に変換する

- (CGPoint)convertPoint:(CGPoint)point toNode:(SKNode *)node

point このノードの座標系における座標
node このノードの階層化にあるノード

座標点がノードの内側にあるかを調べる

指定した座標がノードの矩形内かどうか調べる

- (BOOL)containsPoint:(CGPoint)p

p ノードの座標系での座標

座標がノードのバウンディングボックス内に含まれる場合、YESを返す。

コード例

[sprite1 containsPoint:CGPointMake(100.0, 100.0)];

指定した座標のノードを返す

- (SKNode *)nodeAtPoint:(CGPoint)p

p 座標

座標が含まれる子ノードを返すか、含まれるノードがない場合そのレシーバー(自分自身)を返す。座標に複数の階層の子ノードがある場合、ツリーの階層の深いノードを返す。複数のノードが同じレベルの場合、Z値の小さいものを返す。

指定した座標のノードの配列を返す

- (NSArray *)nodesAtPoint:(CGPoint)p

p 座標

座標が含まれるノードがない場合、空の配列が返る。

ノードの交差を調べる

ノード同士が交差しているか

- (BOOL)intersectsNode:(SKNode *)node

node 同じノードツリー上にある別のノード 

それぞれの子ノードについては無視される。

コード例

BOOL isIntersected = [sprite1 intersectsNode:sprite2];