cocos2dx 3.0でクリッピングマスクの実現
cocos2dxのClippingNode
を使えば、クリッピングマスクのような効果ができます。この機能で、ユーザーアイコンを丸く表示させてみる。
##まず普通にアイコンを表示させる
ClippingNodeを使ってアイコンを丸くする
ClippingNodeを作成
auto clipping = ClippingNode::create();
マスクの形を作る
背景が透明にした黒い円の画像mask.png
を用意した。
この画像のSprite
を作成する。
auto clippingShape = Sprite::create("mask.png");
アイコンをクリップする
この画像をマスクとして使うには、ClippingNode
のsetStencil
メソードを使う:
clipping->setStencil(clippingShape);
clipping->setInverted(false);
clipping->setAlphaThreshold(0.0f);
これで、clipping
にaddChild
されたSprite
はすべてmask.png
の形にクリップされる。(黒い部分と重なってる部分だけ表示される)
clipping->addChild(avatar);
this->addChild(clipping);
プレビューすると:
できた!
##感想
この記事でマスクの形は画像を使っているが、これは円とういう形がちょっと特殊で、cocos2dxのDrawNode
で描画するのがめんどくさいからのだ。もしポリゴンなどみたいな簡単な形だと、DrawNode
で形を作成してマスクとして使ったほうが便利かもしれない。