痔になりやすい生活習慣とは?

お世話になります。
AS2.0の初心者です。
ページAにムービークリップタイプのボタンbuttonAとbuttonBがあります。そして、ページCがあります。
this.gotoAndStop(1);白
this.gotoAndStop(2);黒
this.gotoAndStop(3);白

仕様としては、
最初ページには、buttonAボタンしかありません。
この状態でEnterキーを押すと、buttonAが反応しページAで結果がでます。そして、buttonAボタンは見えなくなり、buttonBボタンが見えます。
ここで、もう一回Enterキーを押すと今度はbuttonBが反応し、ページCに移動します。

でも、実際は、最初Enrterキーを押すと、buttonAボタンだけではなく、buttonBボタンも一緒に反応しちゃって、一気にページC移動します。こうなると結果を見ることができません。

ここで質問ですが、最初Enterキーを押した場合、buttonAボタンだけ、反応させる方法はありませんか?そして、2度目のEnterキーを押すと今度はbuttonBボタンだけ反応する、、、

以下は、そのソースです。どこが間違っていますか。よろしくお願いします。

●大元アクションスクリプト
buttonA._visible=true;
buttonB_visible=false;

buttonA.onKeyDown = function() {
if (Key.isDown(Key.ENTER)) {
//ページAに結果出力
buttonA._visible=false;
buttonB_visible=true;
}
}

●buttonAのアクションスクリプト
// 何かキーが押された時
onClipEvent (keyDown) {
if (Key.getCode() == 13) {
this.gotoAndStop(2);
}
}
// 何かキーが放された時
onClipEvent (keyUp) {
if (Key.getCode() == 13) {
this.gotoAndStop(1);
}
}


●buttonBのアクションスクリプト
// 何かキーが押された時
onClipEvent (keyDown) {
if (Key.getCode() == 13) {
this.gotoAndStop(2);
}
}
// 何かキーが放された時
onClipEvent (keyUp) {
this.gotoAndStop(1);
if (Key.getCode() == 13) {
//ページCへ移動
}
}

このQ&Aに関連する最新のQ&A

A 回答 (1件)

buttonA も buttonB もキーに関係しない見せかけだけのものですから,


私なら次のようにすると思います。

まず各ボタンムービークリップ buttonA と buttonB 自体に直接書いたスクリプトを全て消します。
そしてフレームに書くスクリプトを次のようにします。

--------------------------------
// 各ボタンMCの表示非表示初期設定
buttonA._visible = true;
buttonB._visible = false;

// フラグ(またはカウンター)を用意
var keyFlag:Boolean = false;

// キー監視用にするオブジェクト「myKey」を作成
var myKey:Object = new Object();

// キーをダウンしたときの動作
myKey.onKeyDown = function():Void {
//
if (Key.getCode() == 13) {
// 各ボタンMC内のタイムライン操作
buttonA.gotoAndStop(2);
buttonB.gotoAndStop(2);
}
};

// キーをアップしたときの動作
myKey.onKeyUp = function():Void {
//
if (Key.getCode() == 13) {
// 各ボタンMC内のタイムライン操作
buttonA.gotoAndStop(1);
buttonB.gotoAndStop(1);
// 各ボタンMCの表示非表示を切り替える
buttonA._visible = !buttonA._visible;
buttonB._visible = !buttonB._visible;
//
// もし keyFlag が false であれば
if (!keyFlag) {
// _root をフレーム「pageB」に進めて再生
_root.gotoAndPlay("pageB");
// keyFlag を true にする
keyFlag = true;
//
// keyFlag が true であれば
}else{
// _root をフレーム「pageC」に進めて再生
_root.gotoAndPlay("pageC");
// keyFlag を false にする?
keyFlag = false;
}
}
};

// 「myKey」をKeyクラスのリスナーとして登録
Key.addListener(myKey);
--------------------------------


単フレームのスクリプトにするために
buttonA と buttonB を両方とも出没させた上で_visible を変える
という妙技をしているのではないのでしょうか?
それならスクリプトの場所も一ヶ所の方が管理しやすいでしょう。


また最初にも書きましたが,
キーダウン/アップはボタンとは関係ないのです。
いかにも関係あるかのように見せる手品を作っているわけですよね?
手品師が自分の作った手品にはまってどうするんですか(笑)。

>// 何かキーが放された時
>onClipEvent (keyUp) {
>  if (Key.getCode() == 13) {
>    //ページCへ移動
>  }
>}

これだと
buttonA に書いても buttonB 書いてもは関係なく,
Enter キーが放されたときにページCへ移動します。


キーとボタンとは関係がないので,
上のスクリプトではキー監視役を buttonA/B ではない myKey にさせています。
これを作らなくても
buttonA.onKeyDownp~ や buttonA.onKeyUp~ でもできます。
しかしそうするとやはり buttonA に惑わされそうな自分が出て来るので,あえて myKey を用意しています。
    • good
    • 0
この回答へのお礼

へぇ~~凄いです、、、
こんなやり方もあるなんで、、(笑)
本当にいい勉強、いい参考になりました!
詳細にわかりやすく説明してくださってありがとうございます。
これからもよろしくお願いします!

お礼日時:2010/02/04 23:34

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


人気Q&Aランキング