查看: 5347|回复: 10

[有事请教] RMMV玩家移动速度调成小数后产生BUG

[复制链接]
梦石
0
星屑
889
在线时间
99 小时
注册时间
2016-11-26
回帖
10
发表于 2018-7-9 23:53:26 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×

觉得系统默认的玩家移动速度4太慢、5又太快,用脚本this._moveSpeed =4.5改了移动速度,但是会出现一个情况——在玩家移动过程中,其他所有NPC的图像会不断有1像素的偏移闪烁、玩家停止移动会复原,但如果是在无限循环的地图里偏移后甚至不会复原,有没大神知道这是什么情况的?
梦石
0
星屑
3922
在线时间
1198 小时
注册时间
2016-8-9
回帖
2355

开拓者

发表于 2018-7-10 14:01:53 | 显示全部楼层
是不是因为不是偶数的原因呢?改成4.4或者4.6如何?

ps:我纯属瞎猜支招喔
酸酸甜甜就④哇噢
回复

使用道具 举报

梦石
0
星屑
889
在线时间
99 小时
注册时间
2016-11-26
回帖
10
 楼主| 发表于 2018-7-10 17:04:42 | 显示全部楼层
白嫩白嫩的 发表于 2018-7-10 14:01
是不是因为不是偶数的原因呢?改成4.4或者4.6如何?

ps:我纯属瞎猜支招喔

试过一样,整数就没问题,小数就不行。
回复

使用道具 举报

梦石
0
星屑
5333
在线时间
454 小时
注册时间
2017-9-27
回帖
69
发表于 2018-7-11 09:03:43 | 显示全部楼层
用像素移动吧,不过效果一样不太好。。
https://twitter.com/rev2nym
http://rev2nym.blog.fc2.com/
https://drive.google.com/drive/f ... eCWsUGdZbE9kOGphMWs
回复

使用道具 举报

梦石
0
星屑
889
在线时间
99 小时
注册时间
2016-11-26
回帖
10
 楼主| 发表于 2018-7-11 10:41:24 | 显示全部楼层
丶此生为伊人 发表于 2018-7-11 09:03
用像素移动吧,不过效果一样不太好。。
https://twitter.com/rev2nym
http://rev2nym.blog.fc2.com/

像素移动就算了,容易卡墙。

点评

基本无解,你改移速,移动起来,周围的东西认真看也有卡顿现象  发表于 2018-7-11 17:56
回复

使用道具 举报

梦石
0
星屑
566
在线时间
46 小时
注册时间
2017-10-23
回帖
12
发表于 2018-7-12 16:29:08 | 显示全部楼层
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

点评

话说这个除256是什么情况啊  发表于 2018-7-12 23:54

评分

参与人数 1赞 +1 收起 理由
白嫩白嫩的 + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
889
在线时间
99 小时
注册时间
2016-11-26
回帖
10
 楼主| 发表于 2018-7-12 23:20:17 | 显示全部楼层
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;
};
应该是这样插入的吧~
回复

使用道具 举报

梦石
0
星屑
566
在线时间
46 小时
注册时间
2017-10-23
回帖
12
发表于 2018-7-14 01:15:56 | 显示全部楼层
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倍,方便计算
回复 1 0

使用道具 举报

梦石
0
星屑
3291
在线时间
350 小时
注册时间
2018-3-28
回帖
189
发表于 2018-7-14 12:33:46 | 显示全部楼层
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)
};
用mv做了两款游戏,有兴趣的可以瞧一瞧:
《有毛病》--- 休闲、探索、策略、剧情、恐怖 都有那么一些,就是没有战斗。挺骚挺有意思的一个游戏。
steam链接:点击这里


《留离》--- 探索、高自由度、ARPG、战斗,就是没有啥剧情。
steam链接:点击这里
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部