如何解决如何为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()
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 举报,一经查实,本站将立刻删除。