添加并监听英雄发射子弹事件
class Hero(GameSprite):
def __init__(self):
# 调用父类方法,设置image
super().__init__('./images/me1.png', 0)
# 设置英雄的初始位置
self.rect.centerx = SCREEN_RECT.centerx
self.rect.bottom = SCREEN_RECT.bottom - 120 # 创建子弹精灵组
self.bullets = pygame.sprite.Group() # 重写父类方法,实现左右移动
def update(self):
# 英雄在水平方向移动
self.rect.x += self.speed
# 控制不能离开屏幕
# 判断x 小于0 的时候,将x设为0
if self.rect.x < 0:
self.rect.x = 0
# right = x + 窗口宽度 = 右侧
elif self.rect.right > SCREEN_RECT.right:
self.rect.right = SCREEN_RECT.right # 发射子弹
def fire(self):
for i in (0, 1, 2):
# 创建子弹精灵
bullet = Bullet() # 设置子弹精灵位置
bullet.rect.bottom = self.rect.y - i * 20
bullet.rect.centerx = self.rect.centerx
# 添加精灵组
self.bullets.add(bullet)
# 英雄发射子弹事件,因为创建敌机已经用了,所以我们在基础上+1
HREO_FIRE_EVENT = pygame.USEREVENT + 1
# 设置定时器事件 -- 发射子弹
pygame.time.set_timer(HREO_FIRE_EVENT,500) #监听事件
elif event.type == HREO_FIRE_EVENT: #判断是否发射子弹事件
self.hero.fire() #调用发射子弹方法 # 更新绘制发射子弹精灵组
self.hero.bullets.update()
self.hero.bullets.draw(self.screen)
定义子弹类
class Bullet(GameSprite):
def __init__(self):
# 设置子弹图片和初始速度
super().__init__('./images/bullet1.png', -2) def update(self):
# 调用父类方法,让子弹垂直方向飞行
super().update()
# 判断子弹是否飞出屏幕
if self.rect.bottom < 0:
self.kill()
 
碰撞检测
两个精灵组中所有精灵的碰撞检测
pygame.sprite.groupcollide(group1,gorup2,dokill1,dokill2,collided=None)
"""
如果将dokill设置为True,则发生碰撞的精灵将被自动移除
collided参数用于计算碰撞的回调函数,如果没有指定,则每个精灵必须有一个rect属性
"""
# 私有方法-碰撞监测
def __check_collide(self):
#传入子弹精灵组合敌机精灵组,任意发生碰撞则销毁
pygame.sprite.groupcollide(self.hero.bullets,self.enemy_group,True,True)
某个精灵和指定精灵组中的精灵碰撞检查
pygame.sprite.spritecollide(sprite,group,dokill,collided=None) -> Sprite_list
"""
如果dokill设置为True,则指定精灵组中发生碰撞的精灵自动移除
collided返回值是一个列表,是精灵组中和精灵发生碰撞的精灵
"""
# 敌机撞毁英雄
enemies = pygame.sprite.spritecollide(self.hero, self.enemy_group, True)
# 判断enemies是否有内容
if enemies:
#销毁英雄飞机
self.hero.kill()
self.__game_over() # 游戏结束

10.pygame-碰撞检测的更多相关文章

  1. Pygame碰撞检测

    学习自小甲鱼视频教学(笔记) 功能实现: 在随机位置生成若干个小球以随机速度运动: 若小球运动出左边界则从右边界进入,上下边界同理: 若两小球相碰撞则都以相反速度运动分开. 代码如下: 1.尝试自己写 ...

  2. Python游戏编程(Pygame)

    安装Pygame pip install pygame C:\Users> pip install pygame Collecting pygame Downloading https://fi ...

  3. pygame-KidsCanCode系列jumpy-part17-mask-collide碰撞检测

    这节我们研究下pygame的几种碰撞检测模式: 如上图,左侧是默认的检测模式:基于矩形的检测(这也是性能最好的模式), 右侧是基于圆形的检测(性能略差于矩形检测). 矩形检测法虽然性能好,但是缺点也很 ...

  4. 【python游戏编程之旅】第一篇---初识pygame

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 一.pygame简介 Pygame 是一组用来开发游戏软件的 Python 程序模块,基于 SDL 库的基础 ...

  5. pygame系列_游戏窗口显示策略

    在这篇blog中,我将给出一个demo演示: 当我们按下键盘的‘f’键的时候,演示的窗口会切换到全屏显示和默认显示两种显示模式 并且在后台我们可以看到相关的信息输出: 上面给出了一个简单的例子,当然在 ...

  6. pygame开发滑雪者游戏

    pygame开发滑雪者游戏 一.实验说明 下述介绍为实验楼默认环境,如果您使用的是定制环境,请修改成您自己的环境介绍. 1. 环境登录 无需密码自动登录,系统用户名 shiyanlou,该用户具备 s ...

  7. pygame学习之绘制圆

    import pygame from pygame.locals import * pygame.init() screen = pygame.display.set_mode((600, 500)) ...

  8. python编程学习--Pygame - Python游戏编程入门(0)---转载

    原文地址:https://www.cnblogs.com/wuzhanpeng/p/4261015.html 引言 博客刚开,想把最近学习的东西记录下来,算是一种笔记.最近打算开始学习Python,因 ...

  9. Python 用pygame模块播放MP3

    安装pygame(这个是python3,32位的) pip安装这个whl文件 装完就直接跑代码啦,很短的 import time import pygame file=r'C:\Users\chan\ ...

  10. pygame经典sprite精灵类

    import cStringIO, base64 import pygame from pygame.locals import * class Ball(pygame.sprite.Sprite): ...

随机推荐

  1. 巨变!a16z 关于新一代数据基础设施架构的深度洞察

    点击上方 蓝字关注我们 来源 | a16z 作者 | Matt Bornstein, Martin Casado,Jennifer Li 翻译 | 夕颜 作为未来最重要的基础设施之一,数据正在成为各行 ...

  2. 教程 - 深度探讨在 Vue3 中引入 CesiumJS 的最佳方式

    目录 1. 你应该先知道的基础知识 1.1. CesiumJS 的库构成 1.2. 选择 Vite3 和 pnpm 的理由 1.3. 使用 External 模式引入静态库 - 不打包静态库 1.4. ...

  3. RabbitMQ 入门系列:6、保障消息:不丢失:发送方、Rabbit存储端、接收方。

    系列目录 RabbitMQ 入门系列:1.MQ的应用场景的选择与RabbitMQ安装. RabbitMQ 入门系列:2.基础含义:链接.通道.队列.交换机. RabbitMQ 入门系列:3.基础含义: ...

  4. 避免jquery多次监听事件

    jQuery.event.dispatch 事件分发监听源码简单理解是将绑定的事件放入队列后进行监听,如果对一个事件多次绑定(on或者bind),事件会重复添加到队列等待jq监听,这样会导致很大资源消 ...

  5. javaee相关基础

    2020-2-28 java 学习 开始学习javaee了 瞎跳着看 今日内容 web相关概念 web服务器软件:Tomcat Servlet入门学习 web概念 软件架构 C/S:客户端/服务器端 ...

  6. IO流的文件输入输出效率问题

    IO流的文件输入输出效率问题 第一种方法 我用使用一个数组,把FIleInputStream获取到的二进制数存入这个数组,然后使用FIleOutputStream进行输出 缺点:速度慢 优点:不消耗内 ...

  7. MySQL到底有没有解决幻读问题?这篇文章彻底给你解答

    MySQL InnoDB引擎在Repeatable Read(可重复读)隔离级别下,到底有没有解决幻读的问题? 网上众说纷纭,有的说解决了,有的说没解决,甚至有些大v的意见都无法达成统一. 今天就深入 ...

  8. c#中容易被忽视的foreach

    有句俗语:百姓日用而不知.我们c#程序员很喜欢,也非常习惯地用foreach.今天呢,我就带大家一起探索foreach,走,开始我们的旅程. 一.for语句用的好好的,为什么要提供一个foreach? ...

  9. 从零打造“乞丐版” React(一)——从命令式编程到声明式编程

    这个系列的目的是通过使用 JS 实现"乞丐版"的 React,让读者了解 React 的基本工作原理,体会 React 带来的构建应用的优势 1 HTML 构建静态页面 使用 HT ...

  10. Java SE note1

    1.数据类型 基本类型 低------------------------------------------------->高 byte,short,char -> int -> ...