python - 列表冲突不起作用
问题描述
我目前正在使用一个列表来生成在屏幕上运行的敌人,并想知道我在代码中做错了什么。我希望篮球与坏名单相撞。当我跑步时没有错误,篮球不会与坏名单发生冲突。
death = pygame.Rect.collidelist(badlist, basketball)
if death:
myfont = pygame.font.SysFont('Comic Sans MS', 50)
textsurface = myfont.render('The Baddies got you', True, (0, 0, 0))
screen.blit(textsurface,(700,700))
解决方案
首先,您必须调用collidelist
一个Rect
实例,而不是Rect
类型本身。1
假设basketball
是 a Rect
,并且badlist
是Rect
s 的列表,并且您正在尝试查看是否basketball
与 中的任何矩形发生碰撞badlist
:
death = basketball.collidelist(badlist)
其次,collidelist
不返回布尔值告诉您是否发生碰撞,它返回第一次碰撞的索引。如果篮球与第一个矩形碰撞,则该索引将是假的(即为零),但如果它与任何其他矩形碰撞或根本没有碰撞,则该索引将为真(即非零)。所以,你真正想要检查的是:
death = basketball.collidelist(badlist) != -1
最后:
pygame.font.init() # you have to call this at the start,
# if you want to use this module.
您实际上在这里发表了评论,解释了这一行有什么问题。您必须在程序开始时调用它,而不是每次要加载字体时。
1.您没有立即TypeError
告诉您这一点的原因是,从技术上讲,您所做的并不是非法的,而是对“未绑定方法”的调用。您可以直接在类上调用方法,但是您必须将实例(self
您要在其上调用方法)作为第一个参数传递。所以,Rect.collidelist(basketball, badlist)
实际上会做同样的事情basketball.collidelist(badlist)
。但是你的论点倒退了,所以不是要求它检查每个矩形badlist
以查看哪个碰撞basketball
,而是要求它检查每个矩形basketball
以查看哪个碰撞badlist
- 这是无稽之谈,但也许不是 Python 或PyGame 测试。
推荐阅读
- php - 请求的包存在,但这些被您的约束拒绝
- amazon-web-services - 在一定的请求限制后,我们是否会从 S3/cloudfront 获得性能下降?
- c# - 如何返回以下值?
- angular - Angular4:如何将 html 中的常量作为 href 访问?
- c# - 如何使用 SshClient .net 下载和上传文件
- ios - 如何使用 Predicate 按电话号码过滤领域联系人?
- android - 如何更改每个不同的卡片视图的指示器颜色?
- python - 为什么是无序的 JSON 值?
- reactjs - React/Enzyme - 在使用地图功能呈现内容的组件中测试失败
- html - 使用 sas mixins 以根据边距位置附加值