使用定时器添加敌机
游戏启动后,每隔一秒出现一架敌方飞机
每架飞机向屏幕下方飞行,速度各不相同
没加敌机出现的水平位置也不进相同
当敌机从屏幕下方飞出,不会再飞回到屏幕中
 
定时器
pygame中使用pygame.time.set_timer()来添加定时器
所谓定时器,就是每隔一段时间,去执行一些动作
set_timer(eventid,milliseconds) -> None
"""
set_timer可以创建一个事件
可以在游戏循环的事件监听方法中捕获到时间
eventid:事件id,基于pygame.USEREVENT指定
milliseconds:事件触发间隔的毫秒值
通过pygame.event.get获取所有事件列表
遍历判断event.type ==eventid,如果相等,表示定时器事件发生
"""
 
定义监听创建敌机事件
 
# 创建敌机定时器事件常量
CREATE_ENEMY_EVENT = pygame.USEREVENT
# 主程序初始化方法中设置定时器事件 - 创建敌机 1000毫秒
pygame.time.set_timer(CREATE_ENEMY_EVENT,1000)
"""敌机精灵"""
class Enemy(GameSprite):
def __init__(self):
# 调用父类方法 创建敌机精灵,指定图片
super().__init__('./images/enemy1.png', 1) # 指定敌机初始随机速度 1~3
self.speed = random.randint(1,3)
# 指定敌机初始随机位置
# bottom:矩形对象的下边缘,即左下顶点对应的y坐标(左上顶点的纵坐标+矩形对象的高)
self.rect.bottom = 0
max_x = SCREEN_RECT.width - self.rect.width
self.rect.x = random.randint(0,max_x) def update(self):
# 调用父类方法保持垂直方向的飞行
super().update()
# 判断是否飞出屏幕。如果是,从精灵组删除
if self.rect.y >= SCREEN_RECT.height:
self.kill() # 调用kill方法,将精灵从所有精灵组删除
 
"""飞机大战主程序"""
class PlaneGame(object): # 完成游戏的初始化动作
def __init__(self):
print('--游戏初始化--')
# 创建游戏窗口 SCREEN_RECT是plane_sprites定义的常量,设定了窗口的大小,通过size获取窗口大小
self.screen = pygame.display.set_mode(SCREEN_RECT.size)
# 创建游戏时钟
self.clock = pygame.time.Clock()
# 调用私有方法 创建精灵和精灵组
self.__create_sprites() # 设置定时器事件 - 创建敌机 1000毫秒
pygame.time.set_timer(CREATE_ENEMY_EVENT,1000) # 私有方法-创建精灵、精灵组
def __create_sprites(self):
# 创建两个背景精灵加入精灵组,实现循环滚动
background_1 = Background()
background_2 = Background(True) # 设置True表示交替背景,设置位置
self.back_group = pygame.sprite.Group(background_1,background_2) # 创建敌机精灵组
self.enemy_group = pygame.sprite.Group() # 私有方法-更新精灵组
def __update_sprites(self):
self.back_group.update() # 更新背景精灵组所有精灵
self.back_group.draw(self.screen) # 绘制精灵组图像
self.enemy_group.update() # 更新敌机精灵组精灵
self.enemy_group.draw(self.screen) # 私有方法-事件监听
def __event_handler(self):
for event in pygame.event.get():
if event.type == pygame.QUIT: # 判断是否退出游戏
self.__game_over()
elif event.type == CREATE_ENEMY_EVENT: # 判断敌机事件
print('--敌机出场--')
# 创建敌机精灵
enemy = Enemy()
# 通过精灵组.add方法,将敌机精灵添加到精灵组
self.enemy_group.add(enemy) # 私有方法-碰撞监测
def __check_collide(self):
pass @staticmethod # 私有方法-结束游戏
def __game_over():
print('--游戏结束--')
pygame.quit()
exit() # 游戏循环
def start_game(self):
print('--游戏开始--')
while True:
# 设置刷新帧率
self.clock.tick(FRAME_PER_SEC)
# 事件监听
self.__event_handler()
# 碰撞监测
self.__check_collide()
# 更新、绘制精灵组
self.__update_sprites()
# 更新显示
pygame.display.update()
 

8.pygame-定时器的更多相关文章

  1. 【python游戏编程之旅】第六篇---pygame中的Sprite(精灵)模块和加载动画

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 直到现在我们已经学了很多pygame基础知识了,从这篇博客开始我们将会学习pygame中高级部分,更多和精灵 ...

  2. 15 飞机大战:pygame入门、python基础串连

    0 pygame模块的导入 import pygame导入pygame包 使用pygame.init()导入pygame的所有模块.只有导入模块pygame才能使用. 使用pygame.quit()卸 ...

  3. <pygame> 打飞机(小游戏)

    0.游戏的基本实现 ''' 游戏的基本实现 游戏的初始化:设置游戏窗口,绘制图像的初始位置,设定游戏时钟 游戏循环:设置刷新频率,检测用户交互,更新所有图像位置,更新屏幕显示 ''' 1.安装pyga ...

  4. 18 11 07 pygame 继续使用

    ---恢复内容开始--- 1  给原来的游戏不定时  增加一些敌机  用到了pygame的定时器    定时器就是每隔一段时间  就进行一次相同的操作 2 pyagame 在捕获键盘操作有两种 1  ...

  5. Pygame相关

    pygame是主要构筑在SDL库基础上的一组Python模块的集合,它使我们能够用Python语言来创建功能完整的游戏和多媒体程序.pygame是高度括平台可移植的,在任何SDL支持的平台上都可以运行 ...

  6. 11.pygame飞机大战游戏整体代码

    主程序 # -*- coding: utf-8 -*- # @Time: 2022/5/20 22:26 # @Author: LiQi # @Describe: 主程序 import pygame ...

  7. Objective-C三种定时器CADisplayLink / NSTimer / GCD的使用

    OC中的三种定时器:CADisplayLink.NSTimer.GCD 我们先来看看CADiskplayLink, 点进头文件里面看看, 用注释来说明下 @interface CADisplayLin ...

  8. 微信小程序中利用时间选择器和js无计算实现定时器(将字符串或秒数转换成倒计时)

    转载注明出处 改成了一个单独的js文件,并修改代码增加了通用性,点击这里查看 今天写小程序,有一个需求就是用户选择时间,然后我这边就要开始倒计时. 因为小程序的限制,所以直接选用时间选择器作为选择定时 ...

  9. [Java定时器]用Spring Task实现一个简单的定时器.

    今天做一个项目的的时候需要用到定时器功能.具体需求是: 每个月一号触发一次某个类中的方法去拉取别人的接口获取上一个月份车险过期的用户.如若转载请附上原文链接:http://www.cnblogs.co ...

  10. Node+fs+定时器(node-schedule)+MySql

    目标:将本人写博客时候的截图保存到桌面的图片 执行保存到指定文件进行整理 并写入数据库 先看最终的目录结构: package.json文件: { "name": "zqz ...

随机推荐

  1. Bert不完全手册7. 为Bert注入知识的力量 Baidu-ERNIE & THU-ERNIE & KBert

    借着ACL2022一篇知识增强Tutorial的东风,我们来聊聊如何在预训练模型中融入知识.Tutorial分别针对NLU和NLG方向对一些经典方案进行了分类汇总,感兴趣的可以去细看下.这一章我们只针 ...

  2. QQ高级功能

    本篇文章为微信公众号:酿俗 教学内容请跟着小编一起探索吧! 第一步解锁微信豆影藏内容 随后下载需要的材料,注意!手机可能会提示有病毒!这里使用这些功能报病毒很正常 其实并没有病毒只是手机厂商的安全系统 ...

  3. KingbaseES中的参数查看与修改

    KingbaseES数据库的配置参数都在kingbase.conf文件中,这些参数有些是直接修改就可以生效,有些需要重启数据库才能生效,而有些根本就不能修改.数据库把这些参数分为以下几类: inter ...

  4. KingbaseFlySync 评估工具的使用

    关键字: KingbaseFlySync.Linux.x86_64.mips64el.aarch64.Java **** 评估工具的使用**** 1.查询评估工具所在服务器的硬件平台(x86_64.m ...

  5. Centos_yum使用

    安装应用 yum install -y xxx -y 表示自动yes 卸载应用 yum -y remove xxx -y 表示自动yes 查看已安装的应用 yum list installed

  6. 利用京东云Web应用防火墙实现Web入侵防护

    摘 要 本指南描述如何利用京东云Web应用防火墙(简称WAF),对一个简单的网站(无论运行在京东云.其它公有云或者IDC)进行Web完全防护的全过程.该指南包括如下内容: 1 准备环境 1.1 在京东 ...

  7. 简述会话跟踪技术——Cookie和Session

    简述会话跟踪技术--Cookie和Session 本篇文章将会简单介绍Cookie和Session的概念和用法 会话跟踪技术 首先我们需要搞清楚会话和会话跟踪的概念: 会话:用户打开浏览器,访问Web ...

  8. Redis变慢?深入浅出Redis性能诊断系列文章(一)

    (本文首发于"数据库架构师"公号,订阅"数据库架构师"公号,一起学习数据库技术)   Redis 作为一款业内使用率最高的内存数据库,其拥有非常高的性能,单节点 ...

  9. 《Java Web程序设计——开发环境搭建》

    Java Web程序设计--开发环境搭建       一.JDK下载.安装以及环境变量的配置: 官网:https://www.oracle.com/java/technologies/download ...

  10. Python数据科学手册-Numpy数组的计算:比较、掩码和布尔逻辑,花哨的索引

    Numpy的通用函数可以用来替代循环, 快速实现数组的逐元素的 运算 同样,使用其他通用函数实现数组的逐元素的 比较 < > 这些运算结果 是一个布尔数据类型的数组. 有6种标准的比较操作 ...