为什么我的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 维度的误差可能更大
我创建了一个乒乓球游戏,我注意到球拍在屏幕边缘的位置不均匀。
我创建了一个 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 维度的误差可能更大