読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

マスクはスプライトごとに必要。

Flex

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;
        
    }
  }
}

コンパイルしたものはこちら