【解決済み】プレイヤー接触で逃げるイベントが端に来たらすり抜けさせたい

ちゅうと
記事: 21
登録日時: 2020年11月29日(日) 22:01

【解決済み】プレイヤー接触で逃げるイベントが端に来たらすり抜けさせたい

投稿記事by ちゅうと » 2021年5月05日(水) 23:48

プレイヤー接触で逃げるイベントを
トリアコンタン様のプラグインを利用し、複製していく予定です。

プレイヤー接触で逃げるイベントは作れましたが、
イベントが端に来た時にイベントが動けなくなります。

イベントが動けない状況になったらすり抜けてプレイヤーの後ろ側に移動させたいのですが
そのような動作はどのように組めばいいのでしょうか。

イベントは向き固定で以下のように作成しています。

◆条件分岐:プレイヤーが下を向いている
◆移動ルートの設定:このイベント (飛ばす)
:        :◇下に移動

:それ以外のとき
◆条件分岐:プレイヤーが左を向いている
◆移動ルートの設定:このイベント (飛ばす)
:        :◇左に移動

:それ以外のとき
◆条件分岐:プレイヤーが右を向いている
◆移動ルートの設定:このイベント (飛ばす)
:        :◇右に移動

:それ以外のとき
◆条件分岐:プレイヤーが上を向いている
◆移動ルートの設定:このイベント (飛ばす)
:        :◇上に移動

:分岐終了

:分岐終了

:分岐終了

:分岐終了
最後に編集したユーザー ちゅうと on 2021年5月08日(土) 12:46 [ 編集 1 回目 ]

sally
記事: 119
登録日時: 2019年8月06日(火) 05:11

Re: プレイヤー接触で逃げるイベントが端に来たらすり抜けさせたい

投稿記事by sally » 2021年5月06日(木) 14:04

単純な方法でよいなら

1. イベントに触れて移動する前に、イベントの現在x座標とy座標をそれぞれ変数0001と0002に取得する
2. 移動処理の後、変数0003と0004にイベントのx座標とy座標に取得する
3. 0001と0003、0002と0004を比べて同値であればすり抜けをオンにしてアクター方向へ移動させる
→比較の方法は色々ありますが、0001-0003、0002-0004をそれぞれ行い、共に0ならという条件分岐を組めばよいかと。

の方法で可能かと思います。

組み方の詳細をお望みでしたら、追記しますのでお気軽にどうぞ。

追記
よく考えなくても、減算の必要なかったですね…。
ムノクラ さんのご提示されたサンプルで気づきました。

あと、変数の操作がひとつ増えますが
片方の座標を0001に代入後に100倍し、もう片方の座標を加算。
移動後に0002にも同様の処理をすることで、使う変数を2つにすることも可能です。
ご参考まで。
最後に編集したユーザー sally on 2021年5月06日(木) 22:02 [ 編集 1 回目 ]
アバター
ムノクラ
記事: 2011
登録日時: 2018年2月23日(金) 11:41
連絡を取る:

Re: プレイヤー接触で逃げるイベントが端に来たらすり抜けさせたい

投稿記事by ムノクラ » 2021年5月06日(木) 14:47

ちゅうと さんが書きました:プレイヤー接触で逃げるイベントを
トリアコンタン様のプラグインを利用し、複製していく予定です。

プレイヤー接触で逃げるイベントは作れましたが、
イベントが端に来た時にイベントが動けなくなります。

イベントが動けない状況になったらすり抜けてプレイヤーの後ろ側に移動させたいのですが
そのような動作はどのように組めばいいのでしょうか。

イベントは向き固定で以下のように作成しています。

◆条件分岐:プレイヤーが下を向いている
◆移動ルートの設定:このイベント (飛ばす)
:        :◇下に移動

:それ以外のとき
◆条件分岐:プレイヤーが左を向いている
◆移動ルートの設定:このイベント (飛ばす)
:        :◇左に移動

:それ以外のとき
◆条件分岐:プレイヤーが右を向いている
◆移動ルートの設定:このイベント (飛ばす)
:        :◇右に移動

:それ以外のとき
◆条件分岐:プレイヤーが上を向いている
◆移動ルートの設定:このイベント (飛ばす)
:        :◇上に移動

:分岐終了

:分岐終了

:分岐終了

:分岐終了

試しに作ってみたのですが、複雑な条件を考慮すると、とても難しいというのが分かりました。

多分、概ね下記で上手く動作するかと思います。
しかし、サンプルを見ていただくと、「この時どうするの?」という挙動になります。
Map001.zip
(1.1 KiB) ダウンロード数: 0 回


1.隊列歩行ONだとフォロワーが邪魔してしまうので、その部分を追加する必要があります。
2.イベント同士がぶつかるとどうなるか…考慮して組んでいないので、変な挙動だと思います。
3.プレイヤーをすり抜けて反対側に行った先がイベントや壁だったら…


できるだけ基本機能で作りましたが、行き止まりの判定だけはスクリプトを使わないと難しそうでした。

どうしても、一時的に向き固定をOFFにする必要があるので、できればキャラクターの方を加工して全方向同じキャラにすることで、見かけだけ向き固定っぽくするほうが簡単に実装できると思います。

ちなみに
$gameMap.isPassable($gameVariables.value(1), $gameVariables.value(2), $gameVariables.value(3));

$gameMap.isPassable(x,y,d)
が元です。
x,y座標のタイルがdの値2,4,6,8(方向:下左右上、テンキーの配置です)に進行可能か判断するスクリプトです。
もしかしたら、変数3が上下左右逆かも知れない(検証が甘くてすいません)ので、その場合は
◆変数の操作:#0003 = 10 - $gameVariables.value(3)
を入れてください。

コード: 全て選択

◆変数の操作:#0001 = このイベントのマップX
◆変数の操作:#0002 = このイベントのマップY
◆変数の操作:#0003 = プレイヤーの向き
◆条件分岐:プレイヤーが下を向いている
  ◆変数の操作:#0002 += 1
  ◆
:分岐終了
◆条件分岐:プレイヤーが左を向いている
  ◆変数の操作:#0001 -= 1
  ◆
:分岐終了
◆条件分岐:プレイヤーが右を向いている
  ◆変数の操作:#0001 += 1
  ◆
:分岐終了
◆条件分岐:プレイヤーが上を向いている
  ◆変数の操作:#0002 -= 1
  ◆
:分岐終了
◆条件分岐:スクリプト:$gameMap.isPassable($gameVariables.value(1), $gameVariables.value(2), $gameVariables.value(3));
  ◆移動ルートの設定:このイベント
  :        :◇プレイヤーから遠ざかる
  ◆
:それ以外のとき
  ◆移動ルートの設定:このイベント
  :        :◇向き固定OFF
  :        :◇プレイヤーの方を向く
  :        :◇すり抜けON
  :        :◇一歩前進
  :        :◇一歩前進
  :        :◇すり抜けOFF
  :        :◇向き固定ON
  ◆
:分岐終了



※「プレイヤーから遠ざかる」を使う解説は、初心者講座にあります。
https://tkool.jp/mv/guide/006_003q.html


追記

書き終えたらsally氏が書いていましたね…
こちらの内容だとスクリプトが要らないのと、他イベントが邪魔で動かないケースも対応できて、より簡潔になりそうです。
(ツクラーとしての発想力レベルの差が明らかに…)

Map001sally.zip
(1007 バイト) ダウンロード数: 3 回

コード: 全て選択

◆変数の操作:#0001 = このイベントのマップX
◆変数の操作:#0002 = このイベントのマップY
◆移動ルートの設定:このイベント (飛ばす, ウェイト)
:        :◇プレイヤーから遠ざかる
◆変数の操作:#0003 = このイベントのマップX
◆変数の操作:#0004 = このイベントのマップY
◆条件分岐:#0001 = #0003
  ◆条件分岐:#0002 = #0004
    ◆移動ルートの設定:このイベント
    :        :◇向き固定OFF
    :        :◇プレイヤーの方を向く
    :        :◇すり抜けON
    :        :◇一歩前進
    :        :◇一歩前進
    :        :◇すり抜けOFF
    :        :◇向き固定ON
    ◆
  :分岐終了
  ◆
:分岐終了
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
ちゅうと
記事: 21
登録日時: 2020年11月29日(日) 22:01

Re: プレイヤー接触で逃げるイベントが端に来たらすり抜けさせたい

投稿記事by ちゅうと » 2021年5月08日(土) 12:46

返信が遅れて申し訳ありません。
イベントの座標位置取得をどこか実施するのか分からず時間がかかってしまいました。
変数操作のキャラクターにあるとは思いつきませんでした…。

sally様
回答ありがとうございます!
無事、問題なく組むことができました。本当にありがとうございます!!

あと、変数の操作がひとつ増えますが
片方の座標を0001に代入後に100倍し、もう片方の座標を加算。
移動後に0002にも同様の処理をすることで、使う変数を2つにすることも可能です。
ご参考まで。

1つの変数にXとYの両方を入れるんですね。私にはない発想でした!すごいです!
利用する変数を減らすことができるのは助かるので、
1つの変数にXXYYみたいに4桁で入れたいと思います!

ムノクラ様
回答ありがとうございます!
また、具体的な例もありがとうございます!

トリアコンタン様の半歩移動を利用しているからか、
移動距離を倍以上にしないと思った通りの動作になりませんでした。
このイベントは半歩移動しないようにしていたのですが、動作したので問題ないです。
移動歩数は伸びましたが希望していた動作ができました!うれしいです。

最終的に、以下のようにしています。

コード: 全て選択

◆変数の操作:#0001 イベント位置XY = このイベントのマップX
◆変数の操作:#0001 イベント位置XY *= 1000
◆変数の操作:#0001 イベント位置XY += このイベントのマップY
◆移動ルートの設定:このイベント (飛ばす, ウェイト)
:        :◇プレイヤーから遠ざかる
:        :◇プレイヤーから遠ざかる
◆変数の操作:#0002 移動後のイベント位置XY = このイベントのマップX
◆変数の操作:#0002 移動後のイベント位置XY *= 1000
◆変数の操作:#0002 移動後のイベント位置XY += このイベントのマップY
◆条件分岐:イベント位置XY = 移動後のイベント位置XY
  ◆移動ルートの設定:このイベント (ウェイト)
  :        :◇向き固定OFF
  :        :◇プレイヤーの方を向く
  :        :◇すり抜けON
  :        :◇一歩前進
  :        :◇一歩前進
  :        :◇一歩前進
  :        :◇一歩前進
  :        :◇すり抜けOFF
  :        :◇向き固定ON
  ◆
:分岐終了



お二人とも、本当にありがとうございました!

“MV:質問” へ戻る