ムノクラ様
ありがとうございます。
1行スクリプトで変更できたのですね。納得です。
ウェブサイト、開発時大変役立っていて1日何度も見てます。
ありがとうございました!
【解決済み】先頭になるアクターごとに歩行速度を変更する方法について
-
- 記事: 715
- 登録日時: 2018年12月23日(日) 13:55
Re: 先頭になるアクターごとに歩行速度を変更する方法について
こんばんは。
移動速度に小数点を入れ、ブレないようにするのは難しいです。
1フレームに何マス分移動するのかを計算する関数があって、その関数では次の計算式で計算がされています。
2 の 移動速度(ダッシュ時 +1)乗 ÷ 256
上の計算式の結果は、 1/m (mは正の整数) の形になっていることが好ましく、そうでない場合は、ブレる可能性が大きくなると思われます。
仮に移動速度に 2.5 が入った場合、
2 の 2.5 乗 ÷ 256 という計算になります。
2 の 2.5 乗 は指数法則 a の m 乗 × a の n 乗 = a の m+n 乗 から 2 の 2 乗 × 2 の 0.5 乗 と分解できます。
また、 2 の 0.5 乗 × 2 の 0.5 乗 が 2 の 1 乗 になるはずなので、
2 の 0.5 乗 は 2乗 して 2 になる数 つまり √2 ということになり、
2 の 2.5 乗は 4√2 ということになります。
4√2 ÷ 256 = √2 / 64 で 1/m の形にはなりませんので、ブレてしまいます。
0.5 以外でも √計算(3乗根とか4乗根とかそれ以上とか)が出てくるので同様です。
プラグインの内容を変更して、
上記計算式 に 倍率を設定して移動距離を変更する形ではどうだろうかと思いますが、
こちらも、倍率によっては 1/m の形にならないため、ブレる可能性があります。
どうしても、移動速度に関して、細かい設定をしたいのであれば、
移動速度を設定するのではなく、 1マスを移動するのにかかるフレーム数を設定する形にすれば、
細かい設定が可能かもしれません。
上記コードをプラグインファイル化、プラグインマネージャに登録し、
アクターのメモ欄に、
<マス移動フレーム数:通常時,ダッシュ時>
もしくは
<framePerDistance:通常時,ダッシュ時>
として、それぞれ1マス移動するのにかかるフレーム数を記入してみてください。
デフォルトは 通常時 16、 ダッシュ時 8 で設定されています。
フレーム数には整数のみ使用してください。
ムノクラ様の作成してくださったプラグインはOFFにしておいてください。
このプラグインで、アクターに設定した移動速度は無視されます。
これで、希望通りに細かく設定できるとよいのですが。
先にムノクラ様が回答されていることの補足になりますが、ネクロノ蜜柑 さんが書きました: ecf5DTTzl6h6lJj02様
ムノクラ様
この時は、対応ありがとうございました。お伺いしたい事がございまして再度コメントさせて頂きます。
アクターの移動スピードに関してなんですが推奨値:1から6のきりの良い数字だと極端に速いか極端に遅い感じなので、良い感じの速度にしたくて移動スピードの数字に小数点(2.5とか3.5)を入れてたら、ちゃんと反映されました。ただ小数点の入っているアクターを歩行させている場合に少し画面がブレる(アクターがちょっとブレる?)ような症状が出ました。この症状を回避する方法はございますか?
移動速度に小数点を入れ、ブレないようにするのは難しいです。
1フレームに何マス分移動するのかを計算する関数があって、その関数では次の計算式で計算がされています。
2 の 移動速度(ダッシュ時 +1)乗 ÷ 256
上の計算式の結果は、 1/m (mは正の整数) の形になっていることが好ましく、そうでない場合は、ブレる可能性が大きくなると思われます。
仮に移動速度に 2.5 が入った場合、
2 の 2.5 乗 ÷ 256 という計算になります。
2 の 2.5 乗 は指数法則 a の m 乗 × a の n 乗 = a の m+n 乗 から 2 の 2 乗 × 2 の 0.5 乗 と分解できます。
また、 2 の 0.5 乗 × 2 の 0.5 乗 が 2 の 1 乗 になるはずなので、
2 の 0.5 乗 は 2乗 して 2 になる数 つまり √2 ということになり、
2 の 2.5 乗は 4√2 ということになります。
4√2 ÷ 256 = √2 / 64 で 1/m の形にはなりませんので、ブレてしまいます。
0.5 以外でも √計算(3乗根とか4乗根とかそれ以上とか)が出てくるので同様です。
プラグインの内容を変更して、
上記計算式 に 倍率を設定して移動距離を変更する形ではどうだろうかと思いますが、
こちらも、倍率によっては 1/m の形にならないため、ブレる可能性があります。
どうしても、移動速度に関して、細かい設定をしたいのであれば、
移動速度を設定するのではなく、 1マスを移動するのにかかるフレーム数を設定する形にすれば、
細かい設定が可能かもしれません。
コード: 全て選択
(function() {
'use strict'
const _Game_CharacterBase_distancePerFrame = Game_CharacterBase.prototype.distancePerFrame;
Game_CharacterBase.prototype.distancePerFrame = function() {
if (this.constructor === Game_Player || this.constructor === Game_Follower) {
let leader = $gameParty.leader();
let metaElements = leader ? (leader.actor().meta['framePerDistance'] || leader.actor().meta['マス移動フレーム数'] || '16,8') : '16,8';
metaElements = metaElements.split(',');
if (metaElements.length !== 2) {
console.error("マス移動フレーム数(framePerDistance)の指定が正しくありません");
metaElements = ['16', '8'];
}
let framePerDistance = metaElements.map(element => {
element.trim();
return Number(element)
});
if (!Number.isInteger(framePerDistance[0]) || !Number.isInteger(framePerDistance[1])) {
console.error("マス移動フレーム数(framePerDistance)に小数が入力されています。");
framePerDistance = [16, 8];
}
return 1.0 / ($gamePlayer.isDashing() ? framePerDistance[1] : framePerDistance[0]);
} else {
return _Game_CharacterBase_distancePerFrame.call(this, arguments);
}
};
})();
アクターのメモ欄に、
<マス移動フレーム数:通常時,ダッシュ時>
もしくは
<framePerDistance:通常時,ダッシュ時>
として、それぞれ1マス移動するのにかかるフレーム数を記入してみてください。
デフォルトは 通常時 16、 ダッシュ時 8 で設定されています。
フレーム数には整数のみ使用してください。
ムノクラ様の作成してくださったプラグインはOFFにしておいてください。
このプラグインで、アクターに設定した移動速度は無視されます。
これで、希望通りに細かく設定できるとよいのですが。
Re: 先頭になるアクターごとに歩行速度を変更する方法について
ムノクラ さんが書きました:完全にカンですが、完全に回避する方法はないと思います。ネクロノ蜜柑 さんが書きました: ecf5DTTzl6h6lJj02様
ムノクラ様
この時は、対応ありがとうございました。お伺いしたい事がございまして再度コメントさせて頂きます。
アクターの移動スピードに関してなんですが推奨値:1から6のきりの良い数字だと極端に速いか極端に遅い感じなので、良い感じの速度にしたくて移動スピードの数字に小数点(2.5とか3.5)を入れてたら、ちゃんと反映されました。ただ小数点の入っているアクターを歩行させている場合に少し画面がブレる(アクターがちょっとブレる?)ような症状が出ました。この症状を回避する方法はございますか?
小数点以下の数値を偶数にするとマシになるかも知れません。
ムノクラ様
小数点以下の数字をつける場合は偶数だとマシになるんですね。
了解です!いつもご返信ありがとうございます。
Re: 先頭になるアクターごとに歩行速度を変更する方法について
ecf5DTTzl6h6lJj02 さんが書きました:こんばんは。先にムノクラ様が回答されていることの補足になりますが、ネクロノ蜜柑 さんが書きました: ecf5DTTzl6h6lJj02様
ムノクラ様
この時は、対応ありがとうございました。お伺いしたい事がございまして再度コメントさせて頂きます。
アクターの移動スピードに関してなんですが推奨値:1から6のきりの良い数字だと極端に速いか極端に遅い感じなので、良い感じの速度にしたくて移動スピードの数字に小数点(2.5とか3.5)を入れてたら、ちゃんと反映されました。ただ小数点の入っているアクターを歩行させている場合に少し画面がブレる(アクターがちょっとブレる?)ような症状が出ました。この症状を回避する方法はございますか?
移動速度に小数点を入れ、ブレないようにするのは難しいです。
1フレームに何マス分移動するのかを計算する関数があって、その関数では次の計算式で計算がされています。
2 の 移動速度(ダッシュ時 +1)乗 ÷ 256
上の計算式の結果は、 1/m (mは正の整数) の形になっていることが好ましく、そうでない場合は、ブレる可能性が大きくなると思われます。
仮に移動速度に 2.5 が入った場合、
2 の 2.5 乗 ÷ 256 という計算になります。
2 の 2.5 乗 は指数法則 a の m 乗 × a の n 乗 = a の m+n 乗 から 2 の 2 乗 × 2 の 0.5 乗 と分解できます。
また、 2 の 0.5 乗 × 2 の 0.5 乗 が 2 の 1 乗 になるはずなので、
2 の 0.5 乗 は 2乗 して 2 になる数 つまり √2 ということになり、
2 の 2.5 乗は 4√2 ということになります。
4√2 ÷ 256 = √2 / 64 で 1/m の形にはなりませんので、ブレてしまいます。
0.5 以外でも √計算(3乗根とか4乗根とかそれ以上とか)が出てくるので同様です。
プラグインの内容を変更して、
上記計算式 に 倍率を設定して移動距離を変更する形ではどうだろうかと思いますが、
こちらも、倍率によっては 1/m の形にならないため、ブレる可能性があります。
どうしても、移動速度に関して、細かい設定をしたいのであれば、
移動速度を設定するのではなく、 1マスを移動するのにかかるフレーム数を設定する形にすれば、
細かい設定が可能かもしれません。上記コードをプラグインファイル化、プラグインマネージャに登録し、コード: 全て選択
(function() { 'use strict' const _Game_CharacterBase_distancePerFrame = Game_CharacterBase.prototype.distancePerFrame; Game_CharacterBase.prototype.distancePerFrame = function() { if (this.constructor === Game_Player || this.constructor === Game_Follower) { let leader = $gameParty.leader(); let metaElements = leader ? (leader.actor().meta['framePerDistance'] || leader.actor().meta['マス移動フレーム数'] || '16,8') : '16,8'; metaElements = metaElements.split(','); if (metaElements.length !== 2) { console.error("マス移動フレーム数(framePerDistance)の指定が正しくありません"); metaElements = ['16', '8']; } let framePerDistance = metaElements.map(element => { element.trim(); return Number(element) }); if (!Number.isInteger(framePerDistance[0]) || !Number.isInteger(framePerDistance[1])) { console.error("マス移動フレーム数(framePerDistance)に小数が入力されています。"); framePerDistance = [16, 8]; } return 1.0 / ($gamePlayer.isDashing() ? framePerDistance[1] : framePerDistance[0]); } else { return _Game_CharacterBase_distancePerFrame.call(this, arguments); } }; })();
アクターのメモ欄に、
<マス移動フレーム数:通常時,ダッシュ時>
もしくは
<framePerDistance:通常時,ダッシュ時>
として、それぞれ1マス移動するのにかかるフレーム数を記入してみてください。
デフォルトは 通常時 16、 ダッシュ時 8 で設定されています。
フレーム数には整数のみ使用してください。
ムノクラ様の作成してくださったプラグインはOFFにしておいてください。
このプラグインで、アクターに設定した移動速度は無視されます。
これで、希望通りに細かく設定できるとよいのですが。
ecf5DTTzl6h6lJj02様
ご丁寧に細かなところまで、ご説明ありがとうございます!難しい内容でしたが、なんとなく納得出来ました。
ecf5DTTzl6h6lJj02様のつけて頂いたコードをプラグインファイル化したら、ブレずに細かな調節が出来ました!
この度は対応して頂きありがとうございましたm(__)m感謝です。