移動ルートの設定のスクリプトが上手くウェイトできません

返信する
ヒンバス
記事: 12
登録日時: 2021年1月24日(日) 06:44

移動ルートの設定のスクリプトが上手くウェイトできません

投稿記事 by ヒンバス »

初めて投稿させていただきます。
ヒンバスと申します。

this.character($gameVariables.value(6)).forceMoveRoute({
"list":[{"code":45,"parameters":
["this.moveStraight(this.findDirectionTo($gameVariables.value(3),$gameVariables.value(4)));"]},
{"code":0}],
"repeat":true,
"skippable":false})
this._character = this.character($gameVariables.value(6))
this.setWaitMode('route')

上記のように「変数6に代入されているIDのイベントを変数3、変数4に代入されたX軸Y軸に移動」という処理をさせたいのですが、移動自体は最後までするのですが、移動後に次の処理に進まず、操作ができなくなってしまいます(恐らくウェイトがかかりっぱなしになってしまっている?)

移動中はウェイトにして指定位置に移動後、次の処理する…という処理をさせるためにはどうしたらいいでしょうか?
お力添えいただけると幸いです
アバター
ムノクラ
記事: 2118
登録日時: 2018年2月23日(金) 11:41
連絡する:

Re: 移動ルートの設定のスクリプトが上手くウェイトできません

投稿記事 by ムノクラ »

ヒンバス さんが書きました:初めて投稿させていただきます。
ヒンバスと申します。

this.character($gameVariables.value(6)).forceMoveRoute({
"list":[{"code":45,"parameters":
["this.moveStraight(this.findDirectionTo($gameVariables.value(3),$gameVariables.value(4)));"]},
{"code":0}],
"repeat":true,
"skippable":false})
this._character = this.character($gameVariables.value(6))
this.setWaitMode('route')

上記のように「変数6に代入されているIDのイベントを変数3、変数4に代入されたX軸Y軸に移動」という処理をさせたいのですが、移動自体は最後までするのですが、移動後に次の処理に進まず、操作ができなくなってしまいます(恐らくウェイトがかかりっぱなしになってしまっている?)

移動中はウェイトにして指定位置に移動後、次の処理する…という処理をさせるためにはどうしたらいいでしょうか?
お力添えいただけると幸いです
下記のイベントを組むことで解決できたと思います。

コード: 全て選択

◆変数の操作:#0006 イベントID = 1
◆変数の操作:#0003 目標X = 10
◆変数の操作:#0004 目標Y = 5
◆ラベル:Start
◆スクリプト:this.character($gameVariables.value(6)).forceMoveRoute({
:     :    "list": [
:     :        { "code": 45, "parameters": ["this.moveStraight(this.findDirectionTo($gameVariables.value(3),$gameVariables.value(4)));"] },
:     :    ],
:     :    "repeat": false,
:     :    "skippable": false
:     :});
◆変数の操作:#0011 現在X = this.character($gameVariables.value(6)).x;
◆変数の操作:#0012 現在Y = this.character($gameVariables.value(6)).y;
◆条件分岐:目標X ≠ 現在X
  ◆ラベルジャンプ:Start
  ◆
:分岐終了
◆条件分岐:目標Y ≠ 現在Y
  ◆ラベルジャンプ:Start
  ◆
:分岐終了
JavaScriptコード

コード: 全て選択

this.character($gameVariables.value(6)).forceMoveRoute({
    "list": [
        { "code": 45, "parameters": ["this.moveStraight(this.findDirectionTo($gameVariables.value(3),$gameVariables.value(4)));"] },
    ],
    "repeat": false,
    "skippable": false
});
ここに至るまでの経緯です。

rpg_objects.js 内の Game_Character.prototype.processMoveCommand に移動ルートのコードが書かれていて、45がスクリプトの実行であることを確認。

http://rpgmaker-script-wiki.xyz/moverout_mv.php
を参考に、完了時に{"code":0}を入れる必要がある。

しかし、wikiには繰り返しONの例がありませんでした。

そこで下記を実行したところ、どうやら「繰り返しONの中に{"code":0}が入っていても完了せずに繰り返し続けるらしい」ということが分かりました。
完了処理のコードは実行しているのも確認(console出力)しましたが、先に実行するだけで、リピートが永遠に終わらない事が根本的な原因のようです。
下記を実行してみると分かります。

コード: 全て選択

this.character($gameVariables.value(6)).forceMoveRoute({
    "list": [{ "code": 1 }, { "code": 2 }, { "code": 0 }],
    "repeat": true,
    "skippable": false
});
this._character = this.character($gameVariables.value(6));
this.setWaitMode('route');
なので、アイディアとして
移動中のリピートを切る
一歩ずつイベント座標を取得
目的の座標と同一でなければ、次の一歩をさせる。同一であれば完了する
というような処理に分けて組んだのが冒頭のイベントです。

ツクールのスクリプトの行数が限られているため、この全てをJavaScriptで解決したければ、プラグインコマンドとしてプラグインを作成するのが現実的だと思います。
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
jp_asty
記事: 81
登録日時: 2019年11月12日(火) 15:34

Re: 移動ルートの設定のスクリプトが上手くウェイトできません

投稿記事 by jp_asty »

こんにちは。

既に回答が付いているようでしたが、別の方法としてスクリプトだけで解決できる方法を載せて置こうと思います。
スクリプトのコードを

コード: 全て選択

this.character($gameVariables.value(6)).forceMoveRoute({
"list":[{"code":45,"parameters":
["this.moveStraight(this.findDirectionTo($gameVariables.value(3), $gameVariables.value(4))); this._moveRoute.repeat = !this.pos($gameVariables.value(3), $gameVariables.value(4));"]},
{"code":0}],
"repeat":true,
"skippable":false})
this._character = this.character($gameVariables.value(6));
this.setWaitMode('route');
に置き換えることでリピートが自動で切れるようになると思います。
(evalの中で改行ができなかったので、スクリプト内のコードは1行で書く必要があります)

ご参考まで。
---------------------------------------------------------------------------------------------
プラグイン置き場 : https://github.com/ste0/RPG-Maker-MV-Plugins
アバター
ムノクラ
記事: 2118
登録日時: 2018年2月23日(金) 11:41
連絡する:

Re: 移動ルートの設定のスクリプトが上手くウェイトできません

投稿記事 by ムノクラ »

jp_asty さんが書きました:こんにちは。

既に回答が付いているようでしたが、別の方法としてスクリプトだけで解決できる方法を載せて置こうと思います。
スクリプトのコードを

コード: 全て選択

this.character($gameVariables.value(6)).forceMoveRoute({
"list":[{"code":45,"parameters":
["this.moveStraight(this.findDirectionTo($gameVariables.value(3), $gameVariables.value(4))); this._moveRoute.repeat = !this.pos($gameVariables.value(3), $gameVariables.value(4));"]},
{"code":0}],
"repeat":true,
"skippable":false})
this._character = this.character($gameVariables.value(6));
this.setWaitMode('route');
に置き換えることでリピートが自動で切れるようになると思います。
(evalの中で改行ができなかったので、スクリプト内のコードは1行で書く必要があります)

ご参考まで。
なるほど!
勉強になりました!
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
ヒンバス
記事: 12
登録日時: 2021年1月24日(日) 06:44

Re: 移動ルートの設定のスクリプトが上手くウェイトできません

投稿記事 by ヒンバス »

ムノクラ様、jp_asty様ご返信ありがとうございました!
ご教授頂いたスクリプトに変更してみたところ、思った通りの処理をすることができました!
お二人に助言いただきとても助かりました!本当にありがとうございました!
アバター
ムノクラ
記事: 2118
登録日時: 2018年2月23日(金) 11:41
連絡する:

Re: 移動ルートの設定のスクリプトが上手くウェイトできません

投稿記事 by ムノクラ »

jp_asty さんが書きました:こんにちは。

既に回答が付いているようでしたが、別の方法としてスクリプトだけで解決できる方法を載せて置こうと思います。
スクリプトのコードを

コード: 全て選択

this.character($gameVariables.value(6)).forceMoveRoute({
"list":[{"code":45,"parameters":
["this.moveStraight(this.findDirectionTo($gameVariables.value(3), $gameVariables.value(4))); this._moveRoute.repeat = !this.pos($gameVariables.value(3), $gameVariables.value(4));"]},
{"code":0}],
"repeat":true,
"skippable":false})
this._character = this.character($gameVariables.value(6));
this.setWaitMode('route');
に置き換えることでリピートが自動で切れるようになると思います。
(evalの中で改行ができなかったので、スクリプト内のコードは1行で書く必要があります)

ご参考まで。
質問の中で、質問主でない者が質問をしてしまうマナー違反をお許しください。

これって、意外と汎用性があると感じています。
(ランダムに動かしていたイベントが会話後に指定の場所へ移動するなど、ありがちだと思いますが、指定の場所に移動するために、ランダムに動かさないでいる人は多そうな気がします。)

で、プラグインコマンドにしようとしたら、「this」のところでエラーになってしまうのですが、どのように書き換えたら良いのでしょうか?
可能であれば、見本をいただければ(作っていただければ)幸いです。
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
jp_asty
記事: 81
登録日時: 2019年11月12日(火) 15:34

Re: 移動ルートの設定のスクリプトが上手くウェイトできません

投稿記事 by jp_asty »

これって、意外と汎用性があると感じています。
(ランダムに動かしていたイベントが会話後に指定の場所へ移動するなど、ありがちだと思いますが、指定の場所に移動するために、ランダムに動かさないでいる人は多そうな気がします。)

で、プラグインコマンドにしようとしたら、「this」のところでエラーになってしまうのですが、どのように書き換えたら良いのでしょうか?
可能であれば、見本をいただければ(作っていただければ)幸いです。
作成してみました。
コマンド一つで障害物を避けて目的地まで移動してくれるので、たしかに汎用性は高いかもしれません。
使用法はプラグインの説明欄を御覧ください。
MoveXY.js
(2.4 KiB) ダウンロード数: 131 回
---------------------------------------------------------------------------------------------
プラグイン置き場 : https://github.com/ste0/RPG-Maker-MV-Plugins
アバター
ムノクラ
記事: 2118
登録日時: 2018年2月23日(金) 11:41
連絡する:

Re: 移動ルートの設定のスクリプトが上手くウェイトできません

投稿記事 by ムノクラ »

jp_asty さんが書きました:
これって、意外と汎用性があると感じています。
(ランダムに動かしていたイベントが会話後に指定の場所へ移動するなど、ありがちだと思いますが、指定の場所に移動するために、ランダムに動かさないでいる人は多そうな気がします。)

で、プラグインコマンドにしようとしたら、「this」のところでエラーになってしまうのですが、どのように書き換えたら良いのでしょうか?
可能であれば、見本をいただければ(作っていただければ)幸いです。
作成してみました。
コマンド一つで障害物を避けて目的地まで移動してくれるので、たしかに汎用性は高いかもしれません。
使用法はプラグインの説明欄を御覧ください。

MoveXY.js
ありがとうございます。
勉強させていただきます!
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
アバター
ムノクラ
記事: 2118
登録日時: 2018年2月23日(金) 11:41
連絡する:

Re: 移動ルートの設定のスクリプトが上手くウェイトできません

投稿記事 by ムノクラ »

作成してみました。
コマンド一つで障害物を避けて目的地まで移動してくれるので、たしかに汎用性は高いかもしれません。
使用法はプラグインの説明欄を御覧ください。

MoveXY.js
中を拝見して、自分が何をミスしていたのか理解できました。
なんという…文字列の中に変数を書き込むという「動くわけない」ことをやっていました…
「また、thisの意味が分からないから、動かせないのか!」と思い込んでおりました。

勉強になりました。
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
返信する

“MV:質問”に戻る