Python跳跃游戏开发:如何通过函数更新角色位置并持久保存变量
问题原因
- 循环内部提前
return:遍历到第一个元素i=1时就直接返回结果,没有执行a列表里的第二个操作指令,所以只跑了一次左移逻辑 - 位移计算基于固定初始值:你用的全局变量
x、y全程都是初始的0,每次计算位移都没有基于上一次移动后的新位置,哪怕跑完两次操作结果也不会叠加 - 重新赋值没有修改原列表:函数内写
last=[x+2,y+3]是创建了新的列表对象赋值给局部变量last,和外面的全局last不是同一个引用,所以外部的last不会被更新
修正方案
我们把位置的x、y从当前传入的位置参数里取,循环完所有操作再返回最终位置,外部接收返回值更新全局位置即可,修正后代码如下:
# 初始位置 current_pos = [0, 0] # 操作指令列表 1=turn_left 2=turn_right action_list = [1, 2] def move(origin_pos, actions): # 先拿到初始位置的x、y,后续每次操作叠加位移 x, y = origin_pos for action in actions: if action == 1: # 左移位移 x += 2 y += 3 elif action == 2: # 右移位移 x -= 1 y += 1 # 所有操作执行完后返回最终位置 return [x, y] # 接收返回的新位置更新当前位置 current_pos = move(current_pos, action_list) print(current_pos) # 输出结果为 [1,4],符合预期
如果需要支持实时逐次执行操作,不需要一次性传入所有指令,可以改成单次执行单个操作的版本:
current_pos = [0, 0] def move_single(origin_pos, action): x, y = origin_pos if action == 1: return [x+2, y+3] elif action == 2: return [x-1, y+1] # 无匹配操作返回原位置 return origin_pos # 逐次执行操作 current_pos = move_single(current_pos, 1) print(current_pos) # [2,3] current_pos = move_single(current_pos, 2) print(current_pos) # [1,4]
内容的提问来源于stack exchange,提问作者deneme
相关产品推荐
相关产品推荐

