Pygame中Sprite无法仅上下循环移动,而是全屏往复问题求助
解决Sprite仅上下循环移动的问题
你的代码现在同时处理了水平和垂直两个方向的移动与反弹,这就是为什么精灵会在整个窗口内来回跑。要实现纯上下循环移动,只需要修改两处:
- 把水平方向的速度设为0,也就是
speed = [0, 2],这样精灵不会左右移动 - 删除水平方向碰撞反弹的判断代码(就是判断
birdrect.left < 0 or birdrect.right > width的那段)
修改后的完整代码:
import sys, pygame pygame.init() size = width, height = 500, 500 speed = [0, 2] # 水平速度设为0,仅保留垂直方向速度 blue = 85, 118, 250 screen = pygame.display.set_mode(size) bird = pygame.image.load("bird-sprite.png") birdrect = bird.get_rect() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() birdrect = birdrect.move(speed) # 只保留垂直方向的碰撞反弹逻辑 if birdrect.top < 0 or birdrect.bottom > height: speed[1] = -speed[1] screen.fill(blue) screen.blit(bird, birdrect) pygame.display.flip()
简单解释下:
speed[0]控制水平移动速度,设为0后精灵就不会左右跑了- 删除水平方向的碰撞判断,避免误触发水平方向的速度反转
- 剩下的垂直方向逻辑会让精灵碰到窗口顶部或底部时,反转垂直方向的速度,实现上下循环移动
内容的提问来源于stack exchange,提问作者Dave Klein
相关产品推荐
相关产品推荐

