マスクはスプライトごとに必要。
DisplayObject#maskを使うとスプライトを切り抜くことができますが、複数のスプライトを同じ形状で切り抜きたい場合、スプライトごとにマスク用スプライトを用意する必要があります。
- 複数のスプライトのmaskとして同一のスプライトを設定した場合、後に設定したスプライトのみマスクが設定された状態になります。
- 先に設定したほうはすべて無効。
- リファレンスにも注意事項としてちゃんと書かれています。
- ちなみに、親子関係にあるスプライトの場合、親に設定したマスクは子でも有効です。
- なので、同じ形状で切り抜きたいスプライトすべてを子として持つ親スプライトを用意して、親にマスクを適用する作戦は可です。
サンプル1: 複数のスプライトに同一のマスクを設定
package { import flash.display.*; // maskを使ってスプライトを切り抜くサンプル public class Sample extends Sprite { public function Sample(){ // スプライトを2つ作成し、同一のマスクを適用。 // →後に設定した方のみ有効。 // sprite1 (赤丸) var sprite1:Sprite = new Sprite(); sprite1.graphics.beginFill(0xEE6668); sprite1.graphics.drawCircle( 50, 50, 50 ); sprite1.graphics.endFill(); addChild( sprite1 ); // sprite2 (青丸) var sprite2:Sprite = new Sprite(); sprite2.graphics.beginFill(0x6668EE); sprite2.graphics.drawCircle( 100, 50, 50 ); sprite2.graphics.endFill(); addChild( sprite2 ); // sprite1,sprite2は兄弟の関係。 // マスクとするスプライト var mask:Sprite = new Sprite(); mask.graphics.beginFill(0xFFFFFF); mask.graphics.drawRect( 20, 20, 100, 50 ); mask.graphics.endFill(); mask.alpha = 50; addChild( mask ); // sprite1,sprite2のマスクとしてmaskスプライトを設定 sprite1.mask = mask; sprite2.mask = mask; // こちらのみ有効。// sprite1(赤丸)は切り抜かれない。 } } }
サンプル2:親子関係にあるスプライトの親にマスクを適用。
package { import flash.display.*; // maskを使ってスプライトを切り抜くサンプル public class Sample2 extends Sprite { public function Sample2(){ // 親子関係にあるスプライトを作成し、親にマスクを適用。 // →親のマスクは子でも有効。 // sprite1 (親:赤丸) var sprite1:Sprite = new Sprite(); sprite1.graphics.beginFill(0xEE6668); sprite1.graphics.drawCircle( 80, 80, 80 ); sprite1.graphics.endFill(); addChild( sprite1 ); // sprite2 (子:青丸) var sprite2:Sprite = new Sprite(); sprite2.graphics.beginFill(0x6668EE); sprite2.graphics.drawCircle( 90, 60, 60 ); sprite2.graphics.endFill(); sprite1.addChild( sprite2 ); // sprite3 (孫:緑丸) var sprite3:Sprite = new Sprite(); sprite3.graphics.beginFill(0x68EE66); sprite3.graphics.drawCircle( 100, 40, 40 ); sprite3.graphics.endFill(); sprite2.addChild( sprite3 ); // マスクとするスプライト var mask:Sprite = new Sprite(); mask.graphics.beginFill(0xFFFFFF); mask.graphics.drawRect( 20, 20, 150, 150 ); mask.graphics.endFill(); mask.alpha = 50; addChild( mask ); // 親のマスクとしてmaskスプライトを設定 sprite1.mask = mask; } } }