python - 我可以在不使用 Sprites 的情况下使用 .colliderect() 吗?-Py游戏
问题描述
我正在尝试制作一个小的无尽跑步者并完成大部分工作,唯一剩下的就是碰撞检测。我知道 () 函数,但不能让它工作。我可能只是做错了,但我不知道如何解决它。
现在我有一个像这样的玩家类:
class Player:
def __init__(self):
self.size = (20, 40)
self.color = white
self.pos = [200, 330]
self.shape_body = (self.pos, self.size)
self.rect = pygame.Rect(self.shape_body)
和一个障碍
class obstacle_ground1:
def __init__(self):
self.pos = [1000, 330]
self.size = (40, 40)
self.shape = (self.pos, self.size)
self.rect = pygame.Rect(self.shape)
self.color = white
(我有不同的,这就是为什么有一个 1)所有障碍物都在一个列表中,我想检查这样的碰撞
def Check_if_dead(self):
return self.rect.collidedict(obstacles[0].rect)
作为 Player 类的函数
但后来我得到一个类型错误:
参数必须是带有 rectstyle 键的 dict。
我现在知道我可以并且也许应该使用精灵,但我不想重做其他所有事情,所以如果你知道解决方法或者只是注意到我犯了一个愚蠢的错误,请告诉我
解决方案
您收到错误消息
参数必须是带有 rectstyle 键的 dict。
因为你使用了错误的方法。
如果要测试 2 个矩形是否相交,则必须使用该方法,pygame.Rect.colliderect
而不是pygame.Rect.collidedict
:
return self.rect.collidedict(obstacles[0].rect)
return self.rect.colliderect(obstacles[0].rect)
to 的参数collidedict
必须是字典。该方法将测试字典中的一个矩形是否相交。
to 的参数colliderect
是一个矩形,该方法测试两个矩形是否重叠。
推荐阅读
- asp.net-web-api - 如何将 Web API 添加到 Visual Studio
- javascript - 缺少字段时如何使用 php 或 js 回显默认文本?
- date - 从 Jinja 表达式中减去日期
- python - Python RegEx 从地址中拆分街道和号码
- android - Android Activity Lifecycle 中的 Flutter configureFlutterEngine 方法
- xml - XML标记的XPath取决于文本中的位置?
- spring - 没有 maxlen 选项来限制弹簧数据反应 Redis 模板中的流大小
- windows - 此 Microsoft 文档中的字节/位顺序是什么?
- java - Aspose PDF:是否可以使对象“不可打印”?
- graphics - hlsl 非插值行为