我正在为Brick Breaker编写代码,并且为Bricks设置了一个类,并且试图为每个Bricks设置一个碰撞箱。但是,这些参数无法识别供以后使用。
我正在使用Turtle,对Python还是很陌生。我为砖块设置了一个类,并且尝试为每个砖块设置一个碰撞箱。我是通过设置取决于砖块位置的周长来实现的,因此我为碰撞盒的每一侧都设置了self.colisX变量。但是,Atom返回一个错误,提示“ AttributeError:'Brick'对象没有属性'colisL'。”
我的积木类:
class Brick:
def __init__(self, color, x, y):
self = turtle.Turtle()
self.speed(0)
self.shape("square")
self.color(color)
self.penup()
self.goto(x, y)
self.shapesize(2.45, 2.45)
self.x = x
self.y = y
self.colisL = x - 25
self.colisR = x + 25
self.colisU = y + 25
self.colisD = y - 25
brick1 = Brick("purple", -175, 275)
在我的while循环中:
if (ball.xcor() > brick1.colisL) and (ball.xcor() < brick1.colisR) and (ball.ycor() > brick1.colisD) and (ball.ycor() < brick1.colisU):
我希望if语句注册为true,但是“ AttributeError:'Brick'对象没有属性'colisL'”会不断弹出,就像该变量不存在一样。
答案 0 :(得分:0)
我假设您尝试制作一个使用Brick
操作的Turtle
类,但是覆盖self
并没有实现您的预期。
正确的答案是在这种情况下使用inheritance。但是,如果您不熟悉Python,则更简单的方法是设置一个变量以包含turtle对象,例如:
class Brick:
def __init__(self, color, x, y):
self.turtle = turtle.Turtle()
self.turtle.speed(0)
self.turtle.shape("square")
self.turtle.color(color)
self.turtle.penup()
self.turtle.goto(x, y)
self.turtle.shapesize(2.45, 2.45)
self.x = x
self.y = y
self.colisL = x - 25
self.colisR = x + 25
self.colisU = y + 25
self.colisD = y - 25
答案 1 :(得分:0)
您可以子类Turtle
来专门化您的对象:
from turtle import Screen, Turtle
CURSOR_SIZE = 20
BRICK_SIZE = 50
BALL_SIZE = CURSOR_SIZE
class Brick(Turtle):
def __init__(self, color, x, y):
super().__init__()
self.speed('fastest')
self.shape('square')
self.shapesize(BRICK_SIZE / CURSOR_SIZE)
self.color(color)
self.penup()
self.goto(x, y)
brick1 = Brick('purple', -175, 275)
ball = Turtle()
ball.shape('circle')
ball.penup()
ball.goto(-160, 280)
if ball.distance(brick1) < (BALL_SIZE / 2 + BRICK_SIZE / 2):
print("Collision!")
else:
print("Missed!")
screen = Screen()
screen.exitonclick()
还请注意,Turtle
有一个distance()
方法,使检查冲突更加容易。