• ベストアンサー

ステージ全体にマスクを

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

  • Flash
  • 回答数1
  • ありがとう数5

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

  • ベストアンサー
  • 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

  • ASファイルからのstage

    flashcs3 actionscript3.0で作成しています。 asファイル "Test.as" package { import flash.display.DisplayObjectContainer; import flash.display.Sprite; import flash.display.Stage; import flash.display.StageDisplayState; import flash.events.*; public class Test extends Sprite { public function Test() { init(); } private function init() { for (var i:uint = 0; i<10; i++) { var sp:Sprite = new Sprite(); sp.graphics.beginFill(0x00CCFF); sp.graphics.drawRect(i*20,50,20,20); sp.graphics.endFill(); stage.addChild(sp); } } } } flash var hoge2 = new Test(); と書いてflash上のstage上にSpriteをaddChildしたいのですがstageをnullと解釈してしまいます。 この場合flash上のstageを参照するにはどうすれば良いのでしょうか?

    • ベストアンサー
    • Flash
  • 【AS3】ムービークリップからステージへアクセスできません

    はじめまして。FlashでAction Script3.0を勉強し始めたばかりの初心者です。 実は、AS3でどうしても不明な部分があり この度問い合わせさせていただいております。 AS2では_rootでステージにあるムービークリップにアクセスできたかと思うのですがAS3では代わりのものはあるのでしょうか。 現在ステージ上にいくつかムービークリップを置いて、 それぞれのムービークリップ最後のタイムラインに、 「root.gotoandPlay("scene1")」というように記述して、 ステージにもどり、そのフレーム名から始めたいのですが(この場合、scene1というステージ上のフレームから再生させたい) 「未定義である可能性のgotoAndPlayメソッドを静的型flash.display:DisplayObjectContainerの参照を使用して呼び出しました」というエラーになってしまいます。 外部クラスなどは使用しておらず、 ライブラリに格納してあるムービークリップをステージに配置し、 初めのムービークリップを再生したら、次のムービークリップを再生、、というふうに順々に表示させていきたいのですが・・ アドバイスをいただけると大変助かります!! よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • Flashのサイズの縮小方

    480×640のFLASHを作成していたのですが、 240×320に変更しなければなくなりました。 メインだけで作成していた物はメインでそのまま全体を縮小できるのですが、ムービークリップで作成している物はメインで240×320に縮小しても、ムービークリップ内の画像がそのまま480×640の大きさなので不都合です。 簡単にムービークリップ内の画像も同じ大きさにする方法はありますでしょうか? それとも1から作り直した方が良いでしょうか? また、”ステージ外に背景と同じ色で周りを隠す以外で”ステージ外ではみ出した画像を見せない(表示させない)方法はありますでしょうか? ありましたらお教え下さい。 宜しくお願いします。

  • ムービークリップのグラデーション

    Flash Professional 8 を使用しています。 予め描画した長方形のムービークリップ(線状のグラデーション設定をしています)を 1つステージに配置しています。 このムービークリップに対して、別の色のグラデーションに塗り替えたい場合、 手動による変更(カラーパレットから)しか方法はないのでしょうか? スクリプトによる変更はできませんか? ご教授をお願いいたします。

  • 画面全体にマスク

    参考 http://ficc.jp/ こちらのページの最下部、「非公開作品集」をクリックしたときのように、ブラウザのサイズに関わらず画面全体にマスクをし、その上にFlashからHTMLを読み込んだオブジェクトをおきたいと思っています。 画面全体に対するマスクをかける方法について、何かヒントいただけないでしょうか?

    • ベストアンサー
    • Flash
  • ブラウザの高さのみにあわせて伸縮するムービークリップのスクリプトについて

    よろしくお願い致します。 ステージの縦横中央に、800px×500pxのムービークリップ(インスタンス名:contents)を配置しています。 ステージの縦の長さが700pxより大きければ、contentsの大きさを800px×500pxで固定して、700px より小さければ、ステージの縦の大きさに合わせてcontentsを縮小させていくスクリプトを書きたいと思っています。 ブラウザに合わせてムービークリップを拡大・縮小させるスクリプトは分かるのですが、ステージの縦の高さ のみに限定して縦の高さが700px以上のときはムービークリップの大きさを固定する、というのがよく分かりません。 どなたかお分かりになられる方がいらっしゃいましたら、どうかご教授下さいますようお願い致します。

    • ベストアンサー
    • Flash
  • 円をランダムで描画していき、最初の円から徐々に透明になる

    現在AS3.0にてランダムで永遠と円を描きながらも、描画した円から順番に透明になっていくスクリプトを書いているのですが、以下のスクリプトですと全体が透明になっていき、最終的に何も残らなくなってしまいます。 常に透明度1の円を描画しつつも、先に描画した円から徐々に透明になっていくスクリプトにするにはどうすればよいのでしょうか?ご教授お願いできればと思います。 addEventListener(Event.ENTER_FRAME, rain); import flash.display.Sprite; import flash.display.MovieClip; var mySprite:Sprite = new Sprite(); var myClip:Sprite = new Sprite(); addChild(myClip); function rain(event:Event):void { with(mySprite.graphics) { var circle:int = Math.floor(Math.random()*100); var stageX:int = Math.floor(Math.random()*stage.stageWidth); var stageY:int = Math.floor(Math.random()*stage.stageHeight); beginFill(0x000000); drawCircle(stageX, stageY , circle); endFill; myClip.addChild(mySprite); var diff:Number = 0.01; myClip.alpha -= diff; } }

    • ベストアンサー
    • Flash
  • 縮小させる時の基点について

    ActionScriptを勉強中です。分からないことがあるので質問させていただきます。 ステージ上にマスクをかけたムービークリップ(インスタンス名:mc)があり、 そのmcを拡大ボタンと縮小ボタンを使い拡大/縮小できるようにしています。 mcが拡大されている時には、mc自体をドラッグして動かせるようにしています。 レイヤー構造は ーーーーーーーーーーーーーーーーーーーーーーーーーーーー 1、ボタン:拡大ボタンと縮小ボタンを配置 2、マスク ---マスクの対象:mcを配置 3、背景:背景というか枠を書いています ーーーーーーーーーーーーーーーーーーーーーーーーーーーー となっております。 mcにには ーーーーーーーーーーーーーーーーーーーーーーーーーーーー on (press) { left = Stage.width-this._width/2-2; top = Stage.height-this._height/2-98; right = this._width/2+2; bottom = this._height/2+2; this.startDrag(false, left, top, right, bottom); } on (release, releaseOutside) { this.stopDrag(); } ーーーーーーーーーーーーーーーーーーーーーーーーーーーー 拡大ボタンには ーーーーーーーーーーーーーーーーーーーーーーーーーーーー on (release) { if (mc._yscale < 300) { mc._xscale = mc._yscale += 100; } else { mc._xscale = mc._yscale = 300; } }ーーーーーーーーーーーーーーーーーーーーーーーーーーーー 縮小ボタンには ーーーーーーーーーーーーーーーーーーーーーーーーーーーー on (release) { if (mc._yscale > 100) { mc._xscale = mc._yscale -= 100; } else { mc._xscale = mc._yscale = 100; } } ーーーーーーーーーーーーーーーーーーーーーーーーーーーー と書いています。 拡大した時の挙動は問題ないのですが、縮小する時の挙動に問題があります。 mcの中心を基点にしているため、端の方でで縮小すると余白が見えてしまいます。 この余白を見せないためにはどうしたら良いのでしょうか? 素人考えでhitTest()を使えば良いのかと思っているのですが、なかなかうまくいきません。 どうしたらよいのかご教示いただけると助かります。よろしくお願いいたします。 制作環境はCS4でAS2.0です。

  • ページ全体の拡大/縮小が行える、JavaScriptのサンプルを教えていただけますでしょうか?

    ページ全体の拡大/縮小をJavaScriptにて行いないたい(対象はIEのみ)のですが、検索をしてみると、「文字サイズの拡大/縮小」や「画像の拡大/縮小」はよく見つかるのですが、ページ全体の拡大/縮小のサンプルを掲載しているページはあまり見かけません。 検索("ページ ズーム javascript"等のキーワードで)で何件か見つかって、試してはみたのですが、それらのプログラムですと、私のほうのHTML+CSSで使用すると、何とも説明しがたいおかしな挙動をしてしまいます。HTML+CSSの見直しも色々行ってみたのですが、なかなか改善されません。 みなさんがご存知のJavaScriptのサンプル(ページ全体の拡大/縮小)が掲載されているURLを教えていただけますでしょうか? 教えていただいたサンプルを実装し、色々探ってみたいと思っています。 ※ちなみに、イメージは↓このような感じです。 http://appleworld.com/4tr/

  • ムービークリップを台形に変形させたい

    ムービークリップシンボルを変形させたいのですが、縮小拡大や平行四辺形には変形できるのですが、台形に変形することができません。何か方法はあるのでしょうか? 教えてください

    • ベストアンサー
    • Flash