长话短说,在过去的 2-3 天里,我一直在解决我的图形计算器中的一个错误,该错误是在我实现一个新的窗口调整大小侦听器时出现的。错误是当我慢慢调整窗口大小时,功能不会正确转换,如果我快速移动它,它们会很好地转换。我查看了我所有的公式和算法,一切都在现场(与我之前的窗口大小调整方法相同)。每当宽度发生变化时,我都会将其变化的差异除以 2 并将图形移动该数量。真的很简单。
double changeX = (newCanvasWidth - canvasWidth)/2;
double changeY = (newCanvasHeight - canvasHeight)/2;
这工作得很好,并且使我需要忽略它作为近 3 天的罪魁祸首所需要的所有合乎逻辑的意义。它是如此的天真,以至于我几乎重写了我的整个程序来尝试解决这个问题,从补偿算法到预测这些错误并修复它们的所有新方法。它变成了一场噩梦,令人难以置信的烦人。在放弃完全的希望之前,我决定再次调查这个问题,彻底追踪与此相关的每一个计算并输出这些计算的结果,我发现了一些奇怪的东西。每当(newCanvasWidth - canvasWidth)之间的差异是奇数时,我没有得到整数末尾的一半。
因此,如果它们之间的差异是 15,changeX 将反映 7。最麻烦的是当差异为 1 时,changeX 将是 0。
在发现这一点后,我当然尝试了显而易见的事情并输入了减法。
double changeX = (double)(newCanvasWidth - canvasWidth)/2;
double changeY = (double)(newCanvasHeight - canvasHeight)/2;
瞧,我的问题解决了!
我不明白的是为什么这不会自动发生。此外,如果这只是我将不得不为所有时间做出调整的事情,那么限制在哪里?有没有办法知道你什么时候需要输入像这样的简单计算?