如何在Pygame中实现玩家触碰屏幕边界时瞬移至对侧?
Pygame实现玩家屏幕侧瞬移(吃豆人侧门机制)
要实现吃豆人里的侧门瞬移,核心是允许玩家移出屏幕边界,当完全移出时将其位置重置到屏幕另一侧。以下是修改后的完整代码,关键改动已标注:
import pygame white=(255,255,255) yellow=(255,255,102) black=(0,0,0) red=(213,50,80) green=(0,255,0) blue=(50,153,213) dis_width, dis_height = 1920, 1080 # 修正拼写错误:witdh → width dis = pygame.display.set_mode((dis_width, dis_height)) pygame.display.set_caption("") fps = 60 velocity = 6 player_width = 10 # 修正拼写错误:witdh → width player_height = 10 def draw_window(player): # 修正拼写错误:widow → window dis.fill(black) pygame.draw.rect(dis, white, player) # 直接传入player Rect对象更简洁 pygame.display.update() def movement(keys_pressed, player): # 移除原有的屏幕边界限制,允许玩家移出屏幕 if keys_pressed[pygame.K_a]: player.x -= velocity if keys_pressed[pygame.K_d]: player.x += velocity if keys_pressed[pygame.K_w]: player.y -= velocity if keys_pressed[pygame.K_s]: player.y += velocity if keys_pressed[pygame.K_ESCAPE]: pygame.quit() exit() # 退出程序,避免后续代码报错 def main(): player = pygame.Rect(dis_width/2, dis_height/2, player_width, player_height) clock = pygame.time.Clock() run = True while run: clock.tick(fps) for event in pygame.event.get(): if event.type == pygame.QUIT: run = False keys_pressed = pygame.key.get_pressed() movement(keys_pressed, player) # 核心:处理侧门瞬移逻辑 # 当玩家完全移出左侧屏幕,瞬移到右侧 if player.right < 0: player.left = dis_width # 当玩家完全移出右侧屏幕,瞬移到左侧 elif player.left > dis_width: player.right = 0 draw_window(player) pygame.quit() if __name__ == "__main__": main()
关键改动说明:
- 移除移动限制:删掉原代码中限制玩家不能出屏幕的条件(比如
player.x-velocity>-1),让玩家可以自由移出屏幕。 - 添加瞬移逻辑:在移动完成后,通过
player.right和player.left判断玩家是否完全移出屏幕边界,若是则将其位置重置到另一侧。 - 修正拼写错误:比如
dis_witdh→dis_width、draw_widow→draw_window,避免潜在bug。 - 优化绘制代码:直接传入
playerRect对象给pygame.draw.rect,比手动拆分坐标更简洁可靠。
内容的提问来源于stack exchange,提问作者tesco
相关产品推荐
相关产品推荐

