Pygame中小圆圈无法循环移动问题求助及代码排查
调试你的Pygame移动圆形问题
嘿,我一眼就揪出问题所在啦——你的蓝色小圆圈没法移动,核心原因是你把x和y的初始化放在了while循环里面!
给你拆解下逻辑:每次while循环迭代的时候,你都会重新执行x=600和y=250,这就意味着不管上一次循环里x和y加了多少,下一次循环一开始它们就被打回原形了,自然看起来完全没移动。
修复方案
把x、y还有dx、dy的初始定义移到while循环外面,这样它们的值就能在每次循环中持续累加更新了。修改后的代码如下:
import pygame pygame.init() screen = pygame.display.set_mode((1600,900)) red=(255,0,0) blue=(0,0,204) white=(255,255,255) pygame.display.set_caption("Orbit") gameLoop=True clock=pygame.time.Clock() # 把变量初始化移到循环外,避免每次被重置 x=600 y=250 dx=10 dy=10 while gameLoop: for event in pygame.event.get(): if (event.type==pygame.QUIT): gameLoop=False # 现在x和y会持续累加,不会被重置了 x += dx y += dy screen.fill(white) pygame.draw.circle(screen,red,[800,450],50,0) pygame.draw.circle(screen,blue,[x,y],10,0) pygame.display.update() clock.tick(50) pygame.quit()
额外小提示(实现真正的循环移动)
如果你的目标是让蓝色圆圈在屏幕内循环移动(比如碰到边缘后从对面重新出现),可以在更新x和y后加个边界判断,比如:
# 超出屏幕右边界就回到左边 if x > 1600: x = 0 # 超出屏幕下边界就回到顶部 if y > 900: y = 0 # 同理可以补充左边界和上边界的判断 if x < 0: x = 1600 if y < 0: y = 900
这样就能完美实现你想要的循环移动效果啦!
内容的提问来源于stack exchange,提问作者user226147
相关产品推荐
相关产品推荐

