1. このサイトではcookie (クッキー) を使用しています。サイトの利用を継続した場合、cookieの使用に同意したものとみなさせていただきます。 詳しくはこちらをご覧ください。

マップ上での戦闘?について

スイカ2018-09-12に開始した「ゲーム制作」の中の討論

  1. スイカ

    スイカ ユーザー

    こんにちは。

    マップ上で、
    上からランダムな場所に氷が落ちて来て地面に当たると壊れる。接触するとダメージが入る。
    というイベントを作りたいのですが、どういう処理をすれば良いでしょうか。
    乱数を使ってみたり、スイッチを使ってみたりしたのですが、どうもうまくいかず…。
    何か方法がありましたら、教えて下さい。
     
    #1
  2. ゼゼゼ

    ゼゼゼ ユーザー

    上からというのは、崖上など、マップの上方からということですか?
    それともキャラクターの真上から直接降ってくるような感じ?
    (プレイヤーが氷の落ちてくる様子を視認できるかどうか)
     
    最後に編集: 2018-09-12
    #2
  3. ネコタ

    ネコタ ユーザー

    こんにちは。
    似たようなイメージの物は作ったことがあります。


    ランダム出現について:
    やり方はいくつかありますが、普通のマップでプレイヤーが歩ける場所のみを想定しているのであれば、地形タグを使うのが最も楽かもしれません。

    歩行できるマップチップの地形タグを0、出来ないマップチップの地形タグをそれ以外(数字は何でも構いません)にします。

    出現させる氷のイベントでは、次のようなイベントを組みます。

    ◆ループ
    ◆変数の操作:#0228 = 乱数 0..16
    ◆変数の操作:#0229 = 乱数 0..12
    ◆指定位置の情報取得:#0230, 地形タグ, ({#0228},{#0229})
    ◆条件分岐:#0230 = 0
    ◆ループの中断

    :分岐終了

    :以上繰り返し
    ◆イベントの位置設定:EV010, ({#0228},{#0229})

    X座標(#0228)とY座標(#0229)の変数を用意し、それぞれ乱数で0-マップ端の値に設定します。

    (例えば、17*13のマップの場合
    X座標:0-16
    Y座標:0-12
    ※マップは0から始まるため、座標の端はマス数から1引いた値になります)

    そのあとに、指定位置の情報取得で(X座標,Y座標)の地形タグを取得し、変数に格納します(この情報は#0230に入ります)。

    条件分岐で格納した地形タグ=0の時にループ中断のコマンドを入れ、全体をぐるっとループで囲みます。

    これで、出現できる座標が選択されるまで座標取得をランダムで繰り返す処理ができました。

    ループから出れたら、そこはイベントを移動させても問題ない位置なので、そこに氷イベントを移動させます。

    <ここでの演出処理について>
    もし、氷イベントが降ってくるような演出を加えたい場合には、イベントの位置設定直前に

    ◆変数の操作:#0229 -= 2

    などY座標を調節するコマンドを挿入してください。
    すると、出現可能な位置(落下地点)よりも数マス上(ここでは2マス上)に出現するので、イベントを動かした後に、

    ◆移動ルートの設定:EV010 (ウェイト)
    :        :◇移動速度:6
    :        :◇すり抜けON
    :        :◇下に移動
    :        :◇下に移動
    :        :◇画像:なし

    といった具合にイベントの移動演出を加えると良いでしょう。なお、Y座標を弄っているので、マップ上は壁の中に出現することがあります。また、演出でプレーヤーと画像を重ねることも考慮すると、すり抜けONを付けておいた方が良いです。



    接触時ダメージ処理について:
    こちらは、座標が一致したらダメージの処理を組めば良さそうです。

    ◆変数の操作:#0228 = EV010のマップX
    ◆変数の操作:#0229 = EV010のマップY
    ◆変数の操作:#0001 プレイヤー位置X = プレイヤーのマップX
    ◆変数の操作:#0002 プレイヤー位置Y = プレイヤーのマップY
    ◆条件分岐:プレイヤー位置X = #0228
    ◆条件分岐:プレイヤー位置Y = #0229
    ◆HPの増減:パーティ全体, - 9999 (戦闘不能を許可)

    :分岐終了

    :分岐終了

    変数を4つ用意し、それぞれイベントのXおよびY座標(変数>ゲームデータ>イベント マップXおよびY)、プレイヤーのXおよびY座標を格納します。

    条件分岐でプレイヤーX座標=イベントX座標の時を指定し、その中に、更にプレイヤーY座標=イベントY座標の時という条件分岐を指定します。これで、XおよびYが一致した時(すなわち、プレイヤーとイベントが同じ場所に居るとき)となるので、この中にダメージ処理や演出を書き込んでください。

    <ここでの演出について>
    当たったときと当たらなかった時で演出を変えたい場合、ラベルジャンプを使うと良いです。

    ◆条件分岐:プレイヤー位置X = #0228
    ◆条件分岐:プレイヤー位置Y = #0229
    ◆HPの増減:パーティ全体, - 9999 (戦闘不能を許可)
    ◆文章:なし, ウィンドウ, 下
    :  :パーティはつららに貫かれてしまった。
    :  :それでも、私は生きている。
    ◆全回復:パーティ全体
    ◆ラベルジャンプ:①

    :分岐終了

    :分岐終了
    ◆文章:なし, ウィンドウ, 下
    :  :つららは誰にも迷惑をかけず、人知れず消えゆくのみ。
    :  :それが、我が運命なのだ。
    ◆ラベル:①

    上記のように、条件分岐の中(氷イベント落下地点とプレイヤーが一致した場合)とそうでない場合で演出が異なるときは、条件分岐の外に条件外の時の内容を書き、終わりにラベルを置きます。条件内では演出の終わりにラベルジャンプでラベルまで飛ばします。


    氷イベントの起動条件が分からなかったので、並列処理にすべきか自動実行にすべきかは分かりませんでしたが、とりあえず、詰まっているであろう処理を推測して書いてみました。

    参考になれば幸いです。
     
    最後に編集: 2018-09-12
    #3
    神無月サスケ, 木星ペンギン, 猫二郎他1人 がいいね!しています
  4. スイカ

    スイカ ユーザー

    詳しく教えて頂きありがとうございます!
    氷が落ちてくるイベントを上手く作ることが出来ました!
     
    #4
  5. スイカ

    スイカ ユーザー

    マップの上から降ってくるのをイメージしてます。
     
    #5

このページを共有