Hako.png(402 byte) プレイヤーがダメージを受けられるようにする

プレイヤーキャラクターをつくる」では、キーボードで操作できるプレイヤーを作成しましたね。
今回は、そのプレイヤーがダメージを受けられるようにしてみましょう。


もくじ

  1. ステップ1:プレイヤーオブジェクトの各種設定を行う
  2. ステップ2:プレイヤーのHPが0になったときに表示させるオブジェクトを作る
  3. ステップ3:ダメージを受ける処理をつくる
  4. ステップ3.5:(必要に応じてプレイヤーを格納するデータアイテムを作成)
  5. ステップ4:ダメージを与えるオブジェクト(トラップ)をつくる
  6. ステップ5:オブジェクトにHP切れ判定を付け加える
  7. ステップ6:残機を導入する



ステップ1:プレイヤーオブジェクトの各種設定を行う

まずは、プレイヤーオブジェクトの設定を変更します。

画像1:プレイヤーオブジェクトの設定その1

(クリックで拡大)

上図の赤枠部分にある、「HP死亡判定を有効にする」のチェックを外します。
また、HPを任意の値に設定します。

HP死亡判定とは?
HPが0になった配置オブジェクトを自動的に消去する機能です。

それでは、HPが0になった時の処理を組み立てていきましょう。


ステップ2:プレイヤーのHPが0になったときに表示させるオブジェクトを作る

つづいて、プレイヤーのHPが0になったときに表示させるアニメーションを考えてみます。
ここで、「プレイヤーキャラクターをつくる」の際に作ったオブジェクトのアニメーション画像として、
同ページで用意されているサンプル画像を用いたとします。

右図のように、プレイヤーが歩いたり止まったりしているときには
キャラクターのアニメーションフレームの大きさは18×32pxと
なっていますが、キャラクターが倒れこむアニメーションのフレームの
大きさは20×32pxとなっています。
今回は、(サンプル画像をそのまま用いる場合は)HPが0になった
時にキャラクターが倒れこむアニメーションを再生します。


アニメーションフレームの大きさが違うと、同じオブジェクトでは対応できない
(きれいに表示できなくなってしまう)ので、今回はHPが0になったときだけ、別のオブジェクトを
プレイヤーとして表示させることを考えてみましょう。


ワンポイント
オブジェクトアニメーションのフレームの大きさはオブジェクトの大きさと同一にしなければ、
きれいにアニメーションが描画されません。

なお、自身で用意した画像を用い、アニメーションフレームの大きさがすべて統一されているときには、
以下のような手順は不要になります。
そのような場合は、こちらのリンクを押して、以下の文章を読み飛ばしても大丈夫です。
(以下の手順を行う代わりに、プレイヤーオブジェクトにHPが0になった時に表示したい
アニメーションを設定してください。)

==========

まずは、HPが0になったときに表示させるオブジェクトを作ってみましょう。

オブジェクト名を適当に設定し、大きさを設定します。「プレイヤーキャラクターをつくる」で
公開されているサンプル画像をプレイヤー画像として用いる場合は、大きさを縦32px、横20pxと
しましょう。

つづいて、このオブジェクトにアニメーションを作成します。
プレイヤーのHPが0になった時に表示させたいアニメーションを設定しましょう。

以下に、「プレイヤーキャラクターをつくる」でサンプル画像を用いた場合に
ついて説明します。

画像2:HPが0になった時のアニメーション設定

(クリックで拡大)

アニメーション新規作成ウインドウを表示させたら、まずはサンプル画像を選択します。
でもこのままではマス目の位置の関係上、プレイヤーが倒れるアニメーションフレームを
設定できません。

そこで、上図赤枠部分に示す「オフセット」項目の縦を10としてみましょう。
すると、画像表示部分のマス目の縦棒が移動し、適切にアニメーション画像を設定することが
できます。

アニメーションフレーム登録時の「オフセット」について
上記手順で用いた「オフセット」機能で、マス目の位置をオフセット項目で設定した数値分
ずらすことができます。
これによって、アニメーションフレームのサイズが異なる画像があつまった画像データでも
適切にアニメーションを設定することができます。


ここまでできたら、このオブジェクトのイベント開始条件「配置オブジェクト発生時」に、
以下のようにイベントコマンドを置きます。
コマンド1:オブジェクト発生時イベントの設定
重力の発生を設定する
設定するイベントパラメータ:
パラメータ名称 設定する値
重力を発生させる 「いいえ」を設定します。
オブジェクト→速度・モーション・重力系

これで、プレイヤーHPが0になったときに表示するオブジェクトの作成は終了です。


ステップ3:ダメージを受ける処理をつくる

それでは、プレイヤーがダメージを受ける処理を考えてみましょう。

ダメージを与える側(敵キャラクターやトラップなど)が
プレイヤーとのあたり判定を実行し、あらかじめ定義して
おいたプレイヤーのダメージ処理ユーザーイベント
開始条件を呼び出すようにします。

このようにすることで、プレイヤーとダメージを与える
オブジェクトとの連携がスムーズにいきます。

ユーザー定義イベント開始条件とは?
ユーザーが定義するイベント開始条件です。「他配置オブジェクトイベント開始条件を呼び出す」
イベントコマンドで呼び出すことで、ユーザー定義イベント開始条件を実行することができます。

くわしくは、「ユーザー定義イベント開始条件をつかってみよう!」を参照して下さい。

ダメージを与えられたら、以下のことをすることにします。
  • HPを減らす
  • プレイヤーを点滅させる
それでは、ユーザー定義イベント開始条件を作成します。
名称はわかりやすいように、「ダメージ処理」とでもしておきます。
(ユーザー定義イベント開始条件の作り方は、「ユーザー定義イベント開始条件をつかってみよう!」を参照して下さい。

まずは、作成したイベント開始条件のイベント
データベースに、右図のようにフォルダとデータ
アイテムを作成します。
(種別はすべて整数値です。)

フォルダは右図赤枠に示すボタンで作成します。
(名称は何でもいいですが、とりあえず「非公開」と
しておきましょう。)


作成したイベント開始条件に、以下のようにイベントコマンドを組みます。
コマンド2:ダメージ処理イベント
ヒットポイントを設定する
設定するイベントパラメータ:
パラメータ名称 設定する値
設定モード 「加算」とします。
(参照データアイテム) イベントデータベース内の「HP増減量」データアイテムを設定します。
操作対象配置オブジェクト 「自分自身」とします。
オブジェクト
繰り返し処理
設定するイベントパラメータ:
  • 比較対象1:イベントデータベース内の繰り返し数
  • 比較対象2:イベントデータベース内のカウンター
  • 比較演算子:以上
とします。
フロー制御→繰り返し実行セット
配置オブジェクトの透明度を設定する
設定するイベントパラメータ:
パラメータ名称 設定する値
透明度 0を設定します。
操作対象配置オブジェクト 「自分自身」を設定します。
オブジェクト→表示
指定時間イベントを待機する
設定するイベントパラメータ:
パラメータ名称 設定する値
待機時間 適当に設定します。(50ミリ秒ぐらいがいいかな)
フロー制御
配置オブジェクトの透明度を設定する
設定するイベントパラメータ:
パラメータ名称 設定する値
透明度 255を設定します。
操作対象配置オブジェクト 「自分自身」を設定します。
オブジェクト→表示
指定時間イベントを待機する
設定するイベントパラメータ:
パラメータ名称 設定する値
待機時間 適当に設定します。(50ミリ秒ぐらいがいいかな)
フロー制御
プログラム計算
設定するイベントパラメータ:
イベントデータベース内のイベントデータアイテム「カウンタ」に1を足すように数式を組みます。
参考画像
プログラム計算ボタンで追加
繰り返し実行終了点
イベントパラメータの設定はありません。
フロー制御→繰り返し実行セット

プログラム計算について
上記のイベントで行番号がオレンジ色になっている部分はプログラム計算機能を用いて
います。
プログラム計算機能とは?という方は、こちらのリンクから参考記事をご覧ください。

また、オブジェクト制作講座「武器をつくる」を先に行っておくと、プログラム計算の使い方が
わかると思います。

このイベントは、ヒットポイントを「HP増減量」データアイテムで設定された分だけ
増やす(減らす)処理をしたあと、プレイヤーの透明度を変化させることで点滅させています。

繰り返し処理では、イベントデータベース内の「繰り返し数」データアイテムが「カウンター」
データアイテムの値よりも大きいときには処理を繰り返すようになっています。

つまり、「繰り返し数」で設定した分だけ点滅を繰り返すという処理になっているのです。

ワンポイント
今回は、ユーザー定義イベント開始条件の「イベントの引数機能」をうまく使うために、
HPの増減量を「HP増減量」データアイテムで設定しました。
このようにすることで、ダメージを与えるオブジェクトが、プレイヤーの「ダメージ処理」
イベント開始条件を呼び出す際、HPの増減量を設定できるようになります。

くわしくは、オブジェクト制作講座「ユーザー定義イベント開始条件をつかってみよう!」内の
イベントの引数機能」を参照してください。

ここまでできたら、この処理を呼び出す「ダメージを与えるオブジェクト」を作ってみましょう。


ステップ3.5:(必要に応じてプレイヤーを格納するデータアイテムを作成)

以下の項目に当てはまる場合は、ステップ3.5は必要ありません。ステップ4まで進んでください。
  • ステージデザイナー同梱の「基本オブジェクトパッケージ」にある「主人公」
    オブジェクトをプレイヤーで用いている場合
  • すでに共有データベース内にプレイヤーを格納する配置オブジェクトデータアイテムが
    存在し、プレイヤーが登録されるようにしてある場合

まず、共有データベースの好きな場所にデータアイテム種別を「配置オブジェクト」として
データアイテムをつくります。

この際にプレイヤーを設定してもいいですが、後々のことを考えて以下のように設定してみましょう。
まず、プレイヤーオブジェクトの「配置オブジェクト発生時」イベントコマンドの任意の行に以下の
イベントコマンドを追加してください。

コマンド3:データアイテム登録イベント
- 指定配置オブジェクトをデータアイテムに代入
設定するイベントパラメータ:
パラメータ名称 設定する値
代入する配置オブジェクト 自分自身
代入先データアイテム 共有データベース内に作成したデータアイテムを設定します。
データベース操作

このようにすることで、プレイヤー配置オブジェクトが動作を開始すると同時に、先ほど作成した
共有データベース内のデータアイテムに自身を登録します。
イベントから設定する理由
データアイテム編集画面から設定する場合、配置オブジェクトが存在するマップも設定
しなければいけないため、プレイヤー配置オブジェクトは必ずそのマップから動作を
開始しないと、正しくデータアイテムに配置オブジェクトが設定されません。
これは、「配置オブジェクトデータアイテム」へ配置オブジェクトが設定されるタイミングが、
配置オブジェクトが存在するマップが読み込まれたときであるためです。

しかし、イベントを用いて設定することで、どのマップにいても確実にデータアイテムに
自身の配置オブジェクトを設定することができるようになります。
(くわしくは配置オブジェクトデータアイテムについてを参照してください。)


ステップ4:ダメージを与えるオブジェクト(トラップ)をつくる

ステップ3でつくった「ダメージ処理」を検証するためにも、プレイヤーにダメージを与える
オブジェクトを作ってみましょう。

Floppy.png(261 byte)サンプル画像
objtut02_02.png(1114 byte)
ここで、今回もサンプル画像(とげとげ)を用意しました。
自分で用意した画像を使ってもいいですが、てっとり早く試してみたい方は
右の画像をご使用ください。
(右の画像は、とげとげの絵です。あたったら痛そうではないですか?)
保存方法はブラウザによって異なりますが、画像上を右クリックして「対象をファイルに保存」に
相当するメニューをクリックします。

つづいて、オブジェクト同士のあたり判定矩形を1つ作っておきます。

そのあと、イベント開始条件「オブジェクト同士が触れたとき」を、以下のように編集します。

コマンド4:ダメージを与えるイベント
条件分岐
設定するイベントパラメータ:
  • 比較対象1:あたり判定オブジェクト
  • 比較対象2:プレイヤーオブジェクトを設定
  • 比較演算子:と等しい
とします。
フロー制御→条件分岐セット
他配置オブジェクトイベント開始条件を呼び出す
設定するイベントパラメータ:
呼び出し先配置オブジェクトをプレイヤーに設定する。
共有データベース内のプレイヤーを格納している配置オブジェクトデータアイテムを設定するとよい。(ステップ3.5参照のこと)

呼び出す開始条件を「ダメージ処理」(プレイヤーに作成したユーザー定義イベント開始条件」)に設定。

このあと、イベントパラメータ編集部分に表示される「HP増減量」設定値を「-1」に設定する。
フロー制御
条件分岐終了点
イベントパラメータの設定はありません。
フロー制御→条件分岐セット

このように、ダメージを与える側のオブジェクトが当たり判定を検知し、プレイヤーと衝突していたなら、
プレイヤーのダメージ処理を呼び出すことで、容易にダメージ処理を実装できました。


ちなみに、右図赤枠部分に示されている
「HP増減量」パラメータは、ここに設定した
値が、このコマンド実行時にプレイヤーの
「ダメージ処理」イベント開始条件内の
「HP増減量」データアイテムに設定されます。

(詳しくは、「イベントの引数機能」を
参照してください。




また、「配置オブジェクト発生時」イベント開始条件には、以下のようにイベントコマンドを設定しておきます。
コマンド5:オブジェクト発生時イベントの設定
重力の発生を設定する
設定するイベントパラメータ:
パラメータ名称 設定する値
重力を発生させる 「いいえ」を設定します。
オブジェクト→速度・モーション・重力系


ここまでできたら、一度オブジェクトを配置して実行してみましょう。


プレイヤーがオブジェクトに触れたとき、プレイヤーが点滅すれば成功です。


ステップ5:オブジェクトにHP切れ判定を付け加える

ここまでの手順では、プレイヤーオブジェクトのHPを増やしたり減らしたりできるユーザー定義
イベント開始条件を作成し、ダメージを与えるオブジェクトを作りました。
ここで、HPが0になったときに行う処理を組んでいきます。

今回は、HPが0になったときに以下のような処理をするようにします。
  • プレイヤーの動きを止める
  • プレイヤーが動けなくなることを示すアニメーションを再生する
  • すこし時間を置いた後に、HPを復活させ、プレイヤーを再び動かせるようにする
それでは、さっそくプレイヤーオブジェクトのイベント開始条件「HP0直後の処理」を編集していきましょう。

まずは、イベントコマンドを編集する前にイベントデータベース内に「作成したオブジェクト」という
名称で、種別「配置オブジェクト」のデータアイテムを1つ作成しておきましょう。

つづいて、イベントを編集していきます。
コマンド6:HPが0になったときのイベント
配置オブジェクト自身によって移動するのを許可/禁止
設定するイベントパラメータ:
パラメータ名称 設定する値
自身で移動することを制限しない 「いいえ」を設定します。
操作対象配置オブジェクト 「自分自身」を設定します。
オブジェクト→速度・モーション・重力系
配置オブジェクトの透明度を設定する
設定するイベントパラメータ:
パラメータ名称 設定する値
透明度 0を設定
操作対象配置オブジェクト 「自分自身」を設定します。
オブジェクト→表示
オブジェクトを発生させる
設定するイベントパラメータ:
パラメータ名称 設定する値
現在の配置位置を基準にする 「はい」を設定します。
発生させるオブジェクト ステップ2で作成したオブジェクトを設定します。
発生させた配置オブジェクトをデータアイテムに設定 「はい」を設定します。
(参照データアイテム) 先ほど作成したイベントデータベース内の「作成したオブジェクト」データアイテムを設定します。
オブジェクト
指定時間イベントを待機する
設定するイベントパラメータ:
パラメータ名称 設定する値
待機時間 適切な値に設定(2000ミリ秒くらい?)
フロー制御
死亡フラグを立てる(消滅させる)
設定するイベントパラメータ:
パラメータ名称 設定する値
操作対象配置オブジェクト 先ほど作成したイベントデータベース内の「作成したオブジェクト」データアイテムを設定します。
フロー制御
ヒットポイントを設定する
設定するイベントパラメータ:
パラメータ名称 設定する値
設定モード 「そのまま設定」とします。
ヒットポイント設定値 設定したいHPの値を入力します。
操作対象配置オブジェクト 「自分自身」とします。
オブジェクト
配置オブジェクトの透明度を設定する
設定するイベントパラメータ:
パラメータ名称 設定する値
透明度 255を設定
操作対象配置オブジェクト 「自分自身」を設定します。
オブジェクト→表示
配置オブジェクト自身によって移動するのを許可/禁止
設定するイベントパラメータ:
パラメータ名称 設定する値
自身で移動することを制限しない 「はい」を設定します。
操作対象配置オブジェクト 「自分自身」を設定します。
オブジェクト→速度・モーション・重力系

ワンポイント
自身で用意した画像を用い、アニメーションフレームの大きさがすべて統一されているとき
ステップ2で、HPが0になった時に表示するオブジェクトを用意しなかったとき)
には、上記イベントの行番号2,4の部分を変更してください。

修正内容は以下の通りです。
  • 行番号2の部分を「オブジェクトアニメーションを変更する」イベントコマンドに変更し、
    HPが0になったときに表示したいアニメーションを設定する
  • 行番号4のイベントコマンドは追加しない(必要ない)

上記のイベントをつくったら、実行して先ほど作ったダメージを与えるオブジェクトにぶつかってみます。
HPが0になったときに、正しくイベントが実行されるかを確かめてみてください。

objtut04_11.png(24571 byte)

ここで、HPが0になったのに、上記イベントコマンドの行番号1によって見えなくしたはずの
プレイヤーが、点滅して表示されてしまっていることが確認できる場合がありますね。

これは、プレイヤーの「HP0直後の処理」と先ほど作成したユーザー定義イベント開始条件
「ダメージ処理」が同時に実行されているため、「ダメージ処理」で定義されているイベントの、
プレイヤーを点滅させる処理が働くためです。

そこで、HPが0のときには「ダメージ処理」で実行されるプレイヤーの点滅処理を実行しないようにします。
objtut04_12.png(6266 byte)

まずは、左の画像を参考にして
「ダメージ処理」イベント開始条件の
イベントデータベースをデータアイテムを1つ
追加してください。

プレイヤーの「ダメージ処理」イベント開始条件を、以下のように再編集します。
(追加・変更したイベントコマンドの行番号はオレンジ色で示しています。)


コマンド7:ダメージ処理イベント改良版
ヒットポイントを設定する
設定するイベントパラメータ:
パラメータ名称 設定する値
設定モード 「加算」とします。
(参照データアイテム) イベントデータベース内の「HP増減量」データアイテムを設定します。
操作対象配置オブジェクト 「自分自身」とします。
オブジェクト
配置オブジェクトの各種値をデータベースに代入
設定するイベントパラメータ:
パラメータ名称 設定する値
代入対象オブジェクト値 「HP」とします。
代入対象データアイテム イベントデータベースの「現在のHP」とします。
代入対象オブジェクト 「自分自身」とします。
データベース操作
条件分岐
設定するイベントパラメータ:
  • 比較対象1:イベントデータベース内「現在のHP」データアイテム
  • 比較対象2:整数値「1」
  • 比較演算子:以上
とします。
フロー制御→繰り返し実行セット
繰り返し処理
設定するイベントパラメータ:
  • 比較対象1:イベントデータベース内の繰り返し数
  • 比較対象2:イベントデータベース内のカウンター
  • 比較演算子:以上
とします。
フロー制御→繰り返し実行セット
配置オブジェクトの透明度を設定する
設定するイベントパラメータ:
パラメータ名称 設定する値
透明度 0を設定します。
操作対象配置オブジェクト 「自分自身」を設定します。
オブジェクト→表示
指定時間イベントを待機する
設定するイベントパラメータ:
パラメータ名称 設定する値
待機時間 適当に設定します。(50ミリ秒ぐらいがいいかな)
フロー制御
配置オブジェクトの透明度を設定する
設定するイベントパラメータ:
パラメータ名称 設定する値
透明度 255を設定します。
操作対象配置オブジェクト 「自分自身」を設定します。
オブジェクト→表示
指定時間イベントを待機する
設定するイベントパラメータ:
パラメータ名称 設定する値
待機時間 適当に設定します。(50ミリ秒ぐらいがいいかな)
フロー制御
プログラム計算
設定するイベントパラメータ:
イベントデータベース内のイベントデータアイテム「カウンタ」に1を足すように数式を組みます。
参考画像
プログラム計算ボタンで追加
繰り返し実行終了点
イベントパラメータの設定はありません。
フロー制御→繰り返し実行セット
条件分岐終了点
イベントパラメータの設定はありません。
フロー制御→条件分岐セット

このようにイベントを組んだら、実行してみてください。


ステップ6:残機を導入する

よくあるアクションゲームなどでは、HPが0になっても残機(残りライフ)があれば
HPが回復し、再びゲームを再開できるようなシステムとなっていますね。

そこで、このサンプルでも残機を導入してみましょう。

まずは、プレイヤーオブジェクトのオブジェクトデータベースに、残機数を記録するための
データアイテムを作成します。
名称は「残機数」、データアイテム種別は「整数値」とし、値は設定する残機数を入力し、
作成してください。
(データアイテムの作り方がわからない方は、ヘルプの記事を参照してください。)

つづいて、先ほど編集したばかりの、プレイヤーオブジェクトのイベント開始条件「HP0直後の処理」
を再び編集します。
(追加・編集したイベントコマンドの行番号をオレンジ色で記しています。)

コマンド8:HPが0になったときのイベントその2
配置オブジェクト自身によって移動するのを許可/禁止
設定するイベントパラメータ:
パラメータ名称 設定する値
自身で移動することを制限しない 「いいえ」を設定します。
操作対象配置オブジェクト 「自分自身」を設定します。
オブジェクト→速度・モーション・重力系
配置オブジェクトの透明度を設定する
設定するイベントパラメータ:
パラメータ名称 設定する値
透明度 0を設定
操作対象配置オブジェクト 「自分自身」を設定します。
オブジェクト→表示
オブジェクトを発生させる
設定するイベントパラメータ:
パラメータ名称 設定する値
現在の配置位置を基準にする 「はい」を設定します。
発生させるオブジェクト ステップ2で作成したオブジェクトを設定します。
発生させた配置オブジェクトをデータアイテムに設定 「はい」を設定します。
(参照データアイテム) 先ほど作成したイベントデータベース内の「作成したオブジェクト」データアイテムを設定します。
オブジェクト
指定時間イベントを待機する
設定するイベントパラメータ:
パラメータ名称 設定する値
待機時間 適切な値に設定(2000ミリ秒くらい?)
フロー制御
プログラム計算( 残機 = 残機 - 1 )
設定するイベントパラメータ:
オブジェクトデータベースに作成した「残機」データアイテムの中身を1だけ減らすように 編集してください。
(参考画像
プログラム計算ボタン
条件分岐
設定するイベントパラメータ:
  • 比較対象1:オブジェクトデータベース内「残機数」
  • 比較対象2:整数値「1」
  • 比較演算子:以上
とします。
フロー制御→条件分岐セット
死亡フラグを立てる(消滅させる)
設定するイベントパラメータ:
パラメータ名称 設定する値
操作対象配置オブジェクト 先ほど作成したイベントデータベース内の「作成したオブジェクト」データアイテムを設定します。
フロー制御
ヒットポイントを設定する
設定するイベントパラメータ:
パラメータ名称 設定する値
設定モード 「そのまま設定」とします。
ヒットポイント設定値 設定したいHPの値を入力します。
操作対象配置オブジェクト 「自分自身」とします。
オブジェクト
配置オブジェクトの透明度を設定する
設定するイベントパラメータ:
パラメータ名称 設定する値
透明度 255を設定
操作対象配置オブジェクト 「自分自身」を設定します。
オブジェクト→表示
配置オブジェクト自身によって移動するのを許可/禁止
設定するイベントパラメータ:
パラメータ名称 設定する値
自身で移動することを制限しない 「はい」を設定します。
操作対象配置オブジェクト 「自分自身」を設定します。
オブジェクト→速度・モーション・重力系
条件分岐終了点
(設定できるイベントパラメータはありません。)
フロー制御→条件分岐セット

このようにイベントを変更することで、残機数が0となったときにはHP回復処理とプレイヤーの
移動開始処理が行われなくなります。
あとは、追加した条件分岐の中(条件が成立したら実行する部分)に、ゲームオーバーのときに
実行したい処理を組むといいでしょう。

==========

今回の講座はこれでおわりです。
ただ、せっかくプレイヤーにダメージ処理を実装したのですから、ライフゲージなどで
どれだけHPや残機数が残っているのかを表示したいですよね。

そこで、いずれそのような処理を実装する方法を制作講座で紹介しようと考えています。



←もくじへもどる