如何解决Python Turtle游戏中角色跳跃初始y坐标固定的问题?
问题描述
我编写了一段用于实现游戏角色跳跃的代码,希望将该跳跃功能接入我的游戏中。为了让代码不局限于特定坐标,我定义变量o来存储跳跃前的原始y坐标。但我的游戏中角色会处于多个不同的y坐标位置,若在外部定义o,角色只能在固定位置跳跃。我尝试将o放入函数或while循环中均无效,想请教如何在函数运行过程中保留每次跳跃前的原始y坐标?
以下是我的代码:
import turtle dx = 1 dy = 1.8 mdy = -1.6 img = r"C:\Users\user\Desktop\python\pg\dragon.gif" turtle.register_shape(img) scrn = turtle.Screen() scrn.tracer(0) player = turtle.Turtle() player.penup() player.shape(img) player.speed(10) player.goto(100,-142) scrn.update() o=player.ycor() #original y coordinate def jump(): global dy ycor = player.ycor() if ycor > o: player.sety(ycor + dy) if ycor > o+100: dy = mdy else: pass def jump_handler(): if player.ycor() <= o+0.1: global dy dy = 1.8 player.sety(o+0.1) else: pass # Set up the event handler for the jump scrn.listen() scrn.onkey(jump_handler, "space") while True: scrn.update() jump()
解决方案
核心思路是不要用全局固定的o存储初始坐标,而是在每次触发跳跃时,记录当前角色的y坐标作为本次跳跃的起点。可以把这个起点存在角色对象的自定义属性里,比如player.jump_start_y,这样每次跳跃都能获取当前的起始位置,而非固定值。
修改后的代码如下:
import turtle dx = 1 dy = 1.8 mdy = -1.6 img = r"C:\Users\user\Desktop\python\pg\dragon.gif" turtle.register_shape(img) scrn = turtle.Screen() scrn.tracer(0) player = turtle.Turtle() player.penup() player.shape(img) player.speed(10) player.goto(100,-142) scrn.update() # 初始化跳跃起点属性 player.jump_start_y = player.ycor() def jump(): global dy ycor = player.ycor() # 使用角色的跳跃起点属性,而非固定全局变量 if ycor > player.jump_start_y: player.sety(ycor + dy) if ycor > player.jump_start_y + 100: dy = mdy else: pass def jump_handler(): global dy # 只有当角色处于当前跳跃起点附近时,才允许触发新跳跃 if player.ycor() <= player.jump_start_y + 0.1: dy = 1.8 # 更新跳跃起点为当前角色的y坐标 player.jump_start_y = player.ycor() else: pass # Set up the event handler for the jump scrn.listen() scrn.onkey(jump_handler, "space") while True: scrn.update() jump()
关键修改点:
- 把全局变量
o替换为角色对象的自定义属性player.jump_start_y,让角色可以独立存储自己的跳跃起点 - 在
jump_handler触发跳跃时,更新player.jump_start_y为当前角色的y坐标,确保每次跳跃都以当前位置为起点 - 所有用到
o的地方都替换为player.jump_start_y,保证逻辑基于当前跳跃起点运行
这样无论角色处于哪个y坐标位置,只要按下空格触发跳跃,都会以当前位置作为起跳点,实现灵活的跳跃功能。
内容的提问来源于stack exchange,提问作者gem 1234
相关产品推荐
相关产品推荐

