【问题标题】:Python (Turtle) Remove turtle / arrowPython (Turtle) 移除海龟/箭头
【发布时间】:2022-01-19 07:35:39
【问题描述】:

我正在尝试制作基本的 Pong,但我不明白为什么屏幕中间的箭头/乌龟会显示。

屏幕上的桨由存储在self.paddle 中的 6 个海龟对象组成。 我知道问题与p = Paddle() 有关,但我不明白箭头对象在哪里,因为它似乎不在上面提到的列表中(print(self.paddle))。 有人能启发我吗?

from turtle import Turtle, Screen

screen = Screen()
screen.setup(width=1000, height=700)

class Paddle(Turtle):

    def __init__(self):
        super().__init__()
        self.paddle = []
        self.create_player_paddle()

    def create_player_paddle(self):
        for pad in range(0, 6):
            x = -480
            y = 30
            p = Turtle(shape="square")
            p.turtlesize(0.5)
            p.penup()
            p.goto(x, y)
            self.paddle.append(p)

        for part in range(len(self.paddle)):
            self.paddle[part].goto(x, y)
            y -= 10
            


p = Paddle()
screen.update()
screen.exitonclick()

【问题讨论】:

    标签: python python-3.x object turtle-graphics


    【解决方案1】:

    我不明白箭头对象在哪里,因为它似乎不是 在上面提到的列表中......有人可以启发我吗?

    通常,像Paddle() 这样的类isa Turtle包含 Turtle 的一个或多个实例。但是你已经做到了,它既是Turtle(你的神秘箭头的来源),又包含list的海龟。简单的解决方法是删除 Turtle 作为其超类并删除 super().__init__() 代码:

    class Paddle():
    
        def __init__(self):
            self.paddle = []
            self.create_player_paddle()
    

    以下是我对解决上述问题和我看到的其他问题的代码的修改:

    from turtle import Turtle, Screen
    
    class Paddle():
    
        def __init__(self):
            self.segments = []
            self.create_player_paddle()
    
        def create_player_paddle(self):
            x = -480
            y = 30
    
            for _ in range(6):
                segment = Turtle(shape='square')
                segment.turtlesize(0.5)
                segment.penup()
                segment.goto(x, y)
    
                self.segments.append(segment)
    
                y -= 10
    
    screen = Screen()
    screen.setup(width=1000, height=700)
    
    paddle = Paddle()
    
    screen.exitonclick()
    

    在 turtle 中进行 Pong 游戏的常用方法是使 paddle 成为 Turtle 的子类,然后使用 shapesize() 将海龟拉伸为您想要的矩形。但这在碰撞检测方面存在问题。您的方法使桨有点复杂,但在碰撞检测方面可能会更好,因为您可以测试每个部分。

    【讨论】:

    • 这很有帮助,谢谢!我做了蛇游戏并做了一个方法,我移动了相对于“头部”部分的部分,并认为我可以对桨做同样的事情,但我也喜欢你的建议。
    【解决方案2】:

    如果需要隐藏 Turtle 指针,请将 Turtle.hideturtle(self) 放入构造函数的 init 函数中

    【讨论】: