Python Pygame.Rect() 检测碰撞

最近在学Pygame,花一段时间做了一个异常简陋版的"飞机大战"。
简陋般的飞机大战
然后吧,就遇到了一个问题:
怎么检测碰撞呢?(个人太菜…)

按照网上教程比较普遍的方法(也可能是我没看见别的),碰撞检测依次计算移动物体与被碰撞物体各个边之间坐标是否相交.例如下列代码,检测小球与窗口的碰撞:

 if self.vector.x > WINDOW_X - self.image.get_width():
     self.vector.x = WINDOW_X -self.image.get_width()
 elif self.vector.x < 0:
     self.vector.x = 0

可是,因为这种方法由于需要加减各种数值,很容易多加一个少减一个,出现乱七八糟的错误。所以我想了一种相对简便些的方法。

Pygame.Rect正式登场!

pygame.Rect(enemy1[i-counte1][0]+3.5,enemy1[i-counte1][1]+3.5,43-3.5,57-3.5).colliderect(pygame.Rect(mems[0]+5,mems[1]+5,102-5,126-5))
#:D有些长

使用Pygame自带的方法Rect()将Surface对象转换成矩形对象,然后检测碰撞。

语法大概是这样的:

pygame.Rect(for_x,for_y,for_width,for_height)

然后用colliderect()语法检测碰撞。
colliderect()语法是这样的:

Rect对象.colliderect(另一个Rect对象)
return True/False #碰撞返回True,否则返回False

成功!
成功!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值