プロが教える店舗&オフィスのセキュリティ対策術

FLASH初心者なのですが、ちょっとしたクイズを作らなくてはいけなくて
ActionScriptに挑戦しています。

rootにひとつのMCがあります。
このMCのタイムラインにはフレームが7個あり
このフレームの移動を「Spaceキー」で動かしたいため
rootのタイムラインに下記のようなscriptを書きました。

-------------------------------------
onClipEvent (enterFrame) {
this.gotoAndStop(1);
if (Key.getCode() == Key.SPACE){
this.gotoAndStop(2);
}
}
-------------------------------------

このコードで「スペース」を押すと1フレームから2フレームへの
移動はできましたが、「スペースを押すたびに次のフレームにいってほしくて、
フレーム7ではストップしてほしい」という動作をさせるためには
どうしたらいいのでしょうか?

loopとかif...else if...などの構文がよくわからないなりに
試したのですが、うまくいきませんでした。
分かられる方助けてください、よろしくお願いします。

A 回答 (1件)

loopとかif...else if...などはあまり関係ないような...。


それより,
具体的に何をしたときにどうしたいのかということをしっかりイメージさせることと,
フレーム移動のスクリプトをもう少し知ることと,
onClipEvent の使い方ももう少し... と言ったところのように思います。


文章から推測して(推測できない部分もありますが),
こんな感じでしょうか↓?

----------------------------------------
// このムービークリップが表示されたとき
onClipEvent (load) {
// 最初のフレームでストップ
this.stop();
// 変数 flag を 0 にする
flag = 0;
}
// どれかキーを押したとき
onClipEvent (keyDown) {
// スペースキー でなおかつ flag が 0 であれば
if (Key.getCode() == Key.SPACE && flag == 0) {
// 次のフレームへ
this.nextFrame();
// flag を 1 にする
flag = 1;
}
}
// どれかキーを離したとき
onClipEvent (keyUp) {
// flag を 0 に戻す
flag = 0;
}
----------------------------------------

 // 次のフレームへ
 this.nextFrame();

や,上記スクリプトにはありませんが,

 // 前のフレームへ
 this.prevFrame();

を使うと簡単です。

しかし,どういう動きをさせたいのか今ひとつわかりません。
わかるのは フレーム7 ではストップするということだけです。

変数 flag を用意したのは,
スペースキーを押し続けると,nextFrame(); が連続実行されてしまうからです。
1回押すたびに絶対に1フレーム進めるだけでしたら,
上のような感じになります。

連続実行された方が良い場合は,
flag など用意する必要はありませんから次のようになります。

----------------------------------------
// このムービークリップが表示されたとき
onClipEvent (load) {
// 最初のフレームでストップ
this.stop();
}
// どれかキーを押したとき
onClipEvent (keyDown) {
// スペースキー でであれば
if (Key.getCode() == Key.SPACE) {
// 次のフレームへ
this.nextFrame();
}
}
----------------------------------------

すごくシンプルですね。
oopとかif...else if...などは関係ないでしょう。

結局,この2つ目のスクリプトがベースで,
もっと何かをする場合は何かを追加すれば良いということになります。



もし,
最初のスクリプトを変更するとして,
Shift キー を押したときはバックさせたいのでしたら,
次のようになります。

----------------------------------------
// このムービークリップが表示されたとき
onClipEvent (load) {
// 最初のフレームでストップ
this.stop();
// 変数 flag を 0 にする
flag = 0;
}
// どれかキーを押したとき
onClipEvent (keyDown) {
// flag が 0 のときで
if (flag == 0) {
// スペースキー であれば
if (Key.getCode() == Key.SPACE) {
// 次のフレームへ
this.nextFrame();
// シフトキー であれば
} else if (Key.getCode() == Key.SHIFT) {
// 前のフレームへ
this.prevFrame();
}
// flag を 1 にする
flag = 1;
}
}
// どれかキーを離したとき
onClipEvent (keyUp) {
// flag を 0 に戻す
flag = 0;
}
----------------------------------------


こんな感じになると,
else if が出てきます。
しかし,文法とかそういう問題より,
「何をしたときどう動かしたいのか」を明確にしてください。
それをスクリプト文章にするだけで,
「何をしたときどう動かしたいのか」が明確でなければ,
スクリプト文は書けません。
    • good
    • 0
この回答へのお礼

sassakun様
ご丁寧なご回答ありがとうございました。
私のしたいことが言葉で明確に伝えられずすみません。
でも、ひとつめのコードをコピペして貼りましたら
思っていたとおりに動きました。
本当に助かりました!!

お礼日時:2007/04/10 12:44

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