2014年11月30日

SpriteKitで使うマスクファイルの作り方

SpriteKitのSKCropNodeではマスクノードで指定した画像マスクで画面に表示する部分を制限することができる。そしてそのマスクはmaskNodeに登録したSKNodeであればよいように見えるが、iOS8.1ではPathで作成したマスクは有効に機能していないようで、SKSpriteNodeでしかも画像ファイルから生成したものでなければならないようだ。

ではそのSKSpriteNodeに設定する画像をどう作ればいいのか。

マスク画像はalpha値のみが関係している。SKCropNodeで設定されたマスク画像で覆われた部分のうち、マスク画像のalpha値が0でない部分が切り取られて表示される。感覚的にはalpha値が0の部分が透けて見えるように思えるがそういうことではない。むしろ逆になっている。

マスク画像のalpha値がマスクされる画像に複製されているように想像するといいでしょう。

付属ファイルは星の部分が透けて見えるようになっている。星の外側がalpha=0でこの部分に置かれた画像は見えない。


SKSpriteNode *mask;
// うまくいかない
// mask = [SKSpriteNode spriteNodeWithColor:[SKColor blackColor]
// size: CGSizeMake(100, 100)];
mask = [[SKSpriteNode alloc] initWithImageNamed:@"mask"];
mask.position = myLabel.position;
[self addChild:mask];
self.cropNode = [SKCropNode node];
self.cropNode.maskNode = mask;
self.cropNode.position = CGPointZero;

[self addChild:self.cropNode];


SKCropNodeを付けたSceneにアタッチしたSKNodeが切り取られる。

mask.png
posted by 永遠製作所 at 18:08| 東京 ☁| Comment(0) | TrackBack(0) | iPhone/iPod touch | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック