忍者ブログ
「Gamemakerでゲームを作って見よう」 ということで、作業メモっぽい使い方をする予定。 愚痴なんかが多くなるかも・・・
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

好きなお笑い芸人はラーメンズ。
こんにちはorこんばんわ。
NHKのオンエアーバトルの頃から見て好きでした。

今回はいよいよ弾をボスキャラに実際に撃たせます

今回は少々長くなりそうですので、できるだけうまくまとめていこうと考えております。

1.用意するオブジェクト(オブジェクト名は仮につけているものです)
obj_boss:ボスキャラ本体
obj_bullet:ボスが撃つ弾
obj_laser:ボスが撃つレーザー
2.前準備
まず、obj_bossのクリエイトイベントに以下のコードを追加します。
  1. move_type = 0;
  2. alarm[0] = 120;
  3. alarm[1] = 20;
  4. angle = 0;
move_typeは変数です。あとで詳しく説明しますが、ボスキャラの動作パターンを判別するのに使います。
alarm[0]はその動作を何ステップ行わせた以下に使います。
alarm[1]は弾を撃たせるときの間隔です。
alarm[0]はalarm[1]の倍数にするのが良いです。
angleはボスキャラから見た自機の角度を格納するのに使います。

そして、ステップイベントにて
  1. angle = point_direction(x,y,obj_player.x,obj_player.y);
として、角度を常に監視できるようにします。
ここまでは準備段階です。
3.ボスキャラに取らせたい動きの設定
プレイヤーキャラを動かす際、プレイヤーがどのキーを押したかでキャラがどのような動作を行うかを判定します。
Gamemakerであらわしますと以下のようになると思います
  1. if(keyboard_check(vk_left))//キャラが左に動く;
  2. if(keyboard_check(vk_right))//キャラが右に動く;
  3. if(keyboard_check(vk_space))//キャラがショットを撃つ;
このkeyboard_check()にあたる部分を別に用意した変数move_typeで制御してやろうというのが私が考えたボスキャラの動かし方です。
  1. if(move_type == 0)//ボスキャラが右に動く
  2. if(move_type == 1)//ボスキャラが左に動く

というようにしてやればいいわけです。
つまり、変数move_typeはプレイヤーのキー入力の代わりのものというわけです。
動作を表す変数なわけですので、move_typeは切り替わる必要があります。
そこで、アラームを使います。
一定時間経過するごとにmove_typeの値を変化させるようにしてやればいいわけです。

というわけで、例として、以下のような動作を行うボスキャラの設定をしてみましょう。

move_typeが・・・

0:何もしない。
1:弾を自機狙いで20ステップごとに撃つ。
2:3Way弾を20ステップごとに撃つ。
3:レーザーを撃つ
という動作を順番に120ステップづつ、切り替えて行う。

まず、アラーム0イベントに以下のコードを書きます。
  1. if(move_type < 4)
  2. {
  3.    move_type += 1;
  4. }
  5. else
  6. {
  7.    move_type = 0;
  8. }
  9. alarm[0] = 120;

これはアラーム0が0になるたびに行われる処理でして、
move_typeに1を加え、4以上になるようならば0に戻すというように、move_typeの値の制御を行うためのものです。
これで、120ステップごとにmove_typeが変わるようになります。

弾を撃たせる場合は前々回やったとおり、発射間隔をアラームで設定します。
alarm[1]イベントに以下のようなコードを書きます。

  1. switch(move_type)
  2. {
  3.   case 0:
  4.      break;
  5.   case 1:
  6.         bull_1 = instance_create(x,y,obj_bullet_1);
  7.         bull_1.direction = angle;
  8.         bull_1.speed = 5;
  9.     break;
  10.     case 2:
  11.         bull_1 = instance_create(start_x,start_y,obj_bullet_2);
  12.         bull_1.direction = angle;
  13.         bull_1.speed = 5;
  14.         bull_2 = instance_create(start_x,start_y,obj_bullet_2);
  15.         bull_2.direction = angle + 30;
  16.         bull_2.speed = 5;
  17.         bull_3 = instance_create(start_x,start_y,obj_bullet_2);
  18.         bull_3.direction = angle - 30;
  19.         bull_3.speed = 5;
  20.     break;
  21. }
  22. alarm[1] = 20;
これで、move_typeが0,1,2のときにどのような弾を撃つかを設定し、アラーム1に値を入れることで次に撃つ弾の準備を行えました。
move_typeが3のときなのですが、レーザーは一定間隔で何発も撃つのではなく、前回やったように一発大きいのを撃たせたいので、アラーム1ではなく、アラーム0のイベントで撃たせます。
上記のアラームイベント0のコードに
  1. if(move_type < 4)
  2. {
  3.    move_type += 1;
  4.   if(move_type == 3)
  5.    {
  6.       instance_create(x,y,obj_laser)
  7.    }
  8. }
4~7行のようなコードを追加します。
move_typeが変更したときに3の値をとる状態のときにレーザーを生成します。
生成したレーザーについては前回の解説どおりです。

以上が動かないボスキャラの作り方の一例です。
ここまで長々と書いておいてなんですが、今回紹介しましたのはあくまでもいくつもあるやり方の中のひとつに過ぎません。
ほかにももっとスマートなやり方があるかもしれませんので、このやり方にとらわれずにいろいろなやり方を模索してみてください。
今回は以上です。

拍手

PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
[28]  [27]  [26]  [25]  [24]  [23]  [22]  [21]  [20
アクセスカウンター
プロフィール
HN:
性別:
男性
趣味:
読書・ゲーム
自己紹介:
・好きな作家
夢枕獏/綾辻行人/椎名誠/北杜夫/スティーブンキング
・ハマったゲーム
R-TYPE/WILD ARMSシリーズ/イースシリーズ/九龍妖魔学園紀/SIREN/ぐわんげ/プロギアの嵐/エスプレイド/エスプガルーダ/式神の城
カレンダー
04 2025/05 06
S M T W T F S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
ブログ内検索
最新コメント
[04/30 dean]
[04/29 管理人]
[04/29 dean]
[04/08 管理人]
[04/07 dean]
忍者アナライズ
バーコード
フリーエリア
Copyright (C) Gamemakerでも使ってみる

Template by あでる / Material by 素材くん「無料WEB素材屋」 / 忍者ブログ [PR]