10.pygame-碰撞检测
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-碰撞检测的更多相关文章
- Pygame碰撞检测
学习自小甲鱼视频教学(笔记) 功能实现: 在随机位置生成若干个小球以随机速度运动: 若小球运动出左边界则从右边界进入,上下边界同理: 若两小球相碰撞则都以相反速度运动分开. 代码如下: 1.尝试自己写 ...
- Python游戏编程(Pygame)
安装Pygame pip install pygame C:\Users> pip install pygame Collecting pygame Downloading https://fi ...
- pygame-KidsCanCode系列jumpy-part17-mask-collide碰撞检测
这节我们研究下pygame的几种碰撞检测模式: 如上图,左侧是默认的检测模式:基于矩形的检测(这也是性能最好的模式), 右侧是基于圆形的检测(性能略差于矩形检测). 矩形检测法虽然性能好,但是缺点也很 ...
- 【python游戏编程之旅】第一篇---初识pygame
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 一.pygame简介 Pygame 是一组用来开发游戏软件的 Python 程序模块,基于 SDL 库的基础 ...
- pygame系列_游戏窗口显示策略
在这篇blog中,我将给出一个demo演示: 当我们按下键盘的‘f’键的时候,演示的窗口会切换到全屏显示和默认显示两种显示模式 并且在后台我们可以看到相关的信息输出: 上面给出了一个简单的例子,当然在 ...
- pygame开发滑雪者游戏
pygame开发滑雪者游戏 一.实验说明 下述介绍为实验楼默认环境,如果您使用的是定制环境,请修改成您自己的环境介绍. 1. 环境登录 无需密码自动登录,系统用户名 shiyanlou,该用户具备 s ...
- pygame学习之绘制圆
import pygame from pygame.locals import * pygame.init() screen = pygame.display.set_mode((600, 500)) ...
- python编程学习--Pygame - Python游戏编程入门(0)---转载
原文地址:https://www.cnblogs.com/wuzhanpeng/p/4261015.html 引言 博客刚开,想把最近学习的东西记录下来,算是一种笔记.最近打算开始学习Python,因 ...
- Python 用pygame模块播放MP3
安装pygame(这个是python3,32位的) pip安装这个whl文件 装完就直接跑代码啦,很短的 import time import pygame file=r'C:\Users\chan\ ...
- pygame经典sprite精灵类
import cStringIO, base64 import pygame from pygame.locals import * class Ball(pygame.sprite.Sprite): ...
随机推荐
- 巨变!a16z 关于新一代数据基础设施架构的深度洞察
点击上方 蓝字关注我们 来源 | a16z 作者 | Matt Bornstein, Martin Casado,Jennifer Li 翻译 | 夕颜 作为未来最重要的基础设施之一,数据正在成为各行 ...
- 教程 - 深度探讨在 Vue3 中引入 CesiumJS 的最佳方式
目录 1. 你应该先知道的基础知识 1.1. CesiumJS 的库构成 1.2. 选择 Vite3 和 pnpm 的理由 1.3. 使用 External 模式引入静态库 - 不打包静态库 1.4. ...
- RabbitMQ 入门系列:6、保障消息:不丢失:发送方、Rabbit存储端、接收方。
系列目录 RabbitMQ 入门系列:1.MQ的应用场景的选择与RabbitMQ安装. RabbitMQ 入门系列:2.基础含义:链接.通道.队列.交换机. RabbitMQ 入门系列:3.基础含义: ...
- 避免jquery多次监听事件
jQuery.event.dispatch 事件分发监听源码简单理解是将绑定的事件放入队列后进行监听,如果对一个事件多次绑定(on或者bind),事件会重复添加到队列等待jq监听,这样会导致很大资源消 ...
- javaee相关基础
2020-2-28 java 学习 开始学习javaee了 瞎跳着看 今日内容 web相关概念 web服务器软件:Tomcat Servlet入门学习 web概念 软件架构 C/S:客户端/服务器端 ...
- IO流的文件输入输出效率问题
IO流的文件输入输出效率问题 第一种方法 我用使用一个数组,把FIleInputStream获取到的二进制数存入这个数组,然后使用FIleOutputStream进行输出 缺点:速度慢 优点:不消耗内 ...
- MySQL到底有没有解决幻读问题?这篇文章彻底给你解答
MySQL InnoDB引擎在Repeatable Read(可重复读)隔离级别下,到底有没有解决幻读的问题? 网上众说纷纭,有的说解决了,有的说没解决,甚至有些大v的意见都无法达成统一. 今天就深入 ...
- c#中容易被忽视的foreach
有句俗语:百姓日用而不知.我们c#程序员很喜欢,也非常习惯地用foreach.今天呢,我就带大家一起探索foreach,走,开始我们的旅程. 一.for语句用的好好的,为什么要提供一个foreach? ...
- 从零打造“乞丐版” React(一)——从命令式编程到声明式编程
这个系列的目的是通过使用 JS 实现"乞丐版"的 React,让读者了解 React 的基本工作原理,体会 React 带来的构建应用的优势 1 HTML 构建静态页面 使用 HT ...
- Java SE note1
1.数据类型 基本类型 低------------------------------------------------->高 byte,short,char -> int -> ...