Pygame屏幕角落碰撞失效问题求助
Pygame边界碰撞问题修复
问题
测试代码时,屏幕外围的边界碰撞功能在直接控制方块左/右/上/下移动时正常,能阻止方块越界。但当方块贴住左墙或右墙后,再按上/下键移动,方块会穿过边界,调整边界位置也无法解决问题。
原代码
import pygame # Initialize pygame pygame.init() # Create screen screen = pygame.display.set_mode((800, 600)) # Caption and Icon pygame.display.set_caption("Runes") icon = pygame.image.load("rune.png") pygame.display.set_icon(icon) # Player player_img = pygame.image.load("testcharacter.jpg") player_x = 370 player_y = 480 player_x_change = 0 player_y_change = 0 def player(x, y, x_change): screen.blit(player_img, (x, y)) running = True while running: screen.fill((0, 0, 0)) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: player_x_change = -0.1 if event.key == pygame.K_RIGHT: player_x_change = 0.1 if event.key == pygame.K_UP: player_y_change = -0.1 if event.key == pygame.K_DOWN: player_y_change = 0.1 if event.type == pygame.KEYUP: if event.key == pygame.K_LEFT: if player_x_change == 0.1: print("Right key still pressed") else: player_x_change = 0 if event.key == pygame.K_RIGHT: if player_x_change == -0.1: print("Left key still pressed") else: player_x_change = 0 if event.key == pygame.K_UP: if player_y_change == 0.1: print("Down key still pressed") else: player_y_change = 0 if event.key == pygame.K_DOWN: if player_y_change == -0.1: print("Up key still pressed") else: player_y_change = 0 player_x += player_x_change player_y += player_y_change # 原边界判断逻辑(存在问题) if player_x <= 5: player_x = 5 elif player_x >= 730: player_x = 730 elif player_y <= 5: player_y = 5 elif player_y >= 532: player_y = 532 player(player_x, player_y, player_x_change) pygame.display.update()
问题原因
边界判断使用了elif链式结构:当x轴触发边界条件(比如player_x <=5)时,后续的y轴边界判断会被跳过,导致y轴移动不受限制,方块会穿过上下边界。
修复方法
将边界判断的elif全部改为独立的if语句,确保x轴和y轴的边界检查都会执行:
# 修改后的边界判断逻辑 if player_x <= 5: player_x = 5 if player_x >= 730: player_x = 730 if player_y <= 5: player_y = 5 if player_y >= 532: player_y = 532
这样无论x轴是否触发边界,y轴的边界检查都会正常执行,方块贴住左右墙时上下移动也会被限制在边界内。
内容的提问来源于stack exchange,提问作者Liamo
相关产品推荐
相关产品推荐

