dポイントプレゼントキャンペーン実施中!

Flashのキーイベント処理でなかなか不具合が取れず、困っています。
よろしくお願いします。

今作っているFlashは1つのデータ内に複数のページが存在し、ページごとにキーイベント処理内容が異なる仕様のため、それぞれにキー処理を行っています。
内容は、下のようなスクリプトを書いています。

-<ページ(1)でのクリアキー判定>----------------
var Key_object = new Object();
Key_object.onKeyDown = function(){
code = Key.getCode();
if(code == 46){
//終了処理
}
}
Key.addListener(Key_object);
-----------------------------------------------

-<ページ(2)でのクリアキー判定>----------------
var Key_object2 = new Object();
Key_object2.onKeyDown = function(){
code2 = Key.getCode();
if(code2 == 46){
//ページ(1)へ戻る処理
gotoAndPlay("page1");
}
}
Key.addListener(Key_object2);
-----------------------------------------------

ですが、上の処理だとページ(2)でクリアキーを押した時にページ(1)に戻ってほしいのに、何故かページ(1)のクリアキー判定まで行われてしまい、終了処理がなされてしまいます。

この件についての原因と打開策が知識の乏しい私では見当たりません。

また、違う人に聞いたところ「ページ(2)でのクリアキー判定の方はイベントリスナーを使わずにキー判定を実装して」といわれました。
このイベントリスナーを使わずにクリアキーの判定を実装する方法がわかりません。


どなたか、上のスクリプトでの不具合原因や打開策、また「イベントリスナーを使わないクリアキーの判定方法」が分かる方、いらっしゃいませんでしょうか?

A 回答 (1件)

ご質問は2つですか?



-------------------------------------
> 故かページ(1)のクリアキー判定まで行われてしまい、

delete でイベントリスナーのメソッドは削除できると思います(多分)。
フレーム2 に行ったときとか,その前で。

delete Key_object.onKeyDown;

「イベントハンドラメソッドはdeleteで消せ!」
http://f-site.org/articles/2004/05/22140833.html


------------------------------------
> 「ページ(2)でのクリアキー判定の方はイベントリスナーを使わずにキー判定を実装して」

これは古来からある方法(Flash1くらいからある方法)で,
何でも良いのでボタン(ボタンシンボルのインスタンス)を作成して,
そのボタン自体に,

on (keyPress "<Delete>") {
// 何かの処理
}

のように書けばできます。

ボタンが見えて困る場合は透明な塗りをボタンにするとか,
ボタンのアルファを 0 にするとか,
ステージ外の見えない場所にボタンを置くとか,
背景画像の下のレイヤーにボタンを隠すとかとかとか…
そんな方法で誤魔化します。

昔(というかつい最近まで,というか携帯などは今でも),キーの判定は,
キークラスは使用せずに,
ボタンの on (keyPress) ハンドラで取っていました(います)。
    • good
    • 0
この回答へのお礼

「Flashのキーイベント処理について」の丁寧な回答、本当にありがとうございました。
しかも厚かましくも二つの質問に答えていただいてしまって恐縮しきりです。

一つ目のイベントハンドラを消す方法では何故か不具合が解消されませんでした。。。すみません。
何か別の原因があるのでしょうか・・・?

ですが、on (keyPress "<Delete>")を実行すると難なくクリアできました!
このon (keyPress "ボタン処理")の方法は知っていたのですが、クリアキーの記述方法が"<Delete>"だと知らなかったために(てっきり<clear>かと思って記述したこともありましたが、もちろん実行されず・・・)今回のようにキーコード値の"46"を拾う方法を取っておりました。

本当にありがとうございました!
大変助かりました!

お礼日時:2008/06/25 09:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!