MMOO'S GAMES

脱出ゲームの作り方 (中級?) 便利なAS

脱出ゲーム作者のみなさん、
ゲットするアイテムにいちいち、同じ作業の命令を書き込んでませんか?
(私は、今まで、やってました。)


①ゲットしたというフラグを立てる。
②メイン画面から、ゲットしたアイテムを消す。
③アイテム選択画面に、ゲットしたアイテムを表示する。
④アイテム詳細画面を、呼び出す。
⑤「ゲットしたよ」というコメントを、呼び出す。
⑥音を鳴らす。

などなど、一連の作業命令全部を
ゲットするアイテムごとに、同じことをいちいち書くのは面倒じゃないですか?
コピペするにしても、アイテムの名前を書き替えなきゃいけない部分が複数あって
うっかりミスで
鉛筆をクリックしたはずなのに、隣の消しゴムが消えて、「ノートをゲットした!」などと表示される
・・・なんてヒドイことにまではならなくても、大変ですよね

これら全部が、一言で書けちゃうスクリプトがあるの、ご存知でした?
ご存知でしたら・・・
  「今さら何を。馬鹿だなぁ」とスルーしちゃってください><
ご存知じゃなかったら・・・
  おこがましいことですけれど、私がここで ご紹介しますので、是非これから使ってみてください!

関数定義でミス激減!

まず、前提として・・・
rootには、次の4つの スプライト(parafla)/ムービークリップ(adobe Flashではそう言うのかな?)
が配置してあるとします。
(1)メイン画面用 --インスタンス名:
main
(2)コメント画面用 --インスタンス名:
comment
(3)アイテム選択画面用 --インスタンス名:
item
(4)アイテム詳細画面用 --インスタンス名:about

それで、
①アイテム「鉛筆」をゲットしたというフラグは、_root.pencil = false;と表すことにします。
     ※ゲットしたらtrue、ゲットしていなかったらfalseとすると、
      「ゲットするまで見える、ゲットしたら見えなくなる」という命令は
      
if(_root.pencil == false){
           _visible = true;
       }else{
          _visible = false;
      }
     といっぱい書かなくてはならなくなりますが、
     ゲットしたらfalse、ゲットしていなかったらtrueという風にしておくと
     同じ命令が
       _visible = _root.pencil;
     とシンプルにできることになって、便利かと思います。

②③アイテム選択画面・メイン画面に置かれているアイテムのスプライト/ムービークリップの
   インスタンス名もpencilにしておきます。
④アイテム詳細画面は、_root.about.gotoAndPlay("pencil");で呼び出せるようにしておきます。
   (paraflaで言えば、ラベル名がpencilになっている状態。)
⑤コメントは、
  _root.message = "鉛筆をゲットしたよ!";
  _root.comment.gotoAndPlay("display");

  のような形で命令されるよう設定しておきます。

さて、前提を確認したところで本題です。

まず、rootの一番最初に置くスクリプト
(皆さん、タブキー禁止の_focusrect = false;などを置いてらっしゃいませんか?
それと同じ場所に書いて大丈夫です。)
に、以下のことを書きます。(いっぱい書かなきゃいけないのはココだけです!)
function kakutoku (a,b) {
 _root[a] = false;                        //① _rootと[a]の間にピリオド(?)は入りません。
 _root.main[a]._visible = false;                     //②
 _root.item[a]._visible = true;                       //③

 _root.about.gotoAndPlay(a);                         //④
 _root.message = b + "をゲットしたよ!";         //⑤
 _root.comment.gotoAndPlay("display");       //⑤
 _root.koukaon.attachSound("sound_item"); //⑥ 私はサウンドオブジェクト(parafla用語?)
 _root.koukaon.start("sound_item");      //⑥ を使用しているのでこうなります。
}

そして、後は、鉛筆の絵のスクリプトに
on(release){
 _root.kakutoku("pencil" , "鉛筆");
}

と書くだけ!
どのアイテムにも、これだけのシンプルなスクリプトで済むんです!!

もし、アイテム詳細画面(about)では
_root.about.gotoAndPlay("鉛筆");というように日本語を使いたい場合に

(パラフラで言えば、ラベル名に日本語を使いたい場合には)
function kakutoku (a,b) {
 _root[a] = false;                                //① _rootと[a]の間にピリオド(?)は入りません。
 _root.main[a]._visible = false;                     //②
 _root.item[a]._visible = true;                       //③
 _root.about.gotoAndPlay(b);                         //④
 _root.message = b + "をゲットしたよ!";         //⑤
 _root.comment.gotoAndPlay("display");       //⑤
 _root.koukaon.attachSound("sound_item"); //⑥ 私はサウンドオブジェクト(parafla用語?)
 _root.koukaon.start("sound_item");      //⑥ を使用しているのでこうなります。

}

とすればOKです

もし、コメントが「pencilをゲットしたよ!」とアルファベットでいいのであれば
function kakutoku (a) {
 _root[a] = false;                                //① _rootと[a]の間にピリオド(?)は入りません。
 _root.main[a]._visible = false;                     //②
 _root.item[a]._visible = true;                       //③
 _root.about.gotoAndPlay(a);                         //④
 _root.message = a + "をゲットしたよ!";         //⑤
 _root.comment.gotoAndPlay("display");       //⑤
 _root.koukaon.attachSound("sound_item"); //⑥ 私はサウンドオブジェクト(parafla用語?)
 _root.koukaon.start("sound_item");      //⑥ を使用しているのでこうなります。
}


on(release){
 _root.kakutoku("pencil");
}

で済んじゃいます

これを使えば、itemの中のスプライト/ムービークリップに書くのは
onClipEvent(load){
   this._visible = false; 
}
だけでOK!全てのアイテムについて、同じになる(_root.pencilのような、個別のものを使わなくていい)
ので、ミスが減りますよね!

main
の中のスプライト/ムービークリップも、
onClipEvent(load){
 this._visible = _root.pencil;
}
だけでOK!
-
onClipEvent(enterFrame){
   this._visible = _root.pencil; 
}
と、二つ書く必要はなくなります!
(アイテムをゲットした後には戻ってこない画面ならば、
 onClipEvent(load)~すら書かなくていいですよね!)

ちなみに、_root.pencil、_root.pencil
_got_root.pencil_usedなど、使い分けたい場合は
 _root[a] = false;
 _root[a + "_got"] = true; 
 
_root[a + "_used"] = false; 
のようにすればOKです。


「同じことを何度も書く」というのは
・アイテムゲット
・アイテム使用(アイテム欄のアイテム画像が薄くなる・アイテム選択状態解除・使用したというフラグ立て)
・パスワード入力ボタン(パスワードの桁数分のボタンに、同じようなことを書く。)
などなど、結構あるかと思いますが、それら全てに、使えます!

便利でしょ?じゃないですか??
私みたいな、ウッカリ者には、大助かり!
よかったら、是非、皆さんも使ってみてください!!

こんなの常識・・・だったら、本当にすみません>< 

もし、ご指摘・ご質問などありましたらこちらへお願いします☆
「もっと便利なスクリプトがあるぞ~」という情報も大歓迎です!!

Create a Free Website