微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 .goto() 覆盖 python 中先前对象的位置turtle

如何解决使用 .goto() 覆盖 python 中先前对象的位置turtle

import turtle

wn = turtle.Screen()
wn.title("Pong")
wn.bgcolor("black")
wn.setup(height= 600,width= 800)
wn.tracer(0)

class Paddle:
    paddle = turtle.Turtle()
    def __init__(self):
        self.paddle.speed(0)
        self.paddle.color("white")
        self.paddle.shape("square")
        self.paddle.shapesize(stretch_wid = 5,stretch_len= 1)
        self.paddle.penup()
    def goto(self,location):
        self.paddle.goto(location,0)   


paddleA = Paddle()
paddleB = Paddle()

paddleA.goto(350)

paddleB.goto(-350)
    
# Ball

ball = turtle.Turtle()
ball.speed(0)
ball.color("white")
ball.shape("square")
ball.penup()
ball.goto(0,0)

# Movement Functions

# Game loop
while True:
    wn.update()

我想要显示的是屏幕左侧和右侧的两个桨。但是,在创建的屏幕中只显示一个桨。此桨将是最后调用函数 .goto() 的桨。为什么会这样?这种行为的纠正措施是什么?

解决方法

您没有在类中创建一个唯一可识别的实例,它只是重用了已经构建的同一个实例。

class Paddle:
    paddle = turtle.Turtle()
    def __init__(self):
        print( id(self.paddle) )
        self.paddle.speed(0)
        self.paddle.color("white")
        self.paddle.shape("square")
        self.paddle.shapesize(stretch_wid = 5,stretch_len= 1)
        self.paddle.penup()
    def goto(self,location):
        self.paddle.goto(location,0)   
    def color(self,color):
        self.paddle.color(color) 

paddleA = Paddle()
paddleB = Paddle()

paddleA.color('red')
paddleB.color('blue')

paddleA.goto(350)
paddleB.goto(-350)
    
# Ball

ball = turtle.Turtle()
print( id(ball) )
ball.speed(0)
ball.color("white")
ball.shape("square")
ball.penup()
ball.goto(0,0)

3066489872
3066489872
3066490064

在 init 块中放置 paddle 构造:

class Paddle:
    def __init__(self):
        self.paddle = turtle.Turtle()
        print( id(self.paddle) )
        self.paddle.speed(0)
        self.paddle.color("white")
        self.paddle.shape("square")
        self.paddle.shapesize(stretch_wid = 5,color):
        self.paddle.color(color)

3065846920
3065847064
3065847184

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。