Project1

标题: 如何解决无限图层和像素移动同时使用带来的事件抖动问题 [打印本页]

作者: astercanary    时间: 2024-12-6 14:48
标题: 如何解决无限图层和像素移动同时使用带来的事件抖动问题
本帖最后由 astercanary 于 2024-12-6 15:01 编辑

如题,在同时使用无限图层和像素移动后,在移动,尤其是斜向移动时,事件抖动非常厉害
像素移动插件是dotmove,检查之后事件本身没有抖动,是无限图层添加的远景图层在地图移动时会造成错位
有什么办法,或什么插件可以解决这个问题吗

抖动.gif (1.93 MB, 下载次数: 17)

抖动.gif

作者: astercanary    时间: 2024-12-16 18:37
问题解决了,刷新问题太麻烦了,直接用代码重新定义地图与事件位置完事了
作者: astercanary    时间: 2024-12-16 18:41
给出参考用的代码吧
JS 代码复制下载
  1. var ULDS = ULDS || {};
  2. ULDS.JitterFix = {};
  3. ULDS.JitterFixPlus = 1 / 1000000;    // 误差值
  4. ULDS.JitterFix.Parameters = PluginManager.parameters('JitterFix');
  5. ULDS.JitterFix.TileSize = Number(ULDS.JitterFix.Parameters["Tile Size"]) || 48;
  6.  
  7. // 修改地图的显示坐标
  8. Game_Map.prototype.displayX = function() {
  9.     return Math.floor(this._displayX * ULDS.JitterFix.TileSize) / ULDS.JitterFix.TileSize;
  10. };// 消除移动带来的误差,消除小数
  11.  
  12. Game_Map.prototype.displayY = function() {
  13.     return Math.floor(this._displayY * ULDS.JitterFix.TileSize) / ULDS.JitterFix.TileSize;
  14. };
  15.  
  16. Game_Map.prototype.adjustX = function(x) {
  17.     if (this.isLoopHorizontal() &&  x < (this.displayX() - (this.width() -  ULDS.JitterFix.TileSize) / 1000000)) {
  18.         x -= this.displayX() + this.width()-ULDS.JitterFixPlus;
  19.     } else {
  20.         x -= this.displayX();
  21.     }
  22.     return x;  // 消除精度误差
  23. };
  24.  
  25. Game_Map.prototype.adjustY = function(y) {
  26.     if (this.isLoopVertical() && y < (this.displayY() - (this.height() - ULDS.JitterFix.TileSize) / 1000000)) {
  27.         y -= this.displayY() + this.height()-ULDS.JitterFixPlus;
  28.     } else {
  29.         y -= this.displayY();       
  30.     }
  31.     return y;
  32. };
  33.  
  34. // 同步事件的显示坐标
  35. Game_Map.prototype.displayX = function() {
  36.     return Math.floor(this._displayX * ULDS.JitterFix.TileSize) / ULDS.JitterFix.TileSize;
  37. };
  38.  
  39. Game_Map.prototype.displayY = function() {
  40.     return Math.floor(this._displayY * ULDS.JitterFix.TileSize) / ULDS.JitterFix.TileSize;
  41. };
  42.  
  43. // 修改 Game_Event 中的事件显示坐标
  44. Game_Event.prototype.screenX = function() {
  45.     // 修正事件的显示位置,确保与地图完全对齐
  46.     return (this._realX +0.5- $gameMap.displayX()) * ULDS.JitterFix.TileSize;
  47. };
  48.  
  49. Game_Event.prototype.screenY = function() {
  50.     // 同样,修正事件的显示位置,确保与地图完全对齐
  51.     return (this._realY +1- $gameMap.displayY()) * ULDS.JitterFix.TileSize;
  52. };
  53.  
  54. // 更新事件的屏幕坐标
  55. Game_Event.prototype.updateScreenPosition = function() {
  56.     // 直接设置事件的显示坐标,保持与地图位置绑定
  57.     this._screenX = this.screenX();
  58.     this._screenY = this.screenY();
  59. };





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