Python Turtle程序屏幕中央莫名箭头如何消除?
问题:Python Turtle游戏屏幕中央出现多余箭头
我已经隐藏了所有应隐藏的turtle对象,但运行程序时屏幕中央始终显示一个类似“>”的小箭头(见截图)。请求指导如何消除该箭头:

以下是我的代码:
主程序代码
import time from turtle import Screen from player import Player from car_manager import CarManager from scoreboard import Scoreboard play = Player() scoreboard = Scoreboard() car_manager = CarManager() screen = Screen() screen.setup(width=600, height=600) screen.tracer(0) screen.listen() screen.onkey(play.turtle_move_up, "Up") game_is_on = True while game_is_on: time.sleep(0.1) screen.update() car_manager.create_car() car_manager.car_move() if play.is_at_cross_line(): scoreboard.score_increase() car_manager.speed_up() play.move_to_starting_point() for car in car_manager.car_list: if car.distance(play) < 20: scoreboard.game_over() game_is_on = False screen.exitonclick()
Scoreboard类
from turtle import Turtle FONT = ("Courier", 24, "normal") class Scoreboard(Turtle): def __init__(self): super().__init__() self.hideturtle() self.penup() self.level = 1 self.score_update() def score_update(self): self.clear() self.goto(-260, 260) self.write(f"Level:{self.level}", align="left", font=FONT) def score_increase(self): self.level += 1 self.score_update() def game_over(self): self.goto(0, 0) self.write("Game Over", align='center', font=FONT)
Player类
from turtle import Turtle STARTING_POSITION = (0, -280) MOVE_DISTANCE = 10 FINISH_LINE_Y = 280 class Player(Turtle): def __init__(self): super().__init__() self.penup() self.speed = MOVE_DISTANCE self.shape("turtle") self.move_to_starting_point() def move_to_starting_point(self): self.goto(0, -280) self.setheading(90) def turtle_move_up(self): self.forward(MOVE_DISTANCE) def is_at_cross_line(self): if self.ycor() > 280: return True else: return False
CarManager类
from turtle import Turtle import random COLORS = ["red", "orange", "yellow", "green", "blue", "purple"] STARTING_MOVE_DISTANCE = 5 MOVE_INCREMENT = 10 class CarManager(Turtle): def __init__(self): super().__init__() self.car_list = [] self.speed = STARTING_MOVE_DISTANCE def create_car(self): random_chance = random.randint(1,6) if random_chance == 1: new_car = Turtle("square") new_car.penup() new_car.shapesize(stretch_wid=1, stretch_len=2) new_car.color(random.choice(COLORS)) new_car.goto(300, random.randint(-230, 230)) self.car_list.append(new_car) def car_move(self): for car in self.car_list: car.backward(self.speed) def speed_up(self): self.speed += MOVE_INCREMENT
解决方案
问题出在CarManager类:它继承了Turtle,但这个类的作用只是管理车辆列表,本身不需要成为一个turtle对象。当你实例化CarManager时,继承自Turtle的构造函数会默认创建一个可见的turtle(就是屏幕中央的箭头),而你没有对这个对象执行hideturtle()。
修改方法很简单:让CarManager不再继承Turtle,调整类定义和初始化部分即可:
class CarManager: # 移除(Turtle)继承 def __init__(self): # 移除super().__init__() self.car_list = [] self.speed = STARTING_MOVE_DISTANCE
这样CarManager就不会创建多余的turtle对象,屏幕中央的箭头会自然消失。
内容的提问来源于stack exchange,提问作者Ryan Ren
相关产品推荐
相关产品推荐

