• 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处理,并显示。

  • 相关阅读:
    Kafka
    Jetpack Compose 性能优化的几条建议
    Unity导入URDF模型(turtlebot3 waffle pi为例)
    【负荷预测】基于蚂蚁优化算法的BP神经网络在负荷预测中的应用研究(Matlab完整代码实现)
    蓝桥杯软件赛Java研究生组/A组)第二章基础算法-第三节:倍增
    部署redis的读写分离架构(包含节点间认证口令)
    【数据分析】2022年北京交通大学计算机学院学术型博士录取数据分析
    华为复合vlan(mux vlan)
    一篇弄懂二分算法
    【Axure教程】能增删改数据的动态饼图
  • 原文地址:https://blog.csdn.net/hou09tian/article/details/133248110