小学生python游戏编程arcade----爆炸粒子类

news2025/1/12 1:04:25

小学生python游戏编程arcade----爆炸粒子类

  • 前言
  • 1.1 参数设置
  • 粒子加速下降的速度。如果不需要,则为0
  • 粒子退出的速度
  • 粒子移动的速度。范围为2.5<-->5,设置为2.5和2.5。
  • 每次爆炸有多少粒子
  • 粒子直径多大
  • 粒子颜色列表
  • 我们有可能将纹理翻转为白色,使其“闪闪发光”
  • 开始烟雾缩放,缩放速度有多快
  • 随机小烟雾值
  • 烟雾类
  • 随机粒子类
        • 1.3 效果图
        • 1.4 代码实现
    • 源码获取

前言

接上篇文章继续解绍arcade游戏编程的基本知识。爆炸粒子类,爆炸效果由两部分随成

1.1 参数设置

粒子加速下降的速度。如果不需要,则为0

PARTICLE_gravity = 0.05

粒子退出的速度

PARTICLE_fade_rate = 8

粒子移动的速度。范围为2.5<–>5,设置为2.5和2.5。

PARTICLE_min_speed = 2.5
PARTICLE_speed_range = 2.5

每次爆炸有多少粒子

PARTICLE_count = 20

粒子直径多大

PARTICLE_RADIUS = 3

粒子颜色列表

PARTICLE_colors = [arcade.color.ALIZARIN_CRIMSON,
arcade.color.COQUELICOT,
arcade.color.LAVA,
arcade.color.KU_CRIMSON,
arcade.color.DARK_TANGERINE]

我们有可能将纹理翻转为白色,使其“闪闪发光”

PARTICLE_sparkle_chance = 0.02

#注意:添加烟雾轨迹会产生大量精灵,并会减慢速度
#向下。如果你想要很多,就需要将处理转移到GPU
#使用变换反馈。如果要慢下来,就把烟除掉。

开始烟雾缩放,缩放速度有多快

SMOKE_start_scale = 0.25
SMOKE_EXPANSION_RATE = 0.03

#烟雾消退和上升的速率
SMOKE_FADE_RATE = 7
SMOKE_RISE_RATE = 0.5

随机小烟雾值

SMOKE_chance = 0.25

烟雾类

class Smoke(arcade.SpriteCircle):
    """ 烟雾"""
    def __init__(self, size):
        super().__init__(size, arcade.color.LIGHT_GRAY, soft=True)
        self.change_y = SMOKE_RISE_RATE
        self.scale = SMOKE_start_scale

    def update(self):
        """ 更新粒子 """
        if self.alpha <= PARTICLE_fade_rate:
            # 移除淡出的粒子
            self.remove_from_sprite_lists()
        else:
            # 更新粒子
            self.alpha -= SMOKE_FADE_RATE
            self.center_x += self.change_x
            self.center_y += self.change_y
            self.scale += SMOKE_EXPANSION_RATE

随机粒子类

class Particle(arcade.SpriteCircle):
    """ 爆炸粒子"""
    def __init__(self, my_list):
        # 随机颜色
        color = random.choice(PARTICLE_colors)

        # 制造粒子
        super().__init__(PARTICLE_RADIUS, color)

        # 跟踪正常的粒子纹理,这样我们可以在闪耀时“翻转”。
        self.normal_texture = self.texture

        # 跟踪我们的列表,这样我们就可以添加烟雾痕迹
        self.my_list = my_list

        # 设置方向及速度
        speed = random.random() * PARTICLE_speed_range + PARTICLE_min_speed
        direction = random.randrange(360)
        self.change_x = math.sin(math.radians(direction)) * speed
        self.change_y = math.cos(math.radians(direction)) * speed

        # 跟踪原始alpha。用作“火花”的一部分,我们在其中临时设置alpha返回到255
        self.my_alpha = 255

    def update(self):
        """ 更新粒子 """
        if self.my_alpha <= PARTICLE_fade_rate:
            # 淡出
            self.remove_from_sprite_lists()
        else:
            # 更新
            self.my_alpha -= PARTICLE_fade_rate
            self.alpha = self.my_alpha
            self.center_x += self.change_x
            self.center_y += self.change_y
            self.change_y -= PARTICLE_gravity

            # Should we sparkle this?
            if random.random() <= PARTICLE_sparkle_chance:
                self.alpha = 255
                self.texture = arcade.make_circle_texture(int(self.width),
                                                          arcade.color.WHITE)
            else:
                self.texture = self.normal_texture

            # 随机小烟雾颗粒
            if random.random() <= SMOKE_chance:
                smoke = Smoke(5)
                smoke.position = self.position
                self.my_list.append(smoke)


1.3 效果图

在这里插入图片描述

1.4 代码实现

    def update_explosion(self):
        self.explosions_list.update()

        # 循环子弹列表
        for bullet in self.scene[LAYER_bullet]:

            # 碰撞检测
            hit_list = arcade.check_for_collision_with_list(bullet,  self.scene['建筑物'])

            if len(hit_list) > 0:
                bullet.remove_from_sprite_lists()

            # 如碰撞,则让敌人消失,同时制造粒子
            for coin in hit_list:
                # 制造爆炸
                for i in range(20):
                    particle = Particle(self.explosions_list)
                    particle.position = coin.position # 粒子位置,也即敌人位置
                    self.explosions_list.append(particle)

                smoke = Smoke(30)
                smoke.position = coin.position  # 烟雾位置
                self.explosions_list.append(smoke)

                coin.remove_from_sprite_lists()

                # 打击声音
                arcade.sound.play_sound(self.hit_sound)

            # 如过子弹超过屏幕则删掉.
            if bullet.bottom > SCREEN_height:
                bullet.remove_from_sprite_lists()

源码获取

关注博主后,私聊博主免费获取
需要技术指导,育娃新思考,企业软件合作等更多服务请联系博主

今天是以此模板持续更新此育儿专栏的第 24/50次。
可以关注我,点赞我、评论我、收藏我啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/19774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

芒果改进YOLOv7系列:首发改进特征融合网络BiFPN结构,融合更多有效特征

💡统一使用 YOLOv7 代码框架,结合不同模块来构建不同的YOLO目标检测模型。文章目录 一、BiFPN论文理论部分代码部分YOLOv7+BiFPN在这篇文章中,将BiFPN结构加入到 YOLOv7 结构中 一、BiFPN论文理论部分 EfficientDet: Scalable and Efficient Object Detection BiFPN与P…

芯天下在创业板过会:预计全年收入将达到10亿元,净利润约2亿元

11月18日&#xff0c;深圳证券交易所创业板披露的信息显示&#xff0c;芯天下技术股份有限公司&#xff08;下称“芯天下”&#xff09;获得上市委会议通过&#xff0c;即IPO过会。据贝多财经了解&#xff0c;芯天下于2022年4月28日在创业板递交上市申请材料。 本次冲刺创业板上…

vins-mono初始化代码分析

大体流程 初始化主要分成2部分&#xff0c;第一部分是纯视觉SfM优化滑窗内的位姿&#xff0c;然后在融合IMU信息。 这部分代码在estimator::processImage()最后面。 主函数入口&#xff1a; void Estimator::processImage(const map<int, vector<pair<int, Eigen:…

maven大全(概述、maven安装配置、IDEA配置maven、IDEA创建maven项目并如何使用)

目录 一、概述 1.什么是maven&#xff1f; 2.maven有什么作用&#xff1f; &#xff08;1&#xff09;提供了一套标准化的项目结构 &#xff08;2&#xff09;提供了标准化的构建流程&#xff08;编译、测试、打包、发布&#xff09; &#xff08;3&#xff09;提供了一套…

Java -- 每日一问:后台服务出现明显“变慢”,谈谈你的诊断思路?

典型回答 首先&#xff0c;需要对这个问题进行更加清晰的定义: 服务是突然变慢还是长时间运行后观察到变慢&#xff1f;类似问题是否重复出现&#xff1f;“慢”的定义是什么&#xff0c;我能够理解是系统对其他方面的请求的反应延时变长吗? 第二&#xff0c;理清问题的症状…

【计算机考研必备常识】24考研你开始准备了吗?

前言 23考研只剩下一个多月了&#xff0c;准备 【24考研】 的小伙伴是否有一丝丝焦虑了呢&#xff1f; 对于考研相关的常识问题&#xff0c;你又是否有了解呢&#xff1f;考研全流程&#xff1f;计算机考研考什么&#xff1f;学硕和专硕怎么选 … 一系列考研相关的常识问题博…

JWT和token是什么?如何利用token进行身份验证?

什么是token&#xff1f;什么是JWT&#xff1f;如何基于token进行身份验证&#xff1f; 我们都知道session信息需要保存一份在服务器端。这种方式会带来一些麻烦&#xff0c;比如需要我们保证保存session信息服务器的可用性、不适合移动端等。 有没有一种不需要自己存放sessi…

五、DMSQL

五、数据类型与操作符和常用DMSQL语句 1、数据类型与操作符介绍 达梦数据库支持的数据类型有很多&#xff0c;具体如下&#xff1a; 其中&#xff1a; 常规数据类型 数值数据类型字符数据类型多媒体数据类型日期时间数据类型 一般日期时间类型时区数据类型时间间隔数据类型 B…

辰奕智能在创业板过会:计划募资约4亿元,约有五成来自境外

11月18日&#xff0c;深圳证券交易所创业板披露的信息显示&#xff0c;广东辰奕智能科技股份有限公司&#xff08;下称“辰奕智能”&#xff09;获得上市委会议通过&#xff0c;即IPO过会。据贝多财经了解&#xff0c;辰奕智能于2021年12月31日在创业板递交上市申请材料。 本次…

【论文阅读】社交网络传播最大化问题-01

问题定义&#xff1a;构建传播最大化模型&#xff08;最大化末态时的激活节点数量 &#xff09;& 确定最具影响力节点 思考问题&#xff1a; 影响节点影响力的因素&#xff1f;有向图和无向图的模型构建区别&#xff1f; 定义参数&#xff1a; 节点影响力的取值范围节点…

Thinkphp6.0.x反序列化漏洞复现

漏洞起点 起因: 在做 [安洵杯 2019]iamthinking 时发现是 thinkphp6 的反序列化&#xff0c;那么就去复现一下呗。 看了其他大佬的 wp&#xff0c;上面说 tp6 的反序列化漏洞的后半段利用和 tp5.2.x 是一样的&#xff0c;也就是 __toString 函数上。 第一步相信大家都知道&a…

USV合伙人反思FTX:应以更长远的眼光看待Web3

潜力博主推荐&#xff0c;点击上面关注博主 ↑↑ FTX的事件动摇了许多人的信心。那么&#xff0c;最大的加密货币交易所之一是如何迅速崩溃的&#xff1f;为什么加密世界的类似崩溃似乎一直在发生&#xff1f; 在这个时候&#xff0c;我们要对Web3整个行业&#xff0c;有一个更…

FA-PEG-N3,Folic acid-PEG-Azide,叶酸-聚乙二醇-叠氮一种叶酸PEG试剂

叶酸PEG试剂叶酸-聚乙二醇-叠氮&#xff0c;其英文名为Folic acid-PEG-Azide&#xff08;FA-PEG-N3&#xff09;&#xff0c;它所属分类为Azide PEG Folic acid&#xff08;FA&#xff09; PEG。 叶酸-PEG-叠氮的的分子量均可定制&#xff0c;有&#xff1a;FA-PEG-N3 5000、叶…

感受Vue (1) —— Hello world

虽然一直定位自己是个后端&#xff0c;但是我一直钟情于好看精致的界面&#xff0c;我觉得前端界面是门艺术并结合编程的美。爱美之心&#xff0c;人皆有之&#xff0c;不要怪我&#xff0c;也不能怪我。 vue 在前端框架中&#xff0c;世界范围内能排第三&#xff0c;也是很不简…

UE5笔记【零】快捷键

F&#xff1a;快速聚焦到所选中的对象。 Q&#xff1a;选择 W&#xff1a;移动、 E&#xff1a;旋转、 R&#xff1a;伸缩。 End&#xff1a;物体落在它下方的物体上。 组合键&#xff1a; 鼠标左键或者右键&#xff1a;E是跳跃&#xff0c;Q是蹲下。 Ctrl L:控制太阳高…

[附源码]SSM计算机毕业设计在线学习网站的设计与实现JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

使用docker 注册runner

获取gitlab 信息 需要从gitlab中获取两个信息&#xff0c;一个是gitlab的域名&#xff0c;一个是需要注册runner的token gitalb 的runner按照范围可以有三种 全局类型即整个gitlab 的项目都可使用的runnergroup类型&#xff1a;即当前group中的项目可使用的runner,不同group之…

1-4 Linux 标准目录结构FHS

文章目录前言标准目录结构/ (根目录)/bin/boot/dev/etc/home/lib/media/mnt/opt/run/sbin/srv/tmp/proc/sys/var/lostfound/root/usr前言 Linux操作系统中的目录(文件夹)结构遵循Linux基金会定义和维护的Linux文件系统层次标准(FHS)。有了定义良好的标准&#xff0c;用户和软件…

【VC】【全局修改windows系统环境变量】 实现和原理详解

文章目录导读开发环境实现通过procexp打开1836进程的环境变量列表修改注册表&#xff08;手动/编码实现&#xff09;广播WM_SETTINGCHANGE消息再次通过procexp打开1836进程的环境变量列表也可以通过《系统属性 > 环境变量》来查看是否生效文章小结参考资料导读 一直都很好奇…

[附源码]java毕业设计水果商城

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…