游戏敌人水平往返移动异常:moveEnemy2函数故障排查求助
敌人水平移动卡顿抖动问题修复
关卡1的moveEnemy函数运行正常,但关卡2的moveEnemy2函数存在问题——本该水平往返移动的敌人原地卡顿、轻微抖动,核心原因是边界判断逻辑完全写反。
原代码
移动函数
def moveEnemy(): global diry for enemy in enemies: if enemy.top<200 or enemy.top>450: diry =- diry enemy.top -= diry def moveEnemy2(): global dirr for enemy2 in enemies2: if enemy2.left<500 or enemy2.left>100: dirr =- dirr enemy2.left -= dirr
敌人列表定义
enemies=[Rect(200,350,60,34),Rect(640,300,60,34)] enemies2=[Rect(200,470,60,34)]
方向变量定义
dirr=1 diry=1 dirr2=1 diry2=1
问题根源
moveEnemy2的边界判断条件逻辑错误:
- 你期望敌人在
left小于100或大于500时反转方向,但代码写的是enemy2.left<500 or enemy2.left>100——这个条件永远成立(任何数值要么小于500,要么大于100),导致每次循环dirr都会被反转一次。 - 方向变量每秒反复切换,敌人刚移动一点就被反向拉回,表现为原地卡顿抖动。
修复代码
基础修复(针对单个敌人)
把边界判断的数值顺序调换,即可解决卡顿问题:
def moveEnemy2(): global dirr for enemy2 in enemies2: # 修正边界判断:left小于100 或者 大于500时反转方向 if enemy2.left < 100 or enemy2.left > 500: dirr = -dirr enemy2.left -= dirr
优化方案(支持多个独立移动的敌人)
如果后续要给enemies2添加更多敌人,不建议用全局方向变量(会导致所有敌人同步反转,逻辑混乱),最好给每个敌人实例绑定独立的方向属性:
# 初始化敌人时绑定独立方向 enemies2=[Rect(200,470,60,34)] enemies2[0].dir = 1 def moveEnemy2(): for enemy2 in enemies2: if enemy2.left < 100 or enemy2.left > 500: enemy2.dir = -enemy2.dir enemy2.left -= enemy2.dir
内容的提问来源于stack exchange,提问作者popsicleson
相关产品推荐
相关产品推荐

