前[ 障害物を動かす その1 ] の続きです。
障害物が1つではゲームになりません。
複数の障害物を用意して動かしたいと思います。
全部で4つに増やします。
選択ツールをクリックした状態で
作成した障害物の上で右クリックしてメニューを出します。
そして[コピー]を選択します。

次にステージの何も無い所で右クリックしてメニューを出し、[ペースト]を選択します。
これで障害物が複製されます。

同じ作業を2回繰り返し、全部で4つの障害物を作ります。
ペーストするときの注意ですが、同じ場所に配置される場合があります。
一見、配置されて無いように見えますが、重なっている時もあります。
ペーストしたのに表示されない時は、すでに配置されている障害物を動かしてみて下さい。
重なっていれば、上に重なっているものだけが移動します。

障害物(インスタンス)をステージに複数用意する方法は、他にもあります。
ライブラリに登録された障害物(シンボル)から、ドラッグ&ドロップでステージに
配置していく方法です。ただ、この時は配置するレイヤーを意識して行ってください。
横一列に並べます。
マウスで思った位置に配置できない場合、カーソルキーを使うと微調整が楽です。

さて、一番忘れてはならないのはインスタンス名の変更です。
インスタンス名を指定しないとプログラムで動かせません。
2つ目以降を「ball2_mc」「ball3_mc」「ball4_mc」と変更します。

一度、ムービープレビューしてみましょう。
4つある内の1つだけ、上から下へ移動すると思います。
4つの障害物を動かすため、プログラムを修正します。
var flg1 = 0;
var flg2 = 0;
var flg3 = 0;
var flg4 = 0;
// 毎フレーム実行されるイベントを登録
stage.addEventListener(Event.ENTER_FRAME, mainloop);
function mainloop(event:Event):void {
// マウスx座標を取得して自機を動かす
player_mc.x = stage.mouseX;
player_mc.y = 320;
// 障害物の初期処理
if( flg1 == 0 ){
flg1 = 1;
ball_mc.y = -100; // 初期y座標
}
if( flg2 == 0 ){
flg2 = 1;
ball2_mc.y = -100;
}
if( flg3 == 0 ){
flg3 = 1;
ball3_mc.y = -100;
}
if( flg4 == 0 ){
flg4 = 1;
ball4_mc.y = -100;
}
// 障害物の移動
ball_mc.y += 5; // 下に移動
if( ball_mc.y > 500 ){ // 画面外へ出た
flg1 = 0;
}
ball2_mc.y += 5;
if( ball2_mc.y > 500 ){
flg2 = 0;
}
ball3_mc.y += 5;
if( ball3_mc.y > 500 ){
flg3 = 0;
}
ball4_mc.y += 5;
if( ball4_mc.y > 500 ){
flg4 = 0;
}
}
プログラムの内容は、1つだった障害物の処理を4つ分用意しただけです。
ムービープレビューしてみましょう。
障害物が横一列になって上から下に移動すると思います。
横一列で移動してくる障害物にランダム要素を入れて、バラバラに落ちてくるようにします。
変更箇所は障害物の初期処理の部分です。
// 障害物の初期処理
var rnd:int = 0;
if( flg1 == 0 ){
flg1 = 1;
rnd = Math.random() * 400;
ball_mc.y = -100 - rnd; // 初期y座標
}
if( flg2 == 0 ){
flg2 = 1;
rnd = Math.random() * 400;
ball2_mc.y = -100 - rnd;
}
if( flg3 == 0 ){
flg3 = 1;
rnd = Math.random() * 400;
ball3_mc.y = -100 - rnd;
}
if( flg4 == 0 ){
flg4 = 1;
rnd = Math.random() * 400;
ball4_mc.y = -100 - rnd;
}
// trace(ball_mc.y);
追加されたランダム要素の説明をします。
var rnd:int = 0;
rnd という名前で、整数のみを扱える変数を宣言しています。
rnd = Math.random() * 400;
「Math.random」は 0 以上 1 未満の浮動小数で結果を返します。
400 倍する意味は 0 ~ 399 までの数値を得るためです。
rnd = Math.random() * 400;
ball_mc.y = -100 - rnd;
この式は -100 ~ -499 までのランダムな値をy座標に代入することになります。
各障害物の初期配置がランダムになることで、落下のズレが発生する訳です。
プログラムの最後にある trace() のコメントを外してみてください。
障害物(ball_mc)のy座標の変化が、出力パネルで確認することができます。
ゲームの制作において乱数はとてもよく使います。
次のような使い方もあります。
-10 ~ +10 までを取得したい時は
rnd = (Math.random()*21) -10;
となります。
4 ~ 8 までを取得したい時は
rnd = (Math.random()*5) +4;
となります。
ムービープレビューしてみましょう。
障害物がバラバラに落ちてくるようになりました。
しかし、よく見るとステージの右側に隙間がありますね。

隙間を無くすためにステージを小さくします。
幅を 550 から 518 へ変更します。

ステージサイズの変更はうまく出来ましたか?
ムービープレビューして結果を確認しましょう。
以上で作業終了です。
保存は忘れずに行いましょう。
次[ 表示優先 ]へ進む