为什么我的Python龟屏不对称?

Why is my Python turtle screen asymmetrical?

我创建了一个乒乓球游戏,我注意到球拍在屏幕边缘的位置不均匀。

我创建了一个 800 像素宽的屏幕,并在 xcor = 380 和 xcor = -380 处放置了桨,但在屏幕上左桨显示了一些间隙,但右桨没有。我的屏幕不对称吗?我该如何解决?

screen.setup(width=800, height=600)
screen.bgcolor("black")
screen.title("PONG")
screen.tracer(0)

l_paddle = Paddle()
l_paddle.create_paddle((-380, 0))
r_paddle = Paddle()
r_paddle.create_paddle((380, 0))

screenshot of screen

当我们将 window 大小指定为 setup() 时,我们讨论的是屏幕上使用的总像素。由于在 window 周围有 chrome(边缘、标题栏等),我们必须处理的实际区域稍微小一些。试图将两只海龟正好放在左右边缘,忽略 chrome:

from turtle import Screen, Turtle

CURSOR_SIZE = 20

WIDTH, HEIGHT = 600, 400

screen = Screen()
screen.setup(WIDTH, HEIGHT)

l_paddle = Turtle('square')
l_paddle.fillcolor('white')
l_paddle.setx(CURSOR_SIZE/2 - WIDTH/2)

r_paddle = Turtle('square')
r_paddle.fillcolor('white')
r_paddle.setx(WIDTH/2 - CURSOR_SIZE/2)

screen.exitonclick()

我们得到的结果与您的相似:

如果我们补偿内部和外部 chrome 元素:

from turtle import Screen, Turtle

CURSOR_SIZE = 20
BORDER_SIZE = 2  # inside the window
CHROME_SIZE = 9  # around the window

WIDTH, HEIGHT = 600, 400

screen = Screen()
screen.setup(WIDTH, HEIGHT)

l_paddle = Turtle('square')
l_paddle.fillcolor('white')
l_paddle.setx(CURSOR_SIZE/2 - WIDTH/2 + BORDER_SIZE)

r_paddle = Turtle('square')
r_paddle.fillcolor('white')
r_paddle.setx(WIDTH/2 - CURSOR_SIZE/2 - BORDER_SIZE - CHROME_SIZE)

screen.exitonclick()

我们可以得到更精确的结果:

这里的问题是 chrome 的数量取决于系统,但 turtle 没有告诉我们要补偿多少。您也许可以从底层的 tkinter 代码中找到答案。

我的建议是尽可能估计最好的值,假设它在所有系统上都不准确,并远离边缘,这样问题就不那么大了。当标题栏是 chrome.

的一部分时,Y 维度的误差可能更大