• ベストアンサー

ステージ全体にマスクを

ステージ全体にマスクを AS3.0を使ってステージのサイズと同じ長方形を描画し、それをマスクにすることでステージ外を表示しないようにしたいです。new Spriteで何とかなりそうだと思ったのですが、ステージと同じサイズの長方形を描く時点で挫折しました。 そこで、ムービークリップを作ってその中に長方形を描き、それを拡大(あるいは縮小)してからマスクにするのはどうだろうと考えましたが、ステージ全体にマスクをかける方法が分かりません。 アドバイス、よろしくお願いします。 (よりよい方法をご存知の方も、是非お願いします)

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.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 のマスクをかける  

curious_boy
質問者

お礼

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

関連するQ&A