Project1

标题: RMMV玩家移动速度调成小数后产生BUG [打印本页]

作者: yurejian    时间: 2018-7-9 23:53
标题: RMMV玩家移动速度调成小数后产生BUG

觉得系统默认的玩家移动速度4太慢、5又太快,用脚本this._moveSpeed =4.5改了移动速度,但是会出现一个情况——在玩家移动过程中,其他所有NPC的图像会不断有1像素的偏移闪烁、玩家停止移动会复原,但如果是在无限循环的地图里偏移后甚至不会复原,有没大神知道这是什么情况的?
作者: 白嫩白嫩的    时间: 2018-7-10 14:01
是不是因为不是偶数的原因呢?改成4.4或者4.6如何?

ps:我纯属瞎猜支招喔
作者: yurejian    时间: 2018-7-10 17:04
白嫩白嫩的 发表于 2018-7-10 14:01
是不是因为不是偶数的原因呢?改成4.4或者4.6如何?

ps:我纯属瞎猜支招喔

试过一样,整数就没问题,小数就不行。
作者: 丶此生为伊人    时间: 2018-7-11 09:03
用像素移动吧,不过效果一样不太好。。
https://twitter.com/rev2nym
http://rev2nym.blog.fc2.com/
https://drive.google.com/drive/f ... eCWsUGdZbE9kOGphMWs
作者: yurejian    时间: 2018-7-11 10:41
丶此生为伊人 发表于 2018-7-11 09:03
用像素移动吧,不过效果一样不太好。。
https://twitter.com/rev2nym
http://rev2nym.blog.fc2.com/

像素移动就算了,容易卡墙。
作者: celica    时间: 2018-7-12 16:29
RM移动速度是倍数形式的
每格的像素是48
移速4 那就是2^4/256*48=3 每帧移动3像素 16帧移动完48像素
移速5 那就是2^5/256*48=6 每帧移动6像素   8帧移动完48像素

移速4.415那就是2^4.415/256*48≈4 每帧移动4像素   12帧移动完48像素
当然你打的小数越长越精准4.415003749927884

除了整数和特定小数外,不能在整数帧内移动完就会出现BUG


并且更改 this._moveSpeed 会对角色和事件同时生效,所有NPC的默认移速也变成了你设置的4.5
只更改角色需要在Game_Player.initMembers 里面新增一行this._moveSpeed
作者: yurejian    时间: 2018-7-12 23:20
celica 发表于 2018-7-12 16:29
RM移动速度是倍数形式的
每格的像素是48
移速4 那就是2^4/256*48=3 每帧移动3像素 16帧移动完48像素

十分感谢,不过我测试了下这个小数结果还是一样会闪烁,在无限循环的地图依旧会偏移。
Game_Player.prototype.initMembers = function() {
    Game_Character.prototype.initMembers.call(this);
    this._vehicleType = 'walk';
    this._vehicleGettingOn = false;
    this._vehicleGettingOff = false;
    this._dashing = false;
    this._needsMapReload = false;
    this._transferring = false;
    this._newMapId = 0;
    this._newX = 0;
    this._newY = 0;
    this._newDirection = 0;
    this._fadeType = 0;
    this._followers = new Game_Followers();
    this._encounterCount = 0;
    this._moveSpeed = 4.415003749927884;
};
应该是这样插入的吧~
作者: celica    时间: 2018-7-14 01:15
yurejian 发表于 2018-7-12 23:20
十分感谢,不过我测试了下这个小数结果还是一样会闪烁,在无限循环的地图依旧会偏移。
Game_Player.proto ...

因为是小数 所以移动时 总会变成x.000001或者x.9999999 造成没有在刚好的帧数内移动到位置
下面的函数是将接近的数,直接变为整数。如果你有更好的写法可以用别的

在Game_CharacterBase.updateMove最后一个判断之前加上以下内容

  1.         if (Math.abs(Math.round(this._realX) - this._realX) < 0.001) {this._realX = Math.round(this._realX);}
  2.         if (Math.abs(Math.round(this._realY) - this._realY) < 0.001) {this._realY = Math.round(this._realY);}
复制代码

我已测试没问题
还有偏移需要更改Game_Map,但由于小数位很长 凭人类是无法做到偏移达到一个像素的


回复之前的点评/256 是RM默认的写法 为的是倍数1 2 4 8 16 刚好让每个移动速度是之前的2倍,方便计算
作者: wr282828    时间: 2018-7-14 12:33
bilibi上 看了一期神仙狼的视频 里面有关于这个移动速度的调整视频 附上一点自己修改的地方  提供参考

object文件里

Game_CharacterBase.prototype.distancePerFrame = function() {
    if ($gameVariables.value(12) >= 0) {
        return Math.pow(2, this.realMoveSpeed()) / ($gameVariables.value(11)+ 56);     
    }
    else
        return Math.pow(2, this.realMoveSpeed()) / ($gameVariables.value(11)+ 312)
};




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1