微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何为pygame添加边框

如何解决如何为pygame添加边框

我尝试了很多网站,但仍然无法找到任何东西。所有在线教程都没有帮助。我刚刚开始学习 python,每次我尝试移动它都会超出边界。我已经尝试了基本上所有的在线指南,但遇到了一个错误.......................


pygame.init()

screen_width = 800
screen_height = 600

window = pygame.display.set_mode((screen_width,screen_height))
pygame.display.set_caption('Test')

bg_color1 = (135,142,142)  #MAIN BG COLOR
bg_color2 = (255,0)     #red
bg_color3 = (255,255,0)   #yellow

clock = pygame.time.Clock()
crashed = False
UFO = pygame.image.load('ufo.png')
rect = UFO.get_rect()
obstacle = pygame.Rect(400,200,80,80)


def car(x,y):
   window.blit(UFO,(x,y))


x = (screen_width * 0.45)
y = (screen_height * 0.8)
x_change = 0
car_speed = 0
y_change = 0

while not crashed:
   for event in pygame.event.get():
       if event.type == pygame.QUIT:
           crashed = True

       ############SIDE TO SIDE################
       if event.type == pygame.KEYDOWN:
           if event.key == pygame.K_LEFT:
               x_change = -5
           elif event.key == pygame.K_RIGHT:
               x_change = 5
       if event.type == pygame.KEYUP:
           if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
               x_change = 0
       ###########UP AND DOWN#################
       if event.type == pygame.KEYDOWN:
           if event.key == pygame.K_UP:
               y_change = -5
           elif event.key == pygame.K_DOWN:
               y_change = 5
       if event.type == pygame.KEYUP:
           if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
               y_change = 0
   ##
   x += x_change
   y += y_change
   ##
   window.fill(bg_color1)
   car(x,y)

   pygame.display.update()
   clock.tick(100)

pygame.quit()
quit()

解决方法

检查坐标是否小于 0 或大于屏幕的宽度或高度。如果超出范围限制坐标:

while not crashed:
   # [...]
 
   x += x_change
   if x < 0:
       x = 0
   elif x > screen_width - UFO.get_width():
       x = screen_width - UFO.get_width()

   y += y_change
   if y < 0:
       y = 0
   elif y > screen_height - UFO.get_height():
       y = screen_height - UFO.get_height()

您可以使用 minmax 函数简化代码:

while not crashed:
   # [...]

   x = max(0,min(screen_width  - UFO.get_width(),x + x_change))
   y = max(0,min(screen_height - UFO.get_height(),y + y_change))

另一种选择是使用 pygame.Rect 对象和 clamp_ip。见clamp_ip

将矩形内部移动到另一个位置

while not crashed:
   # [...]

   x += x_change
   y += y_change

   border_rect = window.get_rect()
   ufo_rect = UFO.get_rect(topleft = (x,y))
   ufo_rect.clamp_ip(border_rect)
   x,y = ufo_rect.topleft

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。