赞 | 26 |
VIP | 0 |
好人卡 | 0 |
积分 | 70 |
经验 | 0 |
最后登录 | 2024-5-6 |
在线时间 | 640 小时 |
Lv4.逐梦者
- 梦石
- 0
- 星屑
- 6964
- 在线时间
- 640 小时
- 注册时间
- 2012-7-29
- 帖子
- 173
|
本帖最后由 开关关 于 2020-3-19 03:22 编辑
几天前拜读了Drill_up大佬的代码,认为大佬的代码比我的逻辑通顺了很多,也更加合理。于是我套用了大佬的代码,但是发现抖动现象反而又出现了。
此处有直接套用的大佬的代码
此处有三张动图
总觉得大佬的代码缺了什么东西。_(:з」∠)_
抖动和移动时偏移的现象出现频率较高。因为除法必然出现的误差可能偏大可能偏小,我在之前修改的代码中加入了“允许误差”(叫做“手动增加误差”更合适),让计算结果必然偏大。具体实现就是每次移动时加入一个不影响整体的小值,但是这个小值会使整体不容易出现歧义。这个步骤让镜头移动的像素更加可控,有可能消除歧义。加入以后,抖动的问题得到很大缓解,几乎不出现了,而且移动时偏移的出现频率也得到降低。
移动结束后还会偏移一个像素现象的出现频率比较中等。我猜测大佬设计每次最少移动1/4像素,就是为了既能避免镜头移动多了偏移一整个像素,又能在镜头移动少半个像素时给予补齐。但是测试表明,有时出现一个像素的偏移时,y2和this.centerY()的值竟然是相等的,这样这个错误就十分狡猾地绕过了大佬设置的矫正程序。于是我加了个镜头移动停止后的矫正程序,一旦x2,y2分别与this.centerX(),this.centerY()相等,就对$gameMap._displayX,$gameMap._displayY取四舍五入的整数,对坐标进行矫正。
此处有再次修改的代码
最终运行的效果终于跟此楼引用的楼层(4楼)里面那个效果图一样了。经测试这些改动与镜头墙功能不冲突,与看向事件功能未知。但是测试过程中一直没离开出生点太远,如果有积少成多的错误,暂时还看不出来。
最后再次感谢Drill_up大佬的指引。
|
|