龙华专业做网站,申请邮箱企业邮箱,网站悬浮广告素材,会员卡管理系统软件3 碰撞检测
蓝色方块会随着鼠标移动#xff0c;当碰到绿色方块时#xff0c;则当前分数加1#xff0c;当碰到红色方块时#xff0c;当前分数减1。因为要随时进行碰撞检测#xff0c;因此需要在while True循环中实现以下功能。
3.1 蓝色方块随鼠标移动
将蓝色方块的位置…3 碰撞检测
蓝色方块会随着鼠标移动当碰到绿色方块时则当前分数加1当碰到红色方块时当前分数减1。因为要随时进行碰撞检测因此需要在while True循环中实现以下功能。
3.1 蓝色方块随鼠标移动
将蓝色方块的位置设置为鼠标的位置即可以实现蓝色方块随鼠标移动代码如下所示。
pos pygame.mouse.get_pos()
player.rect.x pos[0]
player.rect.y pos[1]
其中通过pygame.mouse.get_pos()获取鼠标的当前位置并将鼠标的横坐标pos[0]赋值给蓝色方块的x坐标player.rect.x鼠标的纵坐标pos[1]赋值给蓝色方块的y坐标player.rect.y。
3.2 检测蓝色方块是否碰撞到绿色方块
3.2.1 pygame.sprite.spritecollide()方法
通过pygame.sprite.spritecollide()方法来实现碰撞检测。该方法的使用格式为
spritecollide(sprite, group, dokill, collidedNone)
其中第一个参数sprite表示碰撞的Sprite实例第二个参数是一个Group实例在该Group中包含了多个Sprite实例也就是说判断第一个参数sprite与第二个参数group中包含的多个Sprite实例是否进行了碰撞dokill是一个布尔类型的参数该参数是True时表示将发生碰撞的实例从第二个参数group中删除False表示不删除第四个餐宿collided是一个回调方法当两个Sprite实例发生碰撞时调用该方法默认是None。spritecollide()方法的返回值是一个列表包含了在第二个参数group中与第一个参数spirte发生碰撞的Sprite实例。
3.2.2 相关代码
通过pygame.sprite.spritecollide()方法来判断蓝色方块是否与绿色方块碰撞的代码如下所示。
blocks_hit_list \pygame.sprite.spritecollide(player, block_list, True)for block in blocks_hit_list:score 1print(当前分数为str(score))
其中player是表示鼠标的蓝色方块block_list包含了所有绿色方块的Group实例因为在碰撞发生后被碰撞的绿色方块要消失因此把spritecollide()方法的第三个参数设置为True。发生碰撞的方块就保存在blocks_hit_list中最后对分数score进行加1处理并显示。
3.3 检测蓝色方块是否碰撞到红色方块
检测蓝色方块是否碰撞到红色方块的原理与碰撞绿色方块类似代码如下所示。
blocks_hit_list \pygame.sprite.spritecollide(player, block_bad_list, True)for block in blocks_hit_list:score - 1print(当前分数为str(score))
其中block_bad_list是保存红色方块的group。当发生碰撞时对分数score进行减1处理并显示。