最近在学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