• Pygame中Sprite的使用方法6-5


    3 碰撞检测

    蓝色方块会随着鼠标移动,当碰到绿色方块时,则当前分数加1,当碰到红色方块时,当前分数减1。因为要随时进行碰撞检测,因此需要在while True循环中实现以下功能。

    3.1 蓝色方块随鼠标移动

    将蓝色方块的位置设置为鼠标的位置,即可以实现蓝色方块随鼠标移动,代码如下所示。

    1. pos = pygame.mouse.get_pos()
    2. player.rect.x = pos[0]
    3. 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, collided=None)

    其中,第一个参数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()方法来判断蓝色方块是否与绿色方块碰撞的代码如下所示。

    1. blocks_hit_list = \
    2. pygame.sprite.spritecollide(player, block_list, True)
    3. for block in blocks_hit_list:
    4. score += 1
    5. print('当前分数为:'+str(score))

    其中,player是表示鼠标的蓝色方块;block_list包含了所有绿色方块的Group实例,因为在碰撞发生后,被碰撞的绿色方块要消失,因此,把spritecollide()方法的第三个参数设置为True。发生碰撞的方块就保存在blocks_hit_list中,最后对分数score进行加1处理,并显示。

    3.3 检测蓝色方块是否碰撞到红色方块

    检测蓝色方块是否碰撞到红色方块的原理与碰撞绿色方块类似,代码如下所示。

    1. blocks_hit_list = \
    2. pygame.sprite.spritecollide(player, block_bad_list, True)
    3. for block in blocks_hit_list:
    4. score -= 1
    5. print('当前分数为:'+str(score))

    其中,block_bad_list是保存红色方块的group。当发生碰撞时,对分数score进行减1处理,并显示。

  • 相关阅读:
    《剑指 Offer 》—16. 数值的整数次方
    Vue路由和Node.js环境搭建
    1911 最大子序列交替和(状态机DP)(贪心)
    NLP 图神经网络之GNN、GCN、GAT原理理解+面试必考知识点
    【虚幻引擎UE】UE5 简单实现范围计算圆圈绘制
    【开源项目】X-TRACK源码分析
    AI短视频制作一本通:文本生成视频、图片生成视频、视频生成视频
    uniapp把文件中的内复制到另一个文件中
    面试官:我看你简历上写了MySQL,对MySQL InnoDB引擎的索引了解吗?
    网络-WebSocket
  • 原文地址:https://blog.csdn.net/hou09tian/article/details/133248110