今回はマップの中の家の中にヒヨコが入れ、そこでナイフを手に入れると
ナイフが投げれるようになる!! と、いう内容のムービーを作ってみましょう!
前回同様、わかり易いようにスクリプトなしFLAファイルをダウンロードして
ください。それにそって説明します。
スクリプトなしFLAファイル(ZIP圧縮) Lesson6>>
では、lesson6_noscript.flaを開いてください。
今回は大きく3つの場面に別れています。最後の2つは画面切り替えの
ためのムービーです。ドアの開く音を家に入る時だけに再生したかった
ので2つに分けました。
- フレームラベル"start"
: ヒヨコはナイフを投げれない、右上の
家に入れるようになっている。
- フレームラベル"inHouse"
:
家の中。ナイフを取るとヒヨコがナイフを投げれるようになる。
- フレームラベル"stage2"
:
家から出たときの画面。ヒヨコはナイフを投げれるようになっている。
- フレームラベル"doorOpen"
: 家に入る時のドアの開く音が入
ったムービー(サウンドのみ)。
- フレームラベル"stair"
: 階段を降りる(登る)時の音が入った
ムービー(サウンドのみ)。
その青い四角をクリックしてください。プロパティをみると、house1と
という名前のムービークリップであることがわかります。
これが家に入るためのしかけになります。ヒヨコがこのムービークリッ
プにヒットすると、家に入るフレームに移動するように設定します。
ムービークリップ "house1"(メインタイムラインのレイヤー”入り口”内):
ムービークリップアクション
onClipEvent(enterFrame){
if(hitTest(_root.hiyo)) { _root.BGM.stop(); _root.hiyo.go = false; _root.gotoAndPlay("doorOpen"); }
}
|
>> スクリプト解説
onClipEvent(enterFrame){ このムービークリップがムービー内にある間下のスクリプトを実行
if(hitTest(_root.hiyo)) { このムービークリップがヒヨコのムービークリップとヒットしたら
_root.BGM.stop(); サウンドオブジェクトBGMをストップ
_root.hiyo.go = false; 変数goにfalseを代入
_root.gotoAndPlay("doorOpen"); ドアを出入りする時のフレーム”doorOpen”を再生
}
}
|
このスクリプトでは右の家に入るための仕掛けのムービークリ
ップ"house1"にヒヨコがヒットしたら、
1.家に入る時、ドアの開く音が再生されるように
_root.gotoAndPlay("doorOpen"); でフレーム移動、(この時
"doorOpen"(ドアの開く音)から"stair"(階段を降りる音)に続け
てフレームが移動します。)
2.BGMは止めたかったので_root.BGM.stop();でBGMを止め、
3.家に入った後も矢印キーを押し続けたままの人がいた場合、
ヒヨコが移動してしまい困るので、ヒヨコを動けなくするために変
数goにfalseを代入しています。
スクリプトは上から実行されるので、先にBGMを止めてヒヨコを
動けなくしてしまったほうがいいと思い、上の様な順番で書いて
います。一瞬で実行できるスクリプトなので順番はあまり影響
ないといえばないのかもしれませんが....

(3) 変数level の値によって移動するフレームを変える!!
(2)のスクリプトによって、ヒヨコがムービークリップ"house1"に
接触すると、フレーム"doorOpen"から"stair"の最後のフレーム
再生されます。(下図参照)
フレーム"stair"はナイフをゲットした後、家から出る時の階段の
音としても使うので、"stair"の最後のフレームに、家の中に入っ
たムービーかナイフをゲットした後、stage1にいくムービーかど
っちを再生するのか決めるためのスクリプトを書きます。
フレームラベル"stair"(メインタイムライン): 最後のフレーム
switch(level){ case 1:
this.gotoAndStop("inHouse"); break; case 2:
this.gotoAndStop("stage1"); break; }
|
>> スクリプト解説
switch(level){ switch文が実行される時に変数levelの値が
case 1: level = 1のとき
this.gotoAndStop("inHouse"); フレーム名"inHouse"でストップ
break; switch文から抜ける
case 2: level = 2のとき
this.gotoAndStop("stage1"); フレーム名"stage1"でストップ
break; switch文から抜ける
}
|
今回の新しい文法switch文です!!
はじめにちょこっと説明したように、変数levelはヒヨコのステータスによ
って数値を上下させる予定のものです。今のところlevel = 1 は初期状
態、 level = 2 はナイフを取った後の状態、と設定しています。
level = 1の時はまだナイフを取ってない状態なので家の中に入る時、
level = 2の時はナイフをとった後なので家の中から出る時、ということ
で上のようなスクリプトになっています。

(4)
家の中に入って.....
家の中に入ってしなければいけないこと。まずヒヨコの位置移動です。
下図のようにヒヨコは右の家から入ったのでこのままだとヒヨコは右上
に位置したままとなってしまいます。
フレームラベル"inHouse"(メインタイムライン): 1フレーム目
hiyo._x = 145; hiyo._y = 180; hiyo.gotoAndStop("back"); idou.start(); stop();
|
1行目と2行目でヒヨコの位置決定をしています。hiyo._xはヒヨコの
x座標、hiyo._yはヒヨコのy座標を指しますよね。
3行目で、もしヒヨコが変な方向を向いていると困るので、絶対ヒヨ
コが後ろを向いているようにするため、ムービークリップ"hiyo"内
のタイムラインのフレーム”back”(後ろ向きのヒヨコの絵が入って
いるフレームです)で停止するようにhiyo.gotoAndStop("back");を
入れておきました。
4行目、idouはサウンドオブジェクトです。階段を降りた後の’ティ
ロリン’って感じの音をスクリプトで鳴らしています。
で、とりあえずstop();です。
ここで同時にレイヤー"マスク"の中に入っているムービークリッ
プ"mask"が再生されます。このムービークリップは画面切り替
えのための真っ白な画面から家の画面にぼやーっと変わるよう
にするためのものです。
この画面をダブルクリックすると...
では、上図のようにメインのタイムラインにあるレイヤー"マスク"
の4フレーム目をクリックすると白い四角形の周りが青色のふち
で囲まれているのが見えると思います。その四角形をダブルクリ
ックしてください。ムービークリップ"mask"のタイムラインに移動
したと思います。(下図参照)
上の図のようにムービークリップ"mask"のタイムラインに移動します。
このタイムラインのレイヤー"action"の最後のフレーム(上図の
10フレーム目のところです)に重要な1行を記入します。
ムービークリップ"mask"内のタイムライン
:
レイヤー"action"の最終フレーム
_root.hiyo.go = true; stop();
|
家に入るためのしかけのムービークリップにヒットしたときに、ヒ
ヨコを操作できなくするために、変数goにfalseを代入しましたよ
ね。go = falseのままだとヒヨコは十字キーを押しても反応しま
せん。
このムービークリップが再生終わった時点で家の中の画面が
見えて、家の中のイベントをはじめたいので、このムービークリ
ップのタイムラインの最後に_root.hiyo.go = true; を書いて、再
びヒヨコを操作できるようにします。
これで家に入るときのイベントは終わりで、次はナイフをゲット
することによって次に進めるようにスクリプトを書いていきます。
(5)
家の中で.....
メインのタイムラインにもどってください。タイムラインが下図の
ようになったと思います。
次はムービークリップ"inside"の中でナイフをゲットしたら次の
イベントに進めるようにスクリプトを書いていきます。

今度は上図のようにメインのタイムラインにあるレイヤー"家の中"
の6フレーム目をクリックしてください。すると下図のようにニワトリ
とヒヨコとナイフがいる画面の周りが青色のふちで囲まれている
のが見えると思います。これがムービークリップ"inside"で、そ
の画面をダブルクリックしてください。 ムービークリップ"inside"
のタイムラインに移動したと思います。

この画面をダブルクリックすると...
上の図のようなムービークリップ"inside"の中のタイムラインに移動します。
レイヤー"action"の1フレーム目でヒヨコの動ける範囲を制限して、
(ヒヨコがニワトリの上にかぶってしまうと絵てきにおかしいので、
ヒヨコの動ける範囲が画面の下3分の2くらいに制限します。)
2フレーム目でナイフを取ったらナイフをゲットして喜ぶムービー
が再生されるようにしていきます。
ではまずヒヨコの動ける範囲をwithをつかって制限してみましょう!
ムービークリップ"inside"内のタイムライン :
レイヤー"action"の1フレーム目
with(_root.hiyo) {
if(_x < 0) { _x = 0; } else if (_x > 295) { _x = 295;
} else if(_y < 80) { _y = 80;
} else if(_y > 195) { _y = 195; } }
|
>> スクリプト解説
with(_root.hiyo) { ムービークリップ'hiyo'(以下MC"hiyo")の
if(_x < 0) { _x = 0; x座標が0より小さいとき、MC"hiyo"のx座標に0を代入 (ヒヨコの位置が0より小さいときは0の位置にもってこいってことです)
} else if (_x > 295) { _x = 295; x座標が295より大きいとき、MC"hiyo"のx座標に295を代入
} else if(_y < 80) { _y = 80; y座標が80より小さいとき、MC"hiyo"のy座標に80を代入
} else if(_y > 195) { _y = 195; y座標が195より大きいとき、MC"hiyo"のy座標に195を代入
}
}
|
このスクリプトによってヒヨコの動ける範囲が横は0pxから295px
まで、縦は80pxから195pxまでになります。
withを使うことによってムービークリップ"hiyo"のx座標、y座標を
それぞれ_root.hiyo._x、_root.hiyo._yと書かなければいけないところ
を_x、_yと書くだけですむので書くのが楽だし見やすいでしょ?
次に2フレーム目でナイフを取ったときにすること(アイテムゲット!
の音をならす、次のムービーにとばす)をスクリプトで書きます。
ムービークリップ"inside"内のタイムライン :
レイヤー"action"の2フレーム目
if(turugi.hitTest(_root.hiyo)) {
this.gotoAndStop("got"); _root.item.start(); _root.item_get.start(); } else {
this.gotoAndPlay(_currentframe - 1); }
|
>> スクリプト解説
if(turugi.hitTest(_root.hiyo)) { ムービークリップ'turugi'(画面上真ん中にあるナイフ)がヒヨコと接触したら、
this.gotoAndStop("got"); このタイムライン(ムービークリップ'inside'のタイムライン)のフレーム
名"got"で停止
_root.item.start(); サウンドオブジェクト'item'を鳴らす
_root.item_get.start(); サウンドオブジェクト'item_get'を鳴らす
} else { this.gotoAndPlay(_currentframe - 1); このタイムラインの今いるフレームの1つ前を再生 (この場合フレーム1(さっきヒヨコの動ける範囲を制限するスクリプトを 書いたフレーム)をさしていますね)
}
|
elseのときのthis.gotoAndPlay(_currentframe
- 1);という使い
方はフレームアクションで結構便利です。
この一個前のフレームに戻る。というのはフレームアクションで、な
んどもそのフレーム に書いているスクリプトを実行させたい時によく
使います。というのもフレームアクションはフレームが再生されたと
きだけにそのフレームに書いているスクリプトを実行するという仕組
みになっているからです。
ちょっと横みちそれましたが、これで家の中にいるときのヒヨコの動け
る範囲を制限でき、ナイフを取ったときに音を鳴らして、フレーム'got'
に移動できるようになりました。
(6)
ナイフを手に手に入れたー!!
と、いうことで次はナイフをゲットしてヒヨコが喜び、外に出れるように
なるようにしていきましょう。
1.ナイフを取ってヒヨコが喜ぶムービーを再生するには...
では、ヒヨコをダブルクリックしてください。(どこにいるヒヨコでもOK)
するとムービークリップ"hiyo"のタイムラインに移動します。レイヤー
"hiyo"を見ると、"getKnife"というフレームがあると思います。(下図
参照)
図いれる。
ちょっと再生するか手動でフレームを動かしてもらうとわかると思い
ますが、このフレームはヒヨコがナイフをとって喜んでいるムービー
になっています。これを家の中にあるナイフを取ったとき(ムービー
クリップ"turugi"とムービークリップ"hiyo"がヒットしたとき)に再生
するようにスクリプトを書けばいいわけです。
再びムービークリップ"inside"のタイムラインに戻ってください。(
どこかわからなくなった人は(5)の始め参照、またはライブラリの
中の"ナイフのもらえる家"をダブルクリック)
(5)でこのタイムラインのレイヤー"action"の2フレーム目で、ナ
イフとヒヨコがヒットしたら、 フレーム"got"で停止、というスクリプト
を書きました。と、いうことはナイフを取った瞬間フレーム"got"で
停止するということなので、このフレームでヒヨコが喜ぶムービー
を再生させるスクリプトを書きます。
ムービークリップ"inside"内のタイムライン :
フレームラベル"got"の1フレーム目
_root.hiyo.go = false;
_root.hiyo.gotoAndPlay("getKnife"); _root.level = 2;
|
>> スクリプト解説
_root.hiyo.go = false; ヒヨコが動けるかどうか制御するための変数goにfalseを代入
_root.hiyo.gotoAndPlay("getKnife"); ムービークリップ"hiyo"のフレーム"getKnife"を再生
_root.level = 2; ヒヨコのステータスを知る変数levelに2を代入
|
1行目:ナイフを取って喜んでいるムービーを再生しているときに、
矢印キーを押したままの人がいたらヒヨコが動いてしまうので、
_root.hiyo.go = false; で、矢印キーを押していてもヒヨコが動
かないようにしています。
3行目: (3)でフレームラベル"stair"(メインタイムライン)の最後の
フレームにlevelの値によって再生するフレームを変えるという命
令をswitch文を使って書きましたよね。ここでナイフを取ったので
ヒヨコはstage1に行けることになるのでlevelに2を代入しています。
2.ヒヨコが喜ぶムービーを再生後...
ナイフを取って喜ぶ場面が再生されました。このあとヒヨコは再
び十字キーで動かせるようになり、ナイフを投げれるようになり
ます。これらを実行させるためのスクリプトを書いていきましょう。
ではもう一度ヒヨコをダブルクリックして、ムービークリップ"hiyo"
のタイムラインに移動してください。喜ぶムービー再生後すぐさっ
き説明したような状態にしたいので、レイヤー"hiyo"のフレーム
"getKnife" の最後のフレームにスクリプトを書きます。
ムービークリップ"hiyo"内のタイムライン :
フレームラベル"getKnife"の最終フレーム
_root.hiyo.go = true;
_root.hiyo.gotoAndStop("front"); _root.hiyo.num = 4; _root.inside.gotoAndPlay("out"); _root.knifeMC.knife = true;
|
>> スクリプト解説
_root.hiyo.go = true; ヒヨコを矢印キーで動かせるようにするために変数goにtrueを代入
this.gotoAndStop("front"); ムービークリップ"hiyo"のフレーム"front"を再生
_root.hiyo.num = 4; 喜ぶムービー終了後、ヒヨコは前を向いているので変数numに4を代入(4は前向き)
_root.inside.gotoAndPlay("out"); ヒヨコが再び外に出れるための出口が出現(見えませんが)するフレーム"out"を再生 _root.knifeMC.knife = true; ナイフをゲットしたのでナイフを投げれるようにするために変数knifeにtrueを代入
|
1行目:ナイフを取って喜んでいるムービーが再生し終わったの
でヒヨコを動かせるようにするために再び_root.hiyo.go = true;
として、ヒヨコを矢印キーで動かせるようにします。
2行目:喜ぶムービー終了後、ヒヨコに絶対前を向かせたいので
ヒヨコが前を向いている画像のフレーム"front"に移動させます。
3行目: 2行目でヒヨコが前を向くようにスクリプトでヒヨコが前を
向いているフレームに移動させましたが、ナイフをとった時に押
していた矢印キーの方向は↑か→か←で、変数numの値は
1か2か3と考えられます。このままだとヒヨコは前を向いてい
るのにナイフは上か右か左に飛ぶというバグが発生する可能性
があるのでここで変数numに4を代入することによってこのバグを
防いでいます。
5行目:LESSON 6ではムービークリップknifeMCをロードした時
に変数knifeにfalseを代入しました。ここでナイフをゲットしたの
で、ナイフを投げれるようにならなければなりません。knifeにtrue
を代入することによりナイフを投げれるようになります。
ナイフを投げるためのスクリプトの条件の中に変数knifeがtrue
だったら...という一文が入っていましたよね!
>>ムービークリップ"knifeMC"のムービークリップアクションの一部
onClipEvent(enterFrame) {
if (Key.isDown(Key.SPACE) && knife
== true) {
これでヒヨコは絶対前を向いた状態、ナイフを投げれるようにな
って、ムービークリップ"inside"のフレーム名"out"に移動する
ことができます。

(7) 外に出るぞー!
では(5)家の中で...のはじめに書いてある方法で再びムービー
クリップ"inside"のタイムラインに移動してください。下図のよう
なタイムラインが出てきます。
(6)より現在、フレーム"out"のタイムライン上にいるはずです。
そしてヒヨコは再び家の中のマップ内を自由に動けるようになり
ました。というわけで、
また(5)と同じ要領で、フレーム名"out"の1フレーム目(全体で
見ると7フレーム目ですね)とその次のフレームで、ヒヨコが外に
出れるための仕掛け、ムービークリップ"exit"にヒットしたら、外
のマップに、それ以外のときは一個前のフレームに戻るというよ
うな感じで作っていきます。
その前に、この画面の一番下にムービークリップ"exit"(ヒヨコ
が外にでるためのきっかけにするためのムービークリップ、下図
の一番下の青い四角)があるので、プロパティのところで"exit"と
名前を付けてください。
レイヤー"action"の7フレーム目でヒヨコの動ける範囲を制限して、
(ヒヨコがニワトリの上にかぶってしまうと絵てきにおかしいので、
ヒヨコの動ける範囲が画面の下3分の2くらいに制限します。)
8フレーム目でムービークリップ"exit"にヒヨコがヒットしたらメイン
タイムラインのフレームラベル"stair"(階段を上がっているような音
を出すためのフレーム)が再生されるようにしていきます。
ムービークリップ"inside"内のタイムライン :
レイヤー"action"の7フレーム目
with(_root.hiyo) {
if(_x < 0) { _x = 0; } else if (_x > 295) { _x = 295;
} else if(_y < 80) { _y = 80;
} else if(_y > 195) { _y = 195; } }
|
(5)で解説しているので解説は省略します。
ムービークリップ"inside"内のタイムライン :
レイヤー"action"の8フレーム目
if(exit.hitTest(_root.hiyo)) {
_root.gotoAndPlay("stair"); } else {
this.gotoAndPlay(_currentframe - 1); }
|
>> スクリプト解説
if(exit.hitTest(_root.hiyo)) { ムービークリップ'exiti'(画面下真ん中にあるMC)がヒヨコと接触したら、
_root.gotoAndPlay("stair"); メインタイムラインのフレーム名"stare"を再生
} else {
this.gotoAndPlay(_currentframe - 1); このタイムラインの今いるフレームの1つ前を再生
}
|
これで家の中にいるときのヒヨコの動ける範囲を制限でき、ムービー
クリップ"exit"にヒヨコが接触すると、階段を上がる音の鳴るムービ
ーを再生することができるようになりました。

(8) STAGE 1へ。
(3)で説明したように、フレームラベル"stair"の最後のフレームに
下のようなスクリプトが書いてありましたよね。
フレームラベル"stair"(メインタイムライン): 最後のフレーム
switch(level){ case 1:
this.gotoAndStop("inHouse"); break; case 2:
this.gotoAndStop("stage1"); break; }
|
今回は変数levelに2が代入されているので、メインタイムラインのフレ
ームラベル"stage1"でストップします。
では最後のスクリプトです!!
上のスクリプトより、メインタイムラインのフレームラベル"stage1"に
移動しました。フレームラベル"stage1r"の1フレーム目(全体で見る
と8フレーム目)に下のスクリプトを書きます。
フレームラベル"stage1"(メインタイムライン): 1フレーム目
knifeMC.knife = true; hiyo.go = true;
hiyo._x = 250; hiyo._y = 100; stop();
|
>> スクリプト解説
knifeMC.knife = true; 変数knifeにtrueを代入。
hiyo.go = true; 変数knifeにtrueを代入。
hiyo._x = 250; hiyo._y = 100; ヒヨコのx座標が250、y座標が100の位置にする。
stop();
|
1,2行目:変数knife、goにそれぞれtrueを代入してやり、ヒヨコが
ナイフを投げられ、動けるように設定。(すでにtrueになってるはず
なのですが、なってなかったのでもう一度代入しました。)
3,4行目:ヒヨコは現在ムービーの一番下真ん中にいるので、
家から出てきたように見せるために、左の家のドアの前にいるよう
にx座標、y座標に250、100を代入し、ヒヨコの位置を指定。
長かったですねー。これでやっと終わりです。おつかれさまでした!
このレッスンが参考になった!という方はホムペおじさんをクリックしてくれるとうれしいです!!
← ホムペおじさん |