设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

如何解决无限图层和像素移动同时使用带来的事件抖动问题

查看数: 271 | 评论数: 2 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2024-12-6 14:48

正文摘要:

本帖最后由 astercanary 于 2024-12-6 15:01 编辑 如题,在同时使用无限图层和像素移动后,在移动,尤其是斜向移动时,事件抖动非常厉害 像素移动插件是dotmove,检查之后事件本身没有抖动,是无限图层添加的远景 ...

回复

astercanary 发表于 2024-12-16 18:41:54
给出参考用的代码吧
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. };
astercanary 发表于 2024-12-16 18:37:39
问题解决了,刷新问题太麻烦了,直接用代码重新定义地图与事件位置完事了
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-11 20:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表