pygame学习笔记——飞机大战爆炸效果
飞机大战基础参考:
pygame学习笔记——飞机大战练习案例_小橙子的博客-CSDN博客
爆炸效果思路:
当子弹和敌机碰撞时,爆炸效果图片移到子弹的坐标,展示爆炸效果。
展示爆炸效果需要用到多线程,防止对主线程进行干扰。
多线程参考:
python学习笔记——多线程_小橙子的博客-CSDN博客
注:以下爆炸效果使用两张图片代替
#7.创建爆炸效果
class BaoZha(pygame.sprite.Sprite):def __init__(self,xy):pygame.sprite.Sprite.__init__(self) # 调用父类的初始化方法#爆炸效果可能是多张图片,使用列表保存self.image = [pygame.Surface((30, 50)),pygame.Surface((50, 30))]self.image[0].fill('blue')self.image[1].fill('pink')#使用列表中第一个图片的位置self.rect = self.image[0].get_rect()# 设置初始位置self.rect.center = xydef update(self):for i in range(10):#使用余数切换不同的图片screen_surface.blit(self.image[i%2], self.rect.center)pygame.display.flip()#切换完图片,更新屏幕time.sleep(0.1)self.kill() # 终止,相当于删除特效
#print(a[0].rect.center)#获得碰撞子弹的坐标bz = BaoZha(a[0].rect.center)#创建一个爆炸效果对象#因为update中有for循环且有等待效果,防止干扰主线程_thread.start_new_thread(bz.update,tuple())#创建一个线程
完成的测试代码:
import pygame, sys
import random,time
import _thread# 1.pygame库的初始化
pygame.init()
# 2.设置窗口
screen_surface = pygame.display.set_mode((480, 600))# 4.创建一个飞机
class Plane(pygame.sprite.Sprite):def __init__(self):pygame.sprite.Sprite.__init__(self) # 调用父类的初始化方法# super().__init__(self)#此方式调用不管事,原因未知self.image = pygame.Surface((50, 50))self.image.fill('green')self.rect = self.image.get_rect()# 设置初始位置self.rect.center = (screen_surface.get_width() / 2, screen_surface.get_height() - 20)def update(self):# 获取键盘事件,如果按下,返回Truekeys = pygame.key.get_pressed() # 类似字典,通过key获取valueif keys[pygame.K_LEFT] and self.rect.left > 0:self.rect = self.rect.move(-10, 0)if keys[pygame.K_RIGHT] and self.rect.right < screen_surface.get_width():self.rect = self.rect.move(10, 0)if keys[pygame.K_UP] and self.rect.top > 0:self.rect = self.rect.move(0, -10)if keys[pygame.K_DOWN] and self.rect.bottom < screen_surface.get_height():self.rect = self.rect.move(0, 10)screen_surface.blit(self.image, self.rect) # 屏幕上 放 飞机,位置是rect的位置# 5.创建一个子弹类Bullet
class Bullet(pygame.sprite.Sprite):def __init__(self, center): # center是初始位置,传入坦克的中心pygame.sprite.Sprite.__init__(self) # 调用父类的初始化方法self.image = pygame.Surface((10, 30))self.image.fill('yellow')self.rect = self.image.get_rect()# 设置初始位置 初始位置要在飞机处——>外部传进self.rect.center = centerdef update(self):# 获取键盘事件,如果按下,返回Trueself.rect = self.rect.move(0, -20)screen_surface.blit(self.image, self.rect)if self.rect.top < 0: # 判断是否出屏幕self.kill() # 终止,相当于删除子弹# 6.创建敌机
class Enemy_plane(pygame.sprite.Sprite):def __init__(self):pygame.sprite.Sprite.__init__(self) # 调用父类的初始化方法# super().__init__(self)#此方式调用不管事,原因未知self.image = pygame.Surface((50, 50))self.image.fill('red')self.rect = self.image.get_rect()# 设置初始位置x = random.randint(0, screen_surface.get_width())y = 0self.rect.center = (x, y)def update(self):self.rect = self.rect.move((0, 10))if self.rect.y > screen_surface.get_height():x = random.randint(0, screen_surface.get_width())y = 0self.rect.center = (x, y)screen_surface.blit(self.image, self.rect) # 屏幕上 放 飞机,位置是rect的位置#7.创建爆炸效果
class BaoZha(pygame.sprite.Sprite):def __init__(self,xy):pygame.sprite.Sprite.__init__(self) # 调用父类的初始化方法#爆炸效果可能是多张图片,使用列表保存self.image = [pygame.Surface((30, 50)),pygame.Surface((50, 30))]self.image[0].fill('blue')self.image[1].fill('pink')#使用列表中第一个图片的位置self.rect = self.image[0].get_rect()# 设置初始位置self.rect.center = xydef update(self):for i in range(10):#使用余数切换不同的图片screen_surface.blit(self.image[i%2], self.rect.center)pygame.display.flip()#切换完图片,更新屏幕time.sleep(0.1)self.kill() # 终止,相当于删除特效# 创建一架飞机
plane_surface = Plane()
# 创建一个 子弹 精灵组(用于存放所有的精灵对象)
bullet_sprite = pygame.sprite.Group()
# 创建敌机
enemy_plane_surface = Enemy_plane()score = 0 # 存储得分clock = pygame.time.Clock()
# 3.游戏的主循环(事件的监听,数据的修改及绘图,界面的更新)
while True:# 3.1 事件的监听,关闭按钮无法使用。for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:if event.key == pygame.K_SPACE:# 按下一个空格,创建一个子弹对象bullet_surface = Bullet(plane_surface.rect.center)bullet_sprite.add(bullet_surface)# 3.2 数据的修改及绘图screen_surface.fill((0, 0, 0)) # 重新绘制背景# 3.2 飞机修改数据 更新画面plane_surface.update() # 修改数据+更新画面# 3.2 子弹更新数据 更新画面bullet_sprite.update() # 修改数据+更新画面# 3.2 敌机更新数据 更新画面enemy_plane_surface.update()a = pygame.sprite.spritecollide(enemy_plane_surface, bullet_sprite, True)if a:#print(a[0].rect.center)#获得碰撞子弹的坐标bz = BaoZha(a[0].rect.center)#创建一个爆炸效果对象#因为update中有for循环且有等待效果,防止干扰主线程_thread.start_new_thread(bz.update,tuple())#创建一个线程score += 10x = random.randint(0, screen_surface.get_width())y = 0enemy_plane_surface.rect.center = (x, y)b = pygame.sprite.collide_rect(enemy_plane_surface, plane_surface) # 返回布尔值if b:break# 实现记录分数font_name = pygame.font.match_font("黑体") # 2.获得字体文件font = pygame.font.Font(font_name, 20) # 1.获取font对象(需要字体文件)# 绘制内容:text为内容,True为是否抗锯齿, WHITE是字体颜色font_surface = font.render(str(score), True, 'white') # 3.将文字生成 surface对象screen_surface.blit(font_surface, (screen_surface.get_width() / 2, 10))# 3.3 界面的更新pygame.display.flip()clock.tick(30) # 一秒切换30图片,具体等多长事件,这个方法自己会计算
pygame学习笔记——飞机大战爆炸效果相关推荐
- python项目:飞机大战(爆炸效果,血条,音效,buff加成,boss,菜单,完整详细注释的源码)
文章目录 一. 总体概览 基本功能 细节部分(全部可以自定义) 可增添需求 二,技术框架 核心技术概述 1.游戏的初始化和退出 2 理解游戏中的坐标系 3 创建游戏主窗口 4. 理解 **图像** 并 ...
- java飞机大战爆炸效果_Java飞机大战游戏设计与实现
1 概述 1.1 项目简介 本次Java课程设计是做一个飞机大战的游戏,应用Swing编程,完成一个界面简洁流畅.游戏方式简单,玩起来易于上手的桌面游戏.该飞机大战项目运用的主要技术即是Swing编程 ...
- Python使用pygame模块实现飞机大战
文章目录 ReadMe 1.开发环境 2.准备环境 2.1 创建工程文件夹和虚拟环境 2.2 安装pygame工具包 3.帮助文档 4.开发步骤 5.项目分析 5.1 对象关系图 5.2 飞机具有的属 ...
- 基于pygame实现的飞机大战游戏
目录 1.引言 1.1 背景 1.2 意义 1.3 功能 2.系统结构 2.1 整体框架 2.2 精灵与精灵组 2.3 功能介绍 2.3.1 玩家飞机 2.3.2 敌机类型和关卡设定 2.3.3 敌机 ...
- Qt学习总结——飞机大战小游戏制作
Qt学习总结--飞机大战小游戏制作 1. 需求分析 这篇文章写于2020年暑假,完成学校实训项目之后,对自己的项目实践做了一个总结,回顾整个项目的制作过程,同时也复习一下Qt的相关知识,总结项目制作过 ...
- Pygame学习笔记 6 —— 3D游戏
pygame是是上世纪的产品,虽然不适合最3D游戏,但我可以使用pygame来绘制简单的3D图形,就像在白纸上画立体图形一样. 主要内容: 视觉上的远近.3D空间.绘制一个空间图形 一.视觉上 ...
- Python第三方库pygame学习笔记(一)
Pygame Python最经典的2D游戏开发第三方库,也支持3D游戏开发 Pygame适合用于游戏逻辑验证.游戏入门及系统演示验证 Pygame是一种游戏开发引擎,基本逻辑具有参考价值 pygame ...
- python入门笔记——飞机大战(极简版、未进行继承优化)
python入门笔记--飞机大战(极简版.未进行继承优化) import random import pygame# 引用pygame里的模块 from pygame.locals import *# ...
- 【Python游戏】pygame模块制作飞机大战、贪吃蛇(多模式)含源码
pygame模块制作飞机大战.贪吃蛇(多版本) 本章意在学习pygame模块以及巩固python语法. 若有需请转去个人github:https://github.com/onlyhyl/pyGame
- pygame之《飞机大战》(一)
前言: 学习完Python后,为巩固与练习,因而编写了<飞机大战>小游戏.(共六个章节) GitHub:https://github.com/GYT0313/FeiJiDaZhan 最终成 ...
最新文章
- Android之利用JSBridge库实现Html,JavaScript与Android的所有交互
- python 包中当前目录对应的一个点号
- 【C++深度剖析教程29】C++对象模型分析下
- 会计云课堂实名认证后怎么更改_会计云课堂怎么听课 网上听课步骤详解
- 简述linux虚拟内存的概念,Linux进程虚拟内存中的相关概念
- Golang面向并发的内存模型
- 追风猎洞只能喝西北风吗?
- 【论文写作】网上办公自动系统中功能需求如何写
- 蛮力法 —— 求解最大连续子序列和问题
- 计算机视觉论文-2021-09-07
- matlab 角度转四元数_学习笔记—四元数与欧拉角之间的转换
- 类似endnote_除了EndNote,竟还有如此强大的文献管理软件!重点是正版免费!
- 洛谷P1005 [NOIP2007 提高组] 矩阵取数游戏
- JavaScript 压缩图片
- 微信将可开小号!微信内测一个手机可注册俩号
- 高大上~的裸眼3D原理与制作方法
- win10 高分屏显示模糊的解决办法
- 复现有道NLPCC-2018 CGEC:A Neural Machine Translation Approach to Chinese Grammatical Error Correction
- c语言printf函数中的格式控制字符串,C++_C语言格式化输入输出函数详解,一:格式输出函数printf()
1 - phpStudy...
- 小鼠心肌细胞培养方法
热门文章
- 交换机组播风暴_「广播风暴」CISCO交换机如何防止广播风暴 - seo实验室
- 元数据管理实践数据血缘
- 数据结构——递归算法、递推算法、穷举算法、分治算法
- 星星之火OIer:编程社四连测总结
- python爬虫实训总结报告_python爬虫简单总结(一)
- Spring—事务配置及mybatis整合
- 豫教科计算机资源管理教案,豫科版小学五年级上册信息技术教案(全册.doc
- 实名认证-身份证实名认证-身份证实名认证接口-身份证实名认证api-实名认证api接口-身份证实名认证api接口
- Java单元测试之JUnit 5快速上手
- 操作系统实验六、死锁问题实验——单车道问题