小学生python游戏编程arcade----爆炸粒子类
2023-09-11 14:20:48 时间
小学生python游戏编程arcade----爆炸粒子类
前言
接上篇文章继续解绍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次。
可以关注我,点赞我、评论我、收藏我啦。
相关文章
- 【零基础学python】:清华官方出品的《看漫画学Python》全彩PDF,495页资源分享
- 掌握Python语言能做什么?python对小白友好吗?
- 24岁非计算机专业工科妹子裸辞转行Python程序员,自学Python三个月,零基础如何系统学习python,从入门到精通?
- 少儿学编程系列 --- 使用python程序暴力求解:数学游戏 24 Game的答案
- 大话游戏循环Game Loop——Python&C++
- 跳跃游戏 python
- 《Python游戏编程快速上手》——导读
- 《Python游戏编程快速上手》一2.3 在变量中存储值
- 《Python游戏编程快速上手》一导读
- 《Python和Pygame游戏开发指南》——2.11 颜色的透明度
- 《Python和Pygame游戏开发指南》——2.17 动画
- 《Python游戏编程入门》——第1章 使用类的Python 1.1 了解Geometry程序
- 《Python游戏编程入门》——导读
- 《树莓派Python编程指南》——2.2 一个Python游戏:猫和老鼠
- 再探 游戏 《 2048 》 —— AI方法—— 缘起、缘灭(7) —— Python版本实现的《2048》游戏的TDL算法
- 再探 游戏 《 2048 》 —— AI方法—— 缘起、缘灭(6) —— Python版本实现的《2048》游戏环境运行性能对比
- 小学生python游戏编程arcade----精灵类直接用内存图片给值
- 小学生python游戏编程arcade----坦克大战3
- 小学生python游戏编程arcade----敌人自动面向角色并开火
- 小学生python游戏编程arcade----基本知识4角色动画
- 小学生python游戏编程arcade----基本知识2
- 小学生python游戏编程7----角色精灵定义
- python中常用的便捷巧妙的方法