import sys
import pygame
# 游戏窗口的宽度和高度
SCREEN_WIDTH = 300
SCREEN_HEIGHT = 400
# 矩形的宽度和高度
RECT_WIDTH = 50
RECT_HEIGHT = 80
# 设置颜色
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 设置游戏背景为白色
screen.fill(WHITE)
# 绘制第一个红色矩形,坐标为(SCREEN_WIDTH//2, 50)
pygame.draw.rect(
screen, RED,
(SCREEN_WIDTH//2, 50, RECT_WIDTH, RECT_HEIGHT) # 前两个数字表示位置,后两个表示大小
)
# 绘制第二个绿色矩形,坐标为((SCREEN_WIDTH-RECT_WIDTH)//2, 150)
pygame.draw.rect(
screen, GREEN,
((SCREEN_WIDTH-RECT_WIDTH)//2, 150, RECT_WIDTH, RECT_HEIGHT) # 前两个数字表示位置,后两个表示大小
)
pygame.display.flip()
两个绘制在游戏窗口中的矩形它们的大小相同,只有颜色与位置不一样。运行程序你会发现绿色的矩形确实处于游戏窗口中间位置,而红色则不是。
原因在于,你在计算矩形的横坐标时把矩形看作了一个点。如果绘制一个点,那么用self.width//2确实就是横坐标的值,但别忘了我们绘制的是矩形,矩形自身是有宽度的。不考虑宽度就会导致最终矩形偏右而不是在正中间。
(self.width - self.rect.width) // 2意思就是先用游戏窗口的宽度减去矩形的宽度,这个差值就是矩形距离游戏窗口边缘的总边距,然后把总边距除以2,得到的就是左右两边的边距。继而我们可以得到这样的表达式:游戏窗口宽度 = 左边距 + 矩形宽度 + 右边距。由于左右边距相等,所以矩形就居中显示了。现在可以理解了吗? |