You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pygame调用colliderect报错:'tuple'对象无该Rect属性

搞定Pygame碰撞检测的AttributeError问题

嘿,我立马就发现你代码里的问题啦!

错误原因拆解

你碰到的AttributeError: 'tuple' object has no attribute 'colliderect',核心问题出在tardigrade类的draw方法里:

self.hitbox = (self.x, self.y, self.width, self.height)

虽然你在初始化__init__里正确把hitbox创建成了pygame.Rect对象,但每次调用draw时,你都把hitbox覆盖成了一个普通的元组。而元组根本没有colliderect这个Rect对象专属的方法,自然就报错了。

至于你说打印语句能执行,是因为第一次碰撞检测时hitbox还没被改成元组,后续循环里draw方法执行后,hitbox变成元组,才触发了错误。

修复代码

把draw方法里的赋值语句改成更新Rect对象的属性,而不是替换成元组,有两种简洁的写法:

写法1:逐个更新Rect属性

def draw(self, win):
    win.blit(self.name, (self.x, self.y))
    # 直接更新Rect的位置和尺寸,保持它的Rect对象类型
    self.hitbox.x = self.x
    self.hitbox.y = self.y
    self.hitbox.width = self.width
    self.hitbox.height = self.height
    pygame.draw.rect(win, (0, 0, 255), self.hitbox,2)

写法2:用Rect的update方法(更简洁)

def draw(self, win):
    win.blit(self.name, (self.x, self.y))
    # 用update一次性更新Rect的所有参数
    self.hitbox.update(self.x, self.y, self.width, self.height)
    pygame.draw.rect(win, (0, 0, 255), self.hitbox,2)

这样修改后,hitbox会一直保持pygame.Rect对象的身份,colliderect方法就能正常工作,不会再触发那个属性错误啦。

内容的提问来源于stack exchange,提问作者LAn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:44:59