プロが教える店舗&オフィスのセキュリティ対策術

ステージ全体にマスクを

AS3.0を使ってステージのサイズと同じ長方形を描画し、それをマスクにすることでステージ外を表示しないようにしたいです。new Spriteで何とかなりそうだと思ったのですが、ステージと同じサイズの長方形を描く時点で挫折しました。

そこで、ムービークリップを作ってその中に長方形を描き、それを拡大(あるいは縮小)してからマスクにするのはどうだろうと考えましたが、ステージ全体にマスクをかける方法が分かりません。

アドバイス、よろしくお願いします。
(よりよい方法をご存知の方も、是非お願いします)

A 回答 (1件)

ステージ(Stage / stage)にマスクをかけることはできません。



ヘルプ(ActionScript 3.0 言語およびコンポーネントリファレンス)で
mask を検索すると出て来る Stage のページにも
次のように書いてあります。

> 以下に示す継承プロパティは
> Stage オブジェクトに適用できません。
> これらを設定しようとすると、
> IllegalOperationError がスローされます。
> これらのプロパティは読み取ることはできますが、
> 設定することはできないため、
> 常にデフォルト値となります。
>
> ・ accessibilityProperties
> ・ alpha
> ・ blendMode
> ・ cacheAsBitmap
> ・ contextMenu
> ・ filters
> ・ focusRect
> ・ loaderInfo
> ・ mask



しかし ステージ(Stage/stage)ではなく,
root であればマスクをかけることはできます。

したがって 「いわゆるステージ全体」 にはマスクをかける ということはできると思います。

root とは,
この場合の Flash を起動して新規ドキュメントを作成したときに
すぐに見えるタイムライン(メインタイムライン)のことです。


その root のタイムラインのフレームに書くスクリプト例↓

----------------------------------
//マスクとなる矩形塗りを用意
var myMask:Shape = new Shape();
myMask.graphics.beginFill(0xFF0000);
myMask.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
myMask.graphics.endFill();

//マスクとなる矩形塗りをstageに配置
//(矩形の座標をstageの左上で固定するため)
stage.addChild(myMask);

//root(stage の子0) に myMask のマスクをセット
stage.getChildAt(0).mask = myMask;
//↓上記の代わりにこれでも良い
//root.mask = myMask;
//↓また これでも良い
//this.mask = myMask;
----------------------------------
 
 
上記スクリプトの内容は
stage の直下に Shape(シェイプ) を配置し
root に Shape のマスクをかけるということです。

つまり
スクリプトによってムービーの構造を次のように変えたということです。

・スクリプト実行前の構造↓

 stage
  └root ( stage.getChildAt(0) )


・スクリプト実行後の構造↓

 stage
  ├myMask (矩形のシェイプ)
  └root ( stage.getChildAt(0) )
     ↓そして↓
   root に myMask のマスクをかける
 
    • good
    • 0
この回答へのお礼

まったくの勘違いをしていました。
あろうことか、rootが使えなくなったのかと思っていたのです^^;

正直なところ、ヘルプからの引用文は半分も理解できていませんが、方法自体は丁寧に解説して頂いたので良くわかりました。
大変丁寧に教えていただき、ありがとうございました。

お礼日時:2010/09/14 22:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!