Pygame开发Pong游戏:球检测到出窗口却不转向的问题求助
Pong游戏球飞出窗口问题解决
你的代码核心问题出在速度变量的作用域上:DOT_handle_movement函数里的DOT_speed_x和DOT_speed_y是局部变量,修改它们不会影响全局的速度变量——哪怕你在函数内反转了局部速度值,全局的速度还是原来的数值,球自然不会改变方向。
解决办法
方法1:直接修改全局变量
修改DOT_handle_movement函数,用global声明要操作全局的速度变量,这样函数内的修改会直接生效:
def DOT_handle_movement(): global DOT_speed_x, DOT_speed_y DOT.x += DOT_speed_x DOT.y += DOT_speed_y if DOT.top <= 0 or DOT.bottom >= HEIGHT: DOT_speed_y *= -1 if DOT.left <= 0 or DOT.right >= WIDTH: DOT_speed_x *= -1 print(DOT_speed_x, DOT_speed_y)
主循环里调用时不用传参数:
DOT_handle_movement()
方法2:返回修改后的速度值
把函数改成返回更新后的速度,在主循环里重新赋值给全局变量:
def DOT_handle_movement(current_x_speed, current_y_speed): DOT.x += current_x_speed DOT.y += current_y_speed new_x_speed = current_x_speed new_y_speed = current_y_speed if DOT.top <= 0 or DOT.bottom >= HEIGHT: new_y_speed *= -1 if DOT.left <= 0 or DOT.right >= WIDTH: new_x_speed *= -1 print(new_x_speed, new_y_speed) return new_x_speed, new_y_speed
主循环里调用时更新全局变量:
DOT_speed_x, DOT_speed_y = DOT_handle_movement(DOT_speed_x, DOT_speed_y)
额外优化:球的绘制位置修正
你当前画球用的DOT[0:2]是矩形的左上角坐标,和碰撞检测的Rect逻辑不匹配,会导致视觉上的偏差。改成用矩形的中心坐标绘制:
pygame.draw.circle(WIN, BLACK, (DOT.centerx, DOT.centery), DOTRAD)
内容的提问来源于stack exchange,提问作者gott150
相关产品推荐
相关产品推荐

