2010年07月19日

コンテキストメニューを変更する

覚書

ステージを右クリックしたときのコンテキストメニューの変更方法


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には設定できるらしい(謎)。
posted by K at 15:39| Comment(0) | スクリプト | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。