设为首页收藏本站同能贴吧 切换语言 繁体中文
开启辅助访问 切换到窄版
扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 132|回复: 0

[转载发布] Event Jitter Fix / Display Rounding Error Fix

[复制链接]
累计送礼:
0 个
累计收礼:
1 个
  • TA的每日心情
    开心
    2026-7-12 04:10
  • 签到天数: 209 天

    连续签到: 2 天

    [LV.7]常住居民III

    9071

    主题

    864

    回帖

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    7
    卡币
    58883
    OK点
    16
    推广点
    0
    同能卷
    50
    积分
    68848

    灌水之王

    发表于 2026-7-31 21:47:04 | 显示全部楼层 |阅读模式
    Scroll down to the red bolded text if you just want the fix.

    Recently it was brought to my attention that when scrolling the map with a lot of events on screen, the events would "jump" by a single pixel and would be improperly positioned.  I initially shrugged this off as lag, but when I saw the same effects on my absolutely awesome machine I wasn't quite sure what was up.  I decided I would look into it a little bit more.  When I tried to recreate it on my own by packing a screen full of events and then scrolling I was unable to reproduce the results.  It wasn't until I tested the issue with the demo in a related topic that I noticed the issue seemed to have to do with slow speed panning.

    Essentially what I discovered is that events and the tilemap were rounding extremely low values from "display_x" and "display_y" differently.  The tilemap always rounded up while characters/events always rounded down.  What do I mean by extremely low values?  Because of the formula used to calculate scroll distance (2 ** @scroll_speed / 256.0) the display points can end up being values such as 15.5 pixels.  As mentioned earlier, the tilemap would round this up to 16 while the events would round this down to 15.  This would cause events to display 1 pixel away from where they were supposed to.

    To fix the issue I modified two things to ensure that tilemaps and events would always get the same value.  First of all I added two methods to replace the normal reader methods for the displays.  In these I just multiplied by 32, used .floor to round down, switched it back to a floating point value, and divided it by 32.  This ensured that when received by anything that might use the display values, it was always rounded to the lowest values without any further need for coercing.  Secondly, I modified the two "adjust" methods used to determine the X and Y positions of events to reference the new reader methods rather than using the variable directly.

    Anyway, all that done, here's the snippet.  Be sure to place this under materials and above all additional custom scripts since this is meant to be a bugfix of the default scripts.

    Pastebin link: http://pastebin.com/XDd0tVWJ

    Full Script:

    Spoiler                Code:       
    1. ##------## Display rounding error fix created by Neon Black.#### When certain slow display panning speeds are used, events will improperly## round floating values to determine their position on screen.  This causes## them to appear off from the tilemap by a single pixel.  Though minor this is## noticable.  This snippet fixes this behaviour.#### This snippet may be used in any project.##------ class Game_Map ## Rounds X and Y display values DOWN so the nearest 32 is found.  def display_x    (@display_x * 32).floor.to_f / 32  end    def display_y    (@display_y * 32).floor.to_f / 32  end    def adjust_x(x)    if loop_horizontal? && x < display_x - (width - screen_tile_x) / 2      x - display_x + @map.width    else      x - display_x    end  end    def adjust_y(y)    if loop_vertical? && y < display_y - (height - screen_tile_y) / 2      y - display_y + @map.height    else      y - display_y    end  endend
    复制代码








    本贴来自国际rpgmaker官方论坛作者:Neon Black处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/event-jitter-fix-display-rounding-error-fix.17448/
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    简体中文
    繁體中文
    English(英语)
    日本語(日语)
    Deutsch(德语)
    Русский язык(俄语)
    بالعربية(阿拉伯语)
    Türkçe(土耳其语)
    Português(葡萄牙语)
    ภาษาไทย(泰国语)
    한어(朝鲜语/韩语)
    Français(法语)
    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2026-8-17 21:14 , Processed in 0.135351 second(s), 54 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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