ステージを右クリックしたときのコンテキストメニューの変更方法
AS2.0に慣れすぎたのか、AS3.0は「なんでこんなところまで変更するのよ」って言いたくなるくらい扱い難い。。。
さてと、困ったもんでstageのプロパティは読み取り専用で、任意の設定ができないんですって。
参考URL : http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/display/Stage.html
でも、設定したいのよ!ってことでその方法をメモ。
メインタイムラインに記述
//コンテキストメニュ−作成
var cm = new ContextMenu();
//とりあえず全部を隠しておいて
cm.hideBuiltInItems();
//表示したい項目だけ設定
cm.builtInItems.quality = true;
// コンテキストメニューを関連付ける
this.contextMenu = cm;
って書いてみると、2.0とさほど変わりないんだけど、登録の部分
ターゲットがstageだったのをthisに変更になる。
仕組みがあまり解ってないんだが、ConextMenuクラスってのがあって、それを使う。
flash.ui.ContextMenu
参考URL:http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/ui/ContextMenu.html
ContextMenu オブジェクトは、特定のボタンやムービークリップ、テキストフィールドオブジェクト、またはムービー全体に関連付けることができます。この場合は、Button クラス、MovieClip クラス、TextField クラスの menu プロパティを使用します。menu プロパティの詳細については、Button.menu、MovieClip.menu、および TextField.menu を参照してください。
なんか、この説明見てるとステージにも適用されてもよさそうなのにね。
まずは、ここのContextMenu()メソッドで、ContextMenuオブジェクトを作成。
ビルトインアイテムの設定は、ContextMenuBuildInItemsクラスのプロパティを使う。
参考URL : http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/ui/ContextMenuBuiltInItems.html
設定をしたら、最後に関連付け。
何に対して関連付けしたらいいの?という疑問。
どうやらIntaractivObjectという抽象クラスがあって、サブクラスにDisplayObjectContainer, SimpleButton, TextFieldを持っており、そのクラスのcontextMenuプロパティを使って設定している模様。
ってさぁ、StageってDisplayObjectContainerを継承してて、contextMenuプロパティもあるのになんでぇ〜?って感じなんですけど。
で、スプライトには設定できるようなので、ステージサイズの透明な図形を描画したスプライトをメインに動的配置してみたら、静的に配置したボタンが反応しなくなったという罠orz
で、検索しまくって出てきたのが、thisターゲットだった。
thisってなんだ?
まぁ、当たり前ですけど、trace(this)ってかいたら
Object MainTimeline
うんうん、だよねー。
よくわからんけど、Objectには設定できるらしい(謎)。