【解決済み】イベントオプションの「足踏みアニメ」を止める方法

返信する
白白白
記事: 62
登録日時: 2024年2月28日(水) 22:35

【解決済み】イベントオプションの「足踏みアニメ」を止める方法

投稿記事 by 白白白 »

新たなトピックを失礼致します。

私は、のん様の「MenucallCommon」プラグインでオリジナルメニューを表示しており、メニュー背景は半透明でマップが透けて見えるようにしています。そのメニューを開いている際、マップ上のイベントの自律移動は止まるのですが、足踏みアニメは継続して再生され続けているのが気になりました。そこで、全ての足踏みアニメを一括で止める方法(スクリプト等)があればご教示を、無ければスイッチオンオフ等で管理できるプラグインを作成して頂けないかと思っております。どうかよろしくお願い致します。
最後に編集したユーザー 白白白 [ 2024年12月20日(金) 10:24 ], 累計 3 回
アバター
くろうど
記事: 318
登録日時: 2016年1月22日(金) 20:52
お住まい: 東京都
連絡する:

Re: イベントオプションの「足踏みアニメ」を止める方法

投稿記事 by くろうど »

全てのイベントの足踏みアニメを一括で止めるスクリプトであれば以下になるかと思います。

コード: 全て選択

$gameMap.events().forEach(e => e.setStepAnime(false));
▼だいたいTwitterにいます。たぶん。
https://twitter.com/kuroudo119
白白白
記事: 62
登録日時: 2024年2月28日(水) 22:35

Re: イベントオプションの「足踏みアニメ」を止める方法

投稿記事 by 白白白 »

>> くろうど さん
ご返信を頂きありがとうございます。
ご教示頂いた通りに実行したところ、無事に足踏みアニメの停止と再開をすることができました。
ありがとうございました。
最後に編集したユーザー 白白白 [ 2024年12月19日(木) 21:09 ], 累計 1 回
白白白
記事: 62
登録日時: 2024年2月28日(水) 22:35

Re: イベントオプションの「足踏みアニメ」を止める方法

投稿記事 by 白白白 »

すみません、解決済みとしていたのですが新たな問題が発生したため、追記させて頂きました。

スクリプト「$gameMap.events().forEach(e => e.setStepAnime(false));」で足踏みアニメを止めてから「$gameMap.events().forEach(e => e.setStepAnime(true));」で足踏みアニメを再開すると、イベントオプションの足踏みアニメにチェックを入れていないイベントも足踏みをするようになってしまうようです。

足踏みアニメにチェックを入れているイベントのみ足踏みアニメを再開する方法がありましたらご教示頂けますと幸いです。

あとこれはできればなのですが、足踏みアニメを止める際に、止めた時点での足踏みアニメの状態で止められると嬉しいです。(「$gameMap.events().forEach(e => e.setStepAnime(false));」で止めると、どのタイミングで止めても、最初に設定してあるキャラチップの状態で固定されます)
アバター
くろうど
記事: 318
登録日時: 2016年1月22日(金) 20:52
お住まい: 東京都
連絡する:

Re: イベントオプションの「足踏みアニメ」を止める方法

投稿記事 by くろうど »

スクリプト「$gameMap.events().forEach(e => e.setStepAnime(false));」で足踏みアニメを止めてから「$gameMap.events().forEach(e => e.setStepAnime(true));」で足踏みアニメを再開すると、イベントオプションの足踏みアニメにチェックを入れていないイベントも足踏みをするようになってしまうようです。
こちらは想定通りです。
最初の質問に『止める方法』と書かれていたのでその通りにしておきました。
ちゃんと動作確認できていて素晴らしいと思いますが、質問の時点で想像力があると尚良しでしょうか。
足踏みアニメにチェックを入れているイベントのみ足踏みアニメを再開する方法がありましたらご教示頂けますと幸いです。
これはひと手間かかりまして、スクリプトでは以下になると思いますが、動作確認はお任せします。

尚、こちらも『足踏みアニメにチェックを入れているイベントのみ』を字義通り受け取りまして、「移動ルートの設定」で足踏みアニメのON/OFFを変更した場合は対象外です。

コード: 全て選択

const pages = $dataMap.events.filter(e=>!!e).map(e=>e.pages);
const indexList = $gameMap.events().map(e=>e._pageIndex);
const animeList = [];
indexList.forEach((e,i)=>animeList.push(pages[i][e].stepAnime));
$gameMap.events().forEach((e,i)=>e.setStepAnime(animeList[i]));
あとこれはできればなのですが、足踏みアニメを止める際に、止めた時点での足踏みアニメの状態で止められると嬉しいです。(「$gameMap.events().forEach(e => e.setStepAnime(false));」で止めると、どのタイミングで止めても、最初に設定してあるキャラチップの状態で固定されます)
こちらは分かりません。
▼だいたいTwitterにいます。たぶん。
https://twitter.com/kuroudo119
白白白
記事: 62
登録日時: 2024年2月28日(水) 22:35

Re: イベントオプションの「足踏みアニメ」を止める方法

投稿記事 by 白白白 »

>> くろうど さん

想像力の足りない質問をしてしまいお恥ずかしいです。
そんな私に引き続きお付き合い頂けることに感謝致します。

コード: 全て選択

const pages = $dataMap.events.filter(e=>!!e).map(e=>e.pages);
const indexList = $gameMap.events().map(e=>e._pageIndex);
const animeList = [];
indexList.forEach((e,i)=>animeList.push(pages[i][e].stepAnime));
$gameMap.events().forEach((e,i)=>e.setStepAnime(animeList[i]));
上記のコードをスクリプトにて動作確認をさせて頂いたところ、「Cannot read property 'stepAnime' of undefined」のエラーが発生しました。
アバター
くろうど
記事: 318
登録日時: 2016年1月22日(金) 20:52
お住まい: 東京都
連絡する:

Re: イベントオプションの「足踏みアニメ」を止める方法

投稿記事 by くろうど »

まぁ、エラソーに言ったものの私もこの原因は分からないんですけどね……。

コード: 全て選択

const pages = $dataMap.events.filter(e=>!!e).map(e=>e.pages);
const indexList = $gameMap.events().map(e=>e._pageIndex);
const animeList = [];
indexList.forEach((e,i)=>animeList.push(pages[i][e]?.stepAnime));
$gameMap.events().forEach((e,i)=>e.setStepAnime(animeList[i]));
とりあえず、エラー回避で「?」を足してみましたが、正常に動作するかは分かりません。

最初の質問で『メニュー』という話があったので、スクリプトを使っているSceneがマップではない場合、$dataMap もしくは $gameMap が空っぽであることが考えられます。

コード: 全て選択

console.log($dataMap);
console.log($gameMap);
などにより内容を確認してください。

値が入っていない場合は私の方では対応できません。
▼だいたいTwitterにいます。たぶん。
https://twitter.com/kuroudo119
白白白
記事: 62
登録日時: 2024年2月28日(水) 22:35

Re: イベントオプションの「足踏みアニメ」を止める方法

投稿記事 by 白白白 »

>> くろうど さん

コード: 全て選択

const pages = $dataMap.events.filter(e=>!!e).map(e=>e.pages);
const indexList = $gameMap.events().map(e=>e._pageIndex);
const animeList = [];
indexList.forEach((e,i)=>animeList.push(pages[i][e]?.stepAnime));
$gameMap.events().forEach((e,i)=>e.setStepAnime(animeList[i]));
上記のスクリプトを試行したところ、エラー内容が「Unexpected token」に変わりました。

コード: 全て選択

console.log($dataMap);
console.log($gameMap);
上記のスクリプトを試行したところ、以下のような値?が入っていました。
Object VM460:1
Game_Map VM460:2
chro
記事: 106
登録日時: 2021年2月14日(日) 11:26

Re: イベントオプションの「足踏みアニメ」を止める方法

投稿記事 by chro »

こちら、最終的にプラグインでしか解決できないと思います。

> 止めた時点での足踏みアニメの状態で止められる
足踏みアニメを一時停止させる機能だと思います。

こちらのプラグインを試してみてください。
指定したスイッチがオンの間、足踏みアニメを一時停止状態にします。
一時停止状態にするだけなので、移動ルートやスクリプトで変更した場合にも対応します。
スクリプトのsetStepAnimeは不要です。スイッチのオンオフのみで動作します。




くろうどさんの件

おそらくイベントID基準の配列と、fillterやpush、events()の配列のインデックスがズレて、存在しない配列のindexになっていると思います。


コアスクリプトで以下のメソッドがあります。

コード: 全て選択

Game_Event.prototype.event = function() {
    return $dataMap.events[this._eventId];
};

Game_Event.prototype.page = function() {
    return this.event().pages[this._pageIndex];
};
それを使えば、実は、これだけですみます。

イベントページの足踏みアニメの設定状態を復元する

コード: 全て選択

$gameMap.events().forEach(e => e.setStepAnime(e.page() && e.page().stepAnime));
追記:書き忘れましたが、イベントの一時消去を行った場合も、_pageIndexが-1となり、ページ番号が存在しない状態となります。
イベントを動的に生成・消去するプラグインを使った場合は、必ずズレるし$datamapと一致しません。

イベントページの足踏みアニメの設定状態を復元するスクリプトは、一時消去に対応するよう修正しました。
添付ファイル
DisableStepAnimeSwitch.js
(955 バイト) ダウンロード数: 8 回
白白白
記事: 62
登録日時: 2024年2月28日(水) 22:35

Re: イベントオプションの「足踏みアニメ」を止める方法

投稿記事 by 白白白 »

>> chro さん

ご返信を頂きありがとうございます。
添付して頂いたプラグインを試行したところ、理想通りの挙動をすることができました。
くろうどさん、chroさんのお二人には感謝を申し上げます。本当にありがとうございました。
返信する

“MV:質問”に戻る