トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     ネストされたMC内でコンテキストメニューが動作しない
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
Airmax
Åê¹ÆNo.2068
投稿日時: 2003-12-11 10:36
新米
居住地:
投稿: 4
使用環境:
ネストされたMC内でコンテキストメニューが動作しない
よろしくお願いします。

コンテキストメニューを使用したアプリケーションを制作しているのですが、
行き詰まってしまったので、御知恵をお貸しください。



症状:
ネストされたムービークリップ内に設定しコンテキストメニューが有効にならずに、
デフォルトのコンテキストメニューが表示されてしまう。



症状の特定方法:
以下の操作をした場合に、上記の症状が発生しました。

1) ステージ上にMenuMCというインスタンス名のムービークリップを作成し、任意の短形を描く。
2) MenuMCのタイムラインに以下のスクリプトを記述する。

// コンテキストメニュー
myMenu = new ContextMenu();
myMenu.hideBuiltInItems();
myMenu.customItems.push(new ContextMenuItem("MenuMC",myMenuHandler));
this.menu = myMenu;
trace(this.menu.customItems[0].caption);
myMenu.onSelect = function(obj,menu) {
trace(obj + "+" + menu);
}

3) この状態でプレビューすると、短形では正しくコンテキストメニューが表示され、
  customItems[0].captionも正しく出力される。
4) MenuMCをさらにムービークリップ化し、NestMCというインスタンス名を設定する。
5) プレビューすると、出力は正しく行われるが、コンテキストメニューが表示されない。

6) NestMCのタイムラインに以下のスクリプトを記述する。

// コンテキストメニュー
myMenu = new ContextMenu();
myMenu.hideBuiltInItems();
myMenu.customItems.push(new ContextMenuItem("NestMC",myMenuHandler));
this.menu = myMenu;
trace(this.menu.customItems[0].caption);
myMenu.onSelect = function(obj,menu) {
trace(obj + "+" + menu);
}

7) この状態でプレビューするとtrace()は正しく行われ、両方のcaption名が出力されるが、
  コンテキストメニューはNestMCの物しか表示されない。



構造:
ステージ

NextMC

MenuMC

任意の短形



現状:
原因が「ネストされたこと」以外にはまったく思いつきません。
ネストされたムービークリップ内ではonSelectは受け取れないのでしょうか?
よろしくお願い致します。


環境
Windows 2000 Pro
Flash MX 2004 Pro
プレビュープレイヤーバージョン 7.0.14.0
Airmax
Åê¹ÆNo.2105
投稿日時: 2003-12-12 15:11
新米
居住地:
投稿: 4
使用環境:
Re: ネストされたMC内でコンテキストメニューが動作しない
以下のスクリプトで検証しましたが、結果は以下のようになりました。
1) メニューは正しく設定されている
2) イベントハンドラも正しく設定されている
3) ネストされると親オブジェクトのonSelectのみ発生する


// コンテキストメニューの生成
myMenu = new ContextMenu();
// ビルドインアイテムを隠す
myMenu.hideBuiltInItems();
// メニューを追加
myMenu.customItems.push(new ContextMenuItem("メニューのアイテム",myMenuHandler));
// このオブジェクトのmenuに登録
this.menu = myMenu;
// このオブジェクトにイベントハンドラを登録
this.menu.onSelect = function(obj,menu) {
	// イベントの発生確認
	trace(obj + " でイベント発生");
}
function myMenuHandler(obj,menu) {
	// 選択されたメニューの確認
	trace(menu.caption + " のメニューが選択されました");
}

// 確認
trace(this.menu.customItems[0].caption + " のキャプションは存在します");
trace(this + " のイベントハンドラ " + this.menu.onSelect + " は存在します");


根本的に記述方法がおかしいのか、バグのような気がするのですが、どうでしょうか・・・。
バグのようならば、マクロメディアに報告してみようかと思います・・・。


野中文雄
Åê¹ÆNo.2160
投稿日時: 2003-12-15 4:47
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ネストされたMC内でコンテキストメニューが動作しない
親MovieClipのコンテクストメニューだけが表示されるというより、メインのタイムラインに配置していない(ネストされた)MovieClipにコンテクストメニューが設定できないようです。Flash MX 2004 7.0.1/MacOS X.2.8 & Windows XP (SP1)で再現しました。
引用:
Airmaxさんは書きました:
1) メニューは正しく設定されている
2) イベントハンドラも正しく設定されている
3) ネストされると親オブジェクトのonSelectのみ発生する
// コンテキストメニューの生成
myMenu = new ContextMenu();
// ビルドインアイテムを隠す
myMenu.hideBuiltInItems();
// メニューを追加
myMenu.customItems.push(new ContextMenuItem("メニューのアイテム",myMenuHandler));
// このオブジェクトのmenuに登録
this.menu = myMenu;
// このオブジェクトにイベントハンドラを登録
this.menu.onSelect = function(obj,menu) {
	// イベントの発生確認
	trace(obj + " でイベント発生");
}
function myMenuHandler(obj,menu) {
	// 選択されたメニューの確認
	trace(menu.caption + " のメニューが選択されました");
}

// 確認
trace(this.menu.customItems[0].caption + " のキャプションは存在します");
trace(this + " のイベントハンドラ " + this.menu.onSelect + " は存在します");

記述に誤りはないと思います。仕様といわれる恐れもあるものの、一応報告された方がよいでしょう。私も別途確認してみます。
引用:
根本的に記述方法がおかしいのか、バグのような気がするのですが、どうでしょうか・・・。
バグのようならば、マクロメディアに報告してみようかと思います・・・。


----------------
 

森 巧尚
Åê¹ÆNo.2161
投稿日時: 2003-12-15 10:37
モデレータ
居住地: 宝塚
投稿: 650
使用環境:
.5/CS4/Safari3
XP+2000//IE6
Re: ネストされたMC内でコンテキストメニューが動作しない
引用:
記述に誤りはないと思います。仕様といわれる恐れもあるものの、一応報告された方がよいでしょう。私も別途確認してみます。

どうもバグっぽいですね。
僕は最初「ムービークリップを入れ子にしたときのonReleaseの動き」に似ていたので、「子供のMCよりも親のMCの方が先に反応してるだけ」かなあと思っていたのですが、親のMCにコンテキストメニューを割り当てていなくても入れ子の子供MCはコンテキストメニューが動かないですね。


----------------
森 巧尚
http://www.ymori.com

Airmax
Åê¹ÆNo.2170
投稿日時: 2003-12-15 14:42
新米
居住地:
投稿: 4
使用環境:
Re: ネストされたMC内でコンテキストメニューが動作しない
野中様、森様、ご確認ありがとうございます。

こちらでも引き続き検証を行っていたのですが、
ネストした場合には内部にボタンが存在すれば、
そのヒットエリア内でonSelectが検知できるみたいです。


まだ正確には分かりませんが、以下のような感じになるのでしょうか。

・非ネスト時のMCではそのシェイプが検知領域になる。
・ネスト時には内部のボタンインスタンスのヒットエリアが検知領域


どうやら検知領域がポイントになりそうですね。
引き続き検証してみます。


それにしても、マクロメディアのバグ報告用の記入フォームサイズは、
「操作ステップを書きなさい」と言っている割には小さいですね・・・・。


野中文雄
Åê¹ÆNo.2171
投稿日時: 2003-12-15 15:10
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ネストされたMC内でコンテキストメニューが動作しない
10へぇ? 気づきませんでした。そのとおりですね。
引用:
Airmaxさんは書きました:
ネストした場合には内部にボタンが存在すれば、
そのヒットエリア内でonSelectが検知できるみたいです。

結果としては、そうなりますね。ただ、MovieClip.menuプロパティに設定したContextMenuのヒット領域が、内包するButtonインスタンスで決まるというのは仕様として問題です。

MovieClipに(ボタン用の)onアクションを設定しても、MovieClip.hitAreaプロパティの指定をしても、コンテクストメニューは表示されませんでした。バグの可能性が高まったと考えます。
引用:
まだ正確には分かりませんが、以下のような感じになるのでしょうか。

・非ネスト時のMCではそのシェイプが検知領域になる。
・ネスト時には内部のボタンインスタンスのヒットエリアが検知領域


----------------
 

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops