当前位置: 首页 > news >正文

制作一款打飞机游戏79:道具拾取系统

道具拾取系统概述

道具拾取系统可以分解为三个阶段:‌生成道具‌、‌更新道具‌、‌绘制道具‌。这是每个游戏对象都需要经历的基本流程。但在深入之前,我想先分享一下在开发过程中遇到的一些挑战和决策过程。

挑战与决策

最初,我考虑过复用现有的系统来实现道具拾取,比如利用粒子系统或者敌人系统。粒子系统虽然动画效果丰富,但它更适合用于短暂的屏幕效果,而非长期存在的、与玩家交互的对象。而敌人系统虽然拥有复杂的行为逻辑,但道具的移动方式和行为模式与敌人截然不同。最终,我决定为道具拾取系统创建一个独立的实现,包括自己的数组和更新函数,以确保其独特的行为模式得以实现。

道具设计与实现
道具设计

我们目前有两种类型的道具:‌奶牛道具‌和‌星星道具‌。奶牛道具虽然可爱,但在视觉上不够明确其价值。相比之下,星星道具更能直观地传达出“得分”或“有价值”的信息。因此,在设计星星道具时,我采用了镜像功能,以非均匀像素数量进行旋转,使其更加生动有趣。

奶牛道具的实现问题

在实现奶牛道具时,我遇到了一个问题:现有的奶牛精灵图不够全面,缺少某些角度的视图,且部分精灵图有轮廓,部分没有。为了解决这个问题,我考虑了几种方案,包括调整现有精灵图、绘制新的精灵图或者采用其他替代方案(如使用不可交互的地面敌人来模拟奶牛)。最终,我决定暂时使用现有精灵图,并在后续根据需要进行优化。

道具动画与行为

为了让道具更加生动有趣,我为奶牛和星星道具都设计了动画效果。奶牛道具会进行旋转动画,而星星道具则保持静态。此外,我还为奶牛道具添加了一个“泡泡”效果,使其看起来像是在空间中漂浮,从而解决了原本看起来有些奇怪的飞行效果。

绘制泡泡函数

def draw_bubble(x, y, width, height, color):
# 使用自定义的oval函数绘制椭圆
oval(x, y, width, height, color)

更新道具位置,添加泡泡效果

def update_pickup(pickup):
# 计算泡泡的动画效果
bubble_x_offset = math.sin(time) * 4
bubble_y_offset = math.cos(time) * 4
pickup.x += pickup.sx
pickup.y += pickup.sy
# 绘制泡泡
draw_bubble(pickup.x + bubble_x_offset, pickup.y + bubble_y_offset, 7, 7, 7)
# 绘制奶牛道具
draw_sprite(pickup.x, pickup.y, pickup.sprite)

道具生成与移动

道具会在消灭敌人时生成,并从敌人消失的位置飞出。为了使道具的运动更加自然,我为它们添加了一些随机性,确保每个道具都以略微不同的速度和方向移动。此外,我还实现了一个缓动效果,使道具能够逐渐加速到其最终速度,而不是瞬间达到。

生成道具函数

def spawn_pickup(x, y):
pickup = {
‘x’: x,
‘y’: y,
‘sx’: random.uniform(-1, 1), # 随机速度X分量
‘sy’: random.uniform(1, 2), # 随机速度Y分量
‘age’: 0,
‘sprite’: cow_sprite # 默认为奶牛道具
}
pickups.append(pickup)

更新所有道具

def update_pickups():
for pickup in pickups:
update_pickup(pickup)
pickup.age += 1
# 缓动效果
pickup.sx = (pickup.sx * 9) / 10
pickup.sy = (pickup.sy * 9) / 10
在这里插入图片描述

http://www.lryc.cn/news/585317.html

相关文章:

  • 前端面试专栏-算法篇:22.树结构(二叉树、B树、红黑树)
  • flex 布局完整功能介绍和示例演示
  • 牛客:HJ17 坐标移动[华为机考][字符串]
  • Umi-OCR 的 Docker(win制作镜像,Linux(Ubuntu Server 22.04)离线部署)
  • Elasticsearch安装、入门、基础API操作、全文检索、精准查询、地理查询、复合查询、排序、分页、高亮、数据聚合、自动补全、数据同步、ES集群
  • 连锁门店如何统一固定资产盘点?总部+门店协同攻略
  • 基于Python的豆瓣图书数据分析与可视化系统【自动采集、海量数据集、多维度分析、机器学习】
  • nginx 负载均衡配置(加解决重复登录问题)
  • 【机器学习】机器学习基础
  • 借助 Wisdom SSH AI 助手,轻松安装 CentOS 8 LNMP 环境
  • 财务数字化——83页麦肯锡——建立成功的财务管理体系【附全文阅读】
  • V少JS基础班之第七弹
  • 人形机器人公司融合Xsens与Manus动作捕捉技术,利用人工智能训练机器人模仿人类动作,以执行复杂任务
  • OGG-00551 ODBC error: SQLSTATE 22007,从字符串转换日期和/或时间时,转换失败
  • JAVA面试宝典 -《Spring Boot 自动配置魔法解密》
  • 【氮化镓】不同偏压应力下电荷俘获效应导致的P-GaN HEMT阈值电压不稳定性
  • JVM方法区的运行时常量区到底存储哪些数据?
  • 【牛客刷题】dd爱科学1.0
  • LeetCode经典题解:128、最长连续序列
  • 从就绪到终止:操作系统进程状态转换指南
  • YS高容量通风器说明
  • BLE低功耗设计:从广播模式到连接参数优化的全链路分析与真题解析
  • 输入流挂起
  • 基于openEuler搭建Glusterfs集群实验
  • 2025企业官网黑链攻防实战:从紧急处置到长效防御体系构建
  • Python-异常、模块与包
  • 1Panel V1 无缝升级到 V2 版本 实现多个 PHP 网站共享一个容器
  • MySQL表的增删查改(下)(7)
  • 2025 年第十五届 APMCM 亚太地区大学生数学建模竞赛-B题 疾病的预测与大数据分析
  • 藏不住了,全是硬货!极空间快照,夸克网盘挂载,HDMI桌面输出全部安排!