" />

メッセージを判定したい

ページ名:メッセージを判定したい

概要

同じオブジェクトから「this.メッセージする()」コマンドを使った時に、処理を振り分ける方法です。

説明

例えば、プレイヤーが攻撃した時、攻撃された時それぞれに「青色のスライム」にメッセージするプログラムが用意されているとします。

//プレイヤーの中身
rule.こうげきするとき(async function() ){
 this.メッセージする('青色のスライム')
}
rule.こうげきされたとき(async function(item) ){
 this.メッセージする('青色のスライム')
}

//青色のスライムの中身
rule.メッセージされたとき(async function(item) ){
 this.はなす('攻撃された?攻撃した?') //どちらからメッセージされたか判断つかない
}

この場合、プレイヤーが攻撃する時、攻撃された時、それぞれから青色のスライムがメッセージを受け取りますが「メッセージをうけとったとき」トリガーが発火した後、どちらから来たメッセージか判断がつきません。
実はitemという引数を使えばなんとかなります。

この場合は、2つの方法をご紹介します。

<プレイヤー側で変数を用意して判定する方法>

//プレイヤーの中身
rule.つくられたとき(async function() ){
 //省略
 this.myState = "" // myState変数を用意
}

rule.こうげきするとき(async function() ){
 this.myState = "攻撃した" // myState変数に「攻撃した」と入れる
 this.メッセージする('青色のスライム')
}

rule.こうげきされたとき(async function(item) ){
 this.myState = "攻撃された" // myState変数に「攻撃された」と入れる
 this.メッセージする('青色のスライム')
}

//青色のスライムの中身
rule.メッセージされたとき(async function(item) ){
 if (item.myState === "攻撃した"){ //変数の中身で判定する
  this.はなす('攻撃した')
 } else {
  this.はなす('攻撃された')
 }
}

プレイヤーの「つくられたとき」に「myState」という変数を作っておきます。
そして「こうげきするとき」と「こうげきされたとき」のそれぞれでメッセージする直前に「myState」に違う値を入れておきます。(上の例では"攻撃した"と"攻撃された"を入れてます)
すると、青色のスライムの「メッセージされたとき」の引数「item」がプレイヤー(メッセージ送信元)になっているので、「item.myState」で変数の中身を取り出し、判定に使用する流れになります。

もちろん、プレイヤー以外のオブジェクト間でメッセージを渡し合う場合も同じことができます。

<behaviorで判定する方法>

今回の場合は「攻撃したかどうか」を判定できれば良いので、プレイヤーの状態(behavior)を利用することもできます。

//青色のスライムの中身
rule.メッセージされたとき(async function(item) ){
 if (item.behavior === "attack"){ //攻撃中は"attack"が入る
  this.はなす('攻撃した')
 } else {
  this.はなす('攻撃された')
 }
}

ちなみに、behaviorには以下が定義されているようです。(2020/7/7時点)
引用元:GitHub

  • null // 無状態 (デフォルトではEventは発火されません)[deprecated]
  • init // スキン適用時にアニメーションが未定義だった場合のみ使用される(状態ではない)
  • idle // 立ち状態
  • walk // 歩き状態
  • attack // 攻撃状態
  • undefined // 被撃状態[deprecated]
  • dead // 死亡状態

シェアボタン: このページをSNSに投稿するのに便利です。

コメント

返信元返信をやめる

※ 悪質なユーザーの書き込みは制限します。

最新を表示する

NG表示方式

NGID一覧