【解決済み】マップを読み込み直したい。

sou_sitaku

ユーザー
この質問(イベントでタイルを追加・変更したい。)に関係します。
最終的にやりたいことは「マップタイルを変更すること」です。

僕はマップタイルを変更し、セーブ&ロードやマップ切り替え、メニューの開閉に対応すること自体は、
「あるスイッチがONであれば、そのマップ、その座標、そのレイヤーのタイルマップを指定されたIDのタイルマップに変更する」というプラグインを作成し、これはほとんど出来上がっています。

ただ、一つ引っかかっているところがあります。
要件的には無視しても構わないのですが、「スイッチをオフにしたとき、即座にタイルマップの変更がクリアする」ということができないのです。
スイッチをオフにした後、メニュー開閉をしたりすると「タイルマップの変更のクリア」が反映されるのですが、スイッチをオフにするプラグインコマンドの処理内でそれをできるようにしたいのです。

方法はいくつか考えていますが、たいてい何も起こらないか、「それはファンクションじゃない」ってエラーで怒られるか(これは私のオブジェクト指向への理解が足りないからですが)、妙な結果が出るかです。

理想は「メニュー画面を閉じたときのマップの読み込み直し」を再現することです。
もしくは、mapXXX.jsonから元のタイルマップIDを拾ってきて、変更し直すかだと思っています。

お知恵を貸していただけないでしょうか? よろしくお願いいたします。
 

panda

ユーザー
$gameMap.requestRefresh();
でスイッチ等の状態を即座にマップに反映できたかと思います。
こちら試してみてはいかがでしょうか?
 

sou_sitaku

ユーザー
$gameMap.requestRefresh();
でスイッチ等の状態を即座にマップに反映できたかと思います。
こちら試してみてはいかがでしょうか?
ご返信ありがとうございます。

でも、だめでした。
リファレンスによると【 $gameMap.requestRefresh(); 】は予約をするだけなのでダメなのかと思って【 $gameMap.refreshIfNeeded(); 】も並べてみたんですけど、いけませんね……。
 

DarkPlasma

ユーザー
requestRefresh はマップ上のイベントをリフレッシュするだけなので、タイルセットには何も影響しません。
$dataMap を直接書き換える手法だと、その変更を即座に画面に反映するのは厳しいものがあります。
強引にやるにしても、 Tilemap, Spriteset_Map, Scene_Map への理解が不可欠です。

透明なイベントを重ねてしまう方法がシンプルな気はします。
MV用なんで動くか試さないといけませんが、イベントの位置記録プラグインをMZで動かせれば、マップロードの度に位置がリセットされる問題は解決できます。
 

sou_sitaku

ユーザー
requestRefresh はマップ上のイベントをリフレッシュするだけなので、タイルセットには何も影響しません。
$dataMap を直接書き換える手法だと、その変更を即座に画面に反映するのは厳しいものがあります。
強引にやるにしても、 Tilemap, Spriteset_Map, Scene_Map への理解が不可欠です。

透明なイベントを重ねてしまう方法がシンプルな気はします。
MV用なんで動くか試さないといけませんが、イベントの位置記録プラグインをMZで動かせれば、マップロードの度に位置がリセットされる問題は解決できます。
ありがとうございます。
試したところ、MZでも動いていました。
元々やりたかったことは、完全解決しますね。

あと「セーブをする」という工程がかなり参考になりそうです。
自分が作っていたプラグインでも「もともとのタイルセットを読み取ってセーブしておく」ということができれば$datamap.dataで上書きすることで即座に戻すという行為はできそう。
 

sou_sitaku

ユーザー
蒼竜様の45.「ゲーム内マップタイル動的置換」プラグインをおすすめします。ツクールでシムシティ!?今注目の蒼竜様のプラグイン
https://dragonflare.blue/dcave/index.php
ご紹介ありがとうございます。サンプルゲームも見たし、スクリプトものぞいてみましたし、参考PDFも読んでみたんですが、

そのままプラグインとして使う方法すら分からないです……。

イベントもスイッチのON/OFFをしているだけに見えるし、コモンイベントを使って内部処理をしているわけではない。パラメータの設定値もない。他のマップからコピーしてきている、という理屈は分からないではないのですが。あのPDFに書かれているタグやスクリプトはどこに書くのか……!?
 
最後に編集:

sou_sitaku

ユーザー
一応解決しました。 「マップタイルの変更の解除 → 読み込み直し」ではなく「元のマップタイルIDを保存しておく → 解除時に元のマップタイルで上書きする」という方法ですが……。
詳しくはこちらの投稿をご覧ください。
 
トップ