(CF2.5)敵キャラがプレイヤーを追跡するような条件式を考えた

f:id:sakage24:20170814225316g:plain

デフォルトで用意されているものかと思っていたのですが、まじでほぼ全部自作する必要がありそうです。修羅の門をくぐってしまったのかもしれない…

インディーゲームクリエイター(CF2.5)は格安で購入出来ます

こちらのサイトからなら300円~ほどで購入できます。steamやamazonでは7000円~くらいしますのでお買い得ですね!

プレイヤーを追いかけて欲しい件

敵キャラを用意したはいいのですが、どうやったらプレイヤーを追いかけるようなAIをどうやったら実装できるのか途方にくれてしまいました。wikiも散々調べたりしましたが、どうも中上級者向けという気がします。初心者放置の現状はあまりにも酷いような気がしましたので、今回はよく使いそうなプレイヤーを追いかける感じの条件式を考えてみました。

プレイヤーのX座標と敵キャラのX座標を比較すべし

考え方としては以下の通りです。

左方向の追跡

  • もしもプレイヤーのX座標と敵キャラのX座標の位置が異なり、なおかつ敵キャラのX座標がプレイヤーのX座標以上ならば、敵キャラの現在のX座標から歩数分(1)減算します。

右方向の追跡

  • もしもプレイヤーのX座標と敵キャラのX座標の位置が異なり、なおかつ敵キャラのX座標がプレイヤーのX座標より下ならば、敵キャラの現在のX座標から歩数分(1)加算します。

1)打ち消し線の部分、よく考えたら要らないですね。余計でした…

プログラミングっぽく書くと


# プレイヤーのx座標
player_x = 320
# 敵キャラのx座標
enemy_x = 480
# 歩行の間隔
walk_interval = 5
if enemy_x > player_x:
# x座標を右にwalk_interval分だけ移動する
enemy_x += walk_interval
if enemy_x <= player_x:
# x座標を左にwalk_interval分だけ移動する
enemy_x -= walk_interval

実際には全部クリックで作業することになりますし、if then else句が使えないのでとっても冗長なコードを書いている気分になります。

f:id:sakage24:20170814221945j:plain

やってみよう

前提知識

f:id:sakage24:20170814223410j:plain

この画像の様にインディーゲームクリエイター(CF2.5)では、条件式(A, B)を挿入していくと、A, Bの条件式は暗黙的にAND(A かつ B)と判断します。OR(A または B)としたい場合は、条件との間で右クリックしてOR演算子(論理)を挿入します(OR演算子(フィルタ)は触らない方が健康に良いです)

上の条件式は、以下のコードと等価です。


# プレイヤーのx座標
player_x = 320
# 敵キャラのx座標
enemy_x = 480
if player_x != enemy_x and player_x <= enemy_x:
# 処理内容
pass

もしもプレイヤーのX座標と敵キャラのX座標の位置が異なるならば

やり方

  1. 新しい条件をクリック
  2. 敵キャラをクリック、位置 - Y座標を指定値と比較をクリック。比較方法を選択:から異なるを選択
  3. 画面下の現在のオブジェクトからプレイヤーをクリック、位置 - 高さをクリック
  4. 下の画像通りに数式が入力されたらOKする

f:id:sakage24:20170814222715j:plain

これで1つの目の条件が設定出来ました。

f:id:sakage24:20170814223347j:plain

上の条件式かつ敵キャラのX座標がプレイヤーのX座標以上ならば

やり方

f:id:sakage24:20170814223347j:plain

  1. 先ほど作成した条件式(上の画像の式)を右クリックして下さい。
  2. 挿入をクリック
  3. 敵キャラをクリック - 位置 - X座標を指定値と比較をクリック。比較方法を選択:から以上を選択
  4. 画面下の現在のオブジェクトからプレイヤーをクリック、位置 - X座標をクリック
  5. 下の通りに数式が入力されたらOKする

f:id:sakage24:20170814224222j:plain

以上で条件式が完成しました。もしこの条件式に当てはまったら、敵キャラを動かすようにしましょう。

f:id:sakage24:20170814224804p:plain

  1. 条件式と敵キャラが交じる部分を右クリック、位置 - 位置を選択をクリック
  2. 関連ボタンをクリックすると出てくる画面で、敵キャラをクリックしてOKする。x:0となっている部分に-1を入力すること。下記のとおりになればOK。

f:id:sakage24:20170814225702j:plain

注意

上記だけだと、敵キャラがプレイヤーの右側にいる場合にしか近づいてきませんので、反対の処理も実装しましょう。ほぼ上とやり方と一緒ですが、

上の条件式かつ敵キャラのX座標がプレイヤーのX座標以上ならば…

という部分を

上の条件式かつ敵キャラのX座標がプレイヤーのX座標より下ならば…

という風に読み替えれば逆の処理になるはずです。

動かしてみよう

f:id:sakage24:20170814225316g:plain

動いた~。これで少しはゲームっぽくなるはずですね。

終わり

以上になります。しかし、これだけの処理を実装するために散々調べまわることになるとは…w

もっとインディーゲームクリエイターが日本で流行して情報が増えるといいですね~!

しかし、条件式にelse句が無いのが本当に面倒ですね。何故かフラグに名前付けられないし…仕方がないのでコメントでラベル代わりにしています。

原始時代のプログラミングですよこれは!!

インディゲームクリエイター Clickteam Fusion2.5

インディゲームクリエイター Clickteam Fusion2.5

脚注   [ + ]

1. 打ち消し線の部分、よく考えたら要らないですね。余計でした…

コメントを残す

メールアドレスが公開されることはありません。