gpt4 book ai didi

python - 属性错误: 'pygame.Rect' object has no attribute 'rect' error when doing collision

转载 作者:行者123 更新时间:2023-12-02 15:16:38 29 4
gpt4 key购买 nike

所以我尝试使用实例为我的游戏进行碰撞检测。代码如下:

class Paddle:
def __init__(self, x, y, width, height, rect):
self.x = x
self.y = y
self.width = width
self.height = height
self.rect = pygame.rect.Rect(x, y, width, height)
class Ball:
coordinateX = 600
coordinateY = 300
velocity = [random.randint(0,1),random.randint(-1,1)]

player = (Paddle(1100, 300, 10, 30, (1100, 300, 10, 30)))
enemy = Paddle(100, 300, 10, 30, (100, 30, 10, 30))
ball = (Ball.coordinateX, Ball.coordinateY, 15)

稍后:

ballRect = pygame.rect.Rect(Ball.coordinateX, Ball.coordinateY, 10, 10)
if pygame.sprite.collide_rect(player, ballRect):
bounce()

最佳答案

首先,在创建rect时你的球的属性,应该是self.rect = pygame.Rect(x, y, width, height) (假设您使用 import pygame 导入 Pygame )。那应该可以处理你的 AttributeError 。您的 ballRect 也是如此, ballRect = pygame.Rect(Ball.coordinateX, Ball.coordinateY, 10, 10)

接下来,您使用了错误的矩形碰撞检测函数。 pygame.sprite指的是 Pygame 中完全不同的东西(它的 Sprite 对象),而不是你的 Ball 。也不Paddle类是 Pygame Sprites,来自您编写的代码。因此,调用 pygame.sprite.collide_rect()这里没有任何意义。

相反,您应该简单地使用 rect.colliderect ,像这样:

if rect.colliderect(other_rect):
# Colliding!
print("Stop touching me!")

或者根据您的情况:

if player.rect.colliderect(ballRect):
bounce()

此外,您不需要传递 rect作为你的 Paddle 的参数初始化,因为它从未被使用过。对象的rect完全由您的其他论点生成。

最后,你的Ball类和实例化代码似乎有点不对劲。您应该像 Paddle 一样生成并初始化它。 。

编辑最后一件事。在 pygame 中,当您使用 rect 创建对象时属性,您不再需要分配 xy对象的值,因为每当您需要它们时,例如在 blit 中,您只需传递rect即可直接(或在某些边缘情况下rect.xrect.y)作为位置参数,pygame将很好地处理其余的事情。

您的代码应如下所示(修复了一些其他问题):

class Paddle():
def __init__(self, x, y, width, height):
self.width = width
self.height = height
self.rect = pygame.Rect(x, y, width, height)

class Ball():
def __init__(self, x, y, width, height):
self.rect = pygame.Rect(x, y, width, height)
self.velocity = [random.randint(0,1),random.randint(-1,1)]

player = Paddle(1100, 300, 10, 30)
enemy = Paddle(100, 300, 10, 30)
ball = Ball(600, 300, 10, 10)

# Other stuff

# Collision checking
if player.rect.colliderect(ball.rect):
bounce()

关于python - 属性错误: 'pygame.Rect' object has no attribute 'rect' error when doing collision,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60968750/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com