- ベストアンサー
MCに設定したonPressを他のMCのASから実行する方法
- MCに設定したonPressを他のMCのASから実行する方法について質問です。
- ステージ内に無数に配置したMCにonPressを記載しており、それをキーダウンのトリガーで実行したいです。
- MC.onPressの返す値をTraceしてみたところ、Undefindでした。どうすれば実行できるでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
書かれていることに若干不明瞭な点がありますが, > 無数に配置したMCに onPress にて、 > ASを記載しておいたのですが、 つまり, onPress ( Movieclip.onPress = function(){} ) を使用した。 という条件でしたら, 普通に関数を呼び出すように,() 付きで関数を呼び出すか, Fnction クラスの call メソッドを使えば一応できます。 ここで言う call メソッド とは, 昔からある使用を避ける(半使用禁止)の call関数 の方ではなくて, Flash MX からある,Function.call メソッド の方です。 > 別のMCからキーダウンをトリガーとして、onPressを実行させたい と書かれている意味が今一つわかりませんが, 例えばステージ上に 「MC1」 というインスタンス名のムービークリップを用意して, その「MC1」が存在するタイムラインのフレームに次のように書いておき, ------------------------------- // MC1 の onPress イベント関数の定義 _root.MC1.onPress = function() { trace("こんにちは!"); }; ------------------------------- 「MC1」とは別のムービークリップを作成して, そのムービークリップに,普通に, ------------------------------- on (keyPress "1") { _root.MC1.onPress(); } ------------------------------- と書くか, callメソッドを使って, ------------------------------- on (keyPress "1") { _root.MC1.onPress.call(); } ------------------------------- と書いてムービープレビューすれば, キー1 を押したとき, trace("こんにちは!"); が実行されます。 > 別のMCからキーダウンをトリガーとして、onPressを実行させたい これを真に受けると,上の回答のようになります。 しかし, ムービークリップに書いた on (keyPress "1") ではなく, Movieclip.onKeyDown の方は, は通常,フォーカスの問題で動作はしないので普通は使いません。 キークラスのメソッドでします。 ですから, ムービークリップに on (keyPress "1") を書くのではなく, フレームに書く場合は,キークラスのメソッドで, ------------------------------- // MC1 の onPress イベント関数の定義 _root.MC1.onPress = function() { trace("こんにちは!"); }; // // Key リスナーオブジェクトの作成 var keyListener = new Object(); // onKeyDown イベント関数の定義 keyListener.onKeyDown = function() { // もしキーが 1 であれば if (Key.getCode() == 97) { // MC1 の onPress イベント関数を call _root.MC1.onPress.call(); } }; // Key オブジェクトに登録 Key.addListener(keyListener); ------------------------------- とすれば, 一応はできます。 ヘルプを探してみると似たような形のものがここにありました。 CONTROL (Key.CONTROL プロパティ) http://livedocs.macromedia.com/flash/8_jp/main/00002298.html === ※注意 ======================== 以上は, > 無数に配置したMCに onPress にて、 > ASを記載しておいたのですが、 つまり, onPress ( Movieclip.onPress = function(){} ) を使用したというのが条件です。 そうではなく, ムービークリップに on (press) {} と書いた場合, 普通に () 付きで呼び出すことも, call メソッドで { }内は実行出来ません。 どちらにしても, スクリプトが,Function オブジェクト になっているものでないと呼び出せません。 他の方法でもダメでしょう。 ダメなので,昔は call関数(Fnction クラスの call メソッドではない今や半使用禁止の方)があったのです。
お礼
ムービークリップに on (press) {} と書いていました。 今回は、手動で100近くあるMCのASを書き直したいと思います。 次からは、必ずfunctionの方を使用したいと思います。 この度は、大変解りやすいご説明 本当に有難うございました。