Turtle库中Player类up()函数失效,创建对象时画笔仍绘图
继承Turtle类时画笔绘图及自定义up()失效问题解决
问题原因
你的Player类中自定义的up()方法覆盖了父类Turtle的up()方法——父类的up()是penup()的别名,作用是抬起画笔停止绘图。这导致两个问题:
- 初始化时调用
self.up()执行的是你写的移动逻辑,而非抬起画笔,所以画笔始终处于落下状态,移动时会留下轨迹。 - 主程序中调用
up()时,实际执行的是移动逻辑,但因为画笔没抬起,移动时会绘图,和你预期的效果不符,所以感觉“无效”。
修正方案
- 重命名自定义移动方法:避免和父类控制画笔的
up()/down()方法重名,比如改成move_up()和move_down()。 - 正确抬起画笔:在初始化时调用
self.penup()(或super().up())来真正抬起画笔,停止绘图。
修正后的代码
from turtle import Turtle class Player(Turtle): def __init__(self, num): super().__init__() self.penup() # 调用父类的画笔抬起方法 self.color("white") self.shape("square") self.shapesize(stretch_wid=5, stretch_len=1, outline=None) if num == 1: self.goto(-350, 0) else: self.goto(350, 0) def move_up(self): new_y = self.ycor() + 20 self.goto(x=self.xcor(), y=new_y) def move_down(self): new_y = self.ycor() - 20 self.goto(x=self.xcor(), y=new_y)
现在初始化时画笔会自动抬起,移动时不会留下轨迹,主程序中调用player.move_up()即可让玩家正常向上移动。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

