|
发表于 2022-10-17 08:59:10
|
显示全部楼层
- 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,得到的就是左右两边的边距。继而我们可以得到这样的表达式:游戏窗口宽度 = 左边距 + 矩形宽度 + 右边距。由于左右边距相等,所以矩形就居中显示了。现在可以理解了吗? |
|