使用Python turtle模块开发Pong游戏暂停后球拍仍可移动问题求助
问题根因
你的暂停实现方案本身没有语法错误,但确实不适配当前场景,核心问题有两个:
- turtle的
onkeypress()绑定的按键回调是直接注册在窗口事件监听器上的,只要你调用过window.listen(),无论主循环进入的是暂停分支还是正常运行分支,按键触发时都会执行对应的球拍移动逻辑。你当前的暂停逻辑只跳过了球的移动、碰撞判定、分数更新逻辑,没有限制球拍的按键响应,才会出现暂停后球拍还能移动的问题。 - 你把球拍的按键绑定代码放在了主循环的非暂停分支中,每次循环都会重复执行绑定操作,属于多余的冗余操作,本身不符合实现规范。
修复方案
最简单的修改方式是给所有球拍的移动方法加上暂停状态判断,暂停状态下直接跳过移动逻辑,参考示例如下:
# 给paddle_a、paddle_b的上下移动方法都添加对应判断,以move_up为例 def move_up(self): global game_pause # 暂停状态下直接返回,不执行移动 if game_pause: return # 原有移动逻辑不变 if self.ycor() < 250: self.sety(self.ycor() + 20)
同时可以把主循环里的球拍按键绑定代码移到主循环外,和暂停键的绑定放在一起,避免重复绑定:
# 这部分代码提到主循环外面,执行一次即可 window.listen() window.onkeypress(pause_game, "p") window.onkeypress(paddle_a.move_up, "w") window.onkeypress(paddle_a.move_down, "s") window.onkeypress(paddle_b.move_up, "Up") window.onkeypress(paddle_b.move_down, "Down")
内容的提问来源于stack exchange,提问作者Dien Phan
相关产品推荐
相关产品推荐

