我正在构建一个模拟器来协助我正在与 Uni 的一些人合作的项目。我正在用两个“玩家”(实际上是乐高机器人)制作本质上是足球场的动画。
我遇到的问题是,我用于绘图的坐标似乎是错误的,因为一切都比我想要的更靠后(在 x 和 y 中)绘制。例如,要在球场的远端绘制白线,我会这样做:
double X_RATIO = this.getSize().width / 244;
double Y_RATIO = this.getSize().height / 122;
g.fillRect((int) (243 * X_RATIO), (int) (0 * Y_RATIO), (int) (1 * X_RATIO), (int) (122 * Y_RATIO));
您可以看到,我根据当前尺寸缩放绘制的位置,因此我始终可以使用球场的标准尺寸作为我的坐标系(此处为 244 x 122)。然而,这条线是从面板右侧向后绘制至少 10 个像素(也是从底部向上大约 5 个像素)。
起初我认为这与转换有关,但我将其留到最后一秒(仅在平局阶段转换,位置无论如何都必须是 int)。有谁知道问题可能是什么?不用说这非常令人沮丧,因为我看不出我的数学有什么问题。
最佳答案
检查您的比率 X_RATIO 和 Y_RATIO,因为您在右侧使用了整数除法。您可以将其替换为
double X_RATIO = this.getSize().width / 244.0;
double Y_RATIO = this.getSize().height / 122.0;
获得正确的缩放行为。
关于java - Swing 绘制在不正确的坐标上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5225312/