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

成功!
成功!

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
#游戏初始化 内部功能模块进行初始化创建及变量设置 默认调用 pygame.init() #初始化显示窗口 窗口名称screen screen = pygame.display.set_mode((800,450)) #设置窗口标题内容,是一个字符串类型 pygame.display.set_caption("超级玛丽程序") #设置游戏时钟 c1 = pygame.time.Clock() b1=超级玛丽背景.BackGroud() m1=玛丽.Mary() r1=蘑菇.Mushroom() #创建蘑菇对象 重点 rrr=pygame.sprite.Group() #创建精灵组 重点 rrr.add(r1) #添加精灵 重点 #游戏无限循环 直到python运行时退出结束 while True: c1.tick(10) #每一秒钟运行10次 控制游戏循环的频率 for event in pygame.event.get(): #从pygame中的事件队列中取出事件,并从队列中删除该事件 if event.type== pygame.QUIT: sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_RIGHT: m1.开始向右() if event.type == pygame.K_LEFT: m1.开始向左() if event.type ==pygame.KEYUP: if event.key==pygame.K_RIGHT: m1.停止() #松开按键,停止,#重点 if event.key==pygame.K_LEFT: m1.停止() #松开按键,停止,#重点 screen.blit(b1.image,b1.rect) #画背景 screen.blit(m1.image,m1.rect,m1.krect) #画玛丽 重点 for R in rrr: screen.blit(R.image,R.rect,R.rect) #画蘑菇 重点 #碰撞检测 重点 result=pygame.sprite.spritecollide(m1,rrr,True,None) #碰撞检测 重点 if result: m1.变大() #超级玛丽变大 重点 #更新 m1.update() for T in rrr: T.update() #更新精灵组 重点 pygame.display.update() #刷新
06-02

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值