制作一款打飞机游戏80:道具碰撞

目前我们仍然无法拾取这些物品,它们只是简单地掉落在地上。因此,我们需要对这些功能进行增强。

目标

  1. 弹射物品‌:当物品生成时,我们希望它们能以一定的力量弹出,而不是无力地掉落。
  2. 添加不同类型的物品‌:例如星星物品,以增加游戏的多样性。
  3. 生成多个物品‌:在某些情况下,我们需要能够一次性生成多个物品。
  4. 拾取物品‌:玩家需要能够拾取这些物品,并且旧物品在离开屏幕时应该被删除。
  5. 磁吸效果‌:我们希望实现一种磁吸效果,让玩家能够从远处吸引物品。

实现细节

弹射物品

为了实现弹射效果,我们需要修改物品的生成函数,使其在生成时具有一定的初速度。这将增加物品的动感,使其看起来像是从爆炸中弹出。

markdownCopy Code

// 修改生成函数,增加弹射效果 function spawnPickup(x, y, type, num) { // ... 其他代码 let speed = 5; // 弹射速度 pickups.push({ x: x, y: y, type: type, sx: Math.random() * speed - speed / 2, // 随机水平速度 sy: -speed, // 垂直向下的速度 // ... 其他属性 }); }

添加不同类型的物品

为了添加不同类型的物品(如星星),我们需要在生成函数中添加一个类型参数,并在绘制时根据类型选择不同的图形。

markdownCopy Code

// 生成物品时指定类型 spawnPickup(enemyX, enemyY, true, 1); // 生成一个星星物品 // 在绘制函数中根据类型选择图形 function drawPickups() { for (let pickup of pickups) { if (pickup.type) { // 绘制星星 drawStar(pickup.x, pickup.y); } else { // 绘制普通物品 drawOval(pickup.x, pickup.y, 10, 10); } } }

生成多个物品

为了实现一次性生成多个物品,我们需要在生成函数中增加一个数量参数,并在循环中生成指定数量的物品。同时,我们需要调整它们的位置,以避免重叠。

markdownCopy Code

// 生成多个物品 function spawnMultiplePickups(x, y, type, num) { for (let i = 0; i < num; i++) { let angle = Math.random() * 2 * Math.PI; // 随机角度 let offsetX = Math.cos(angle) * 10; // 根据角度计算偏移量 let offsetY = Math.sin(angle) * 10; spawnPickup(x + offsetX, y + offsetY, type, 1); } }

拾取物品

为了实现物品拾取功能,我们需要计算玩家与物品之间的距离,并在距离小于一定阈值时拾取物品。同时,我们需要播放拾取音效并显示拾取动画。

markdownCopy Code

// 计算玩家与物品之间的距离 function updatePickups() { for (let pickup of pickups) { let distance = Math.sqrt(Math.pow(player.x - pickup.x, 2) + Math.pow(player.y - pickup.y, 2)); if (distance < 32) { // 如果距离小于32,则拾取物品 playSoundEffect("pickup"); // 播放拾取音效 showPickupAnimation(pickup.x, pickup.y); // 显示拾取动画 pickups.splice(pickups.indexOf(pickup), 1); // 从列表中删除物品 } } }

磁吸效果

为了实现磁吸效果,我们需要在物品距离玩家较近时,计算一个指向玩家的向量,并逐渐改变物品的速度方向,使其向玩家移动。同时,我们可以绘制一条从物品当前位置到上一帧位置的线,以模拟速度线效果。

markdownCopy Code

// 实现磁吸效果 function updatePickups() { for (let pickup of pickups) { let distance = Math.sqrt(Math.pow(player.x - pickup.x, 2) + Math.pow(player.y - pickup.y, 2)); if (distance < 64) { // 如果距离小于64,则激活磁吸效果 let angle = Math.atan2(player.y - pickup.y, player.x - pickup.x); // 计算角度 let speed = 0.3; // 磁吸速度 pickup.sx += Math.cos(angle) * speed; // 更新水平速度 pickup.sy += Math.sin(angle) * speed; // 更新垂直速度 // 限制最大速度 let maxSpeed = 4; if (Math.sqrt(pickup.sx * pickup.sx + pickup.sy * pickup.sy) > maxSpeed) { let scale = maxSpeed / Math.sqrt(pickup.sx * pickup.sx + pickup.sy * pickup.sy); pickup.sx *= scale; pickup.sy *= scale; } // 绘制速度线 drawLine(pickup.lastX, pickup.lastY, pickup.x, pickup.y, 7); } // 保存上一帧位置 pickup.lastX = pickup.x; pickup.lastY = pickup.y; } }

总结

通过今天的修改,我们的游戏物品拾取功能得到了显著的增强。我们实现了物品的弹射效果、添加了不同类型的物品、支持了一次性生成多个物品、实现了物品拾取功能以及磁吸效果。在下一集中,我们将继续完善这些功能,并添加爆炸效果等更多游戏元素。感谢大家的支持,我们下期再见!

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

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

相关文章

Python编程基础(六)| 用户输入和while循环

引言 很久没有写 Python 了&#xff0c;有一点生疏。这是学习《Python 编程&#xff1a;从入门到实践&#xff08;第3版&#xff09;》的课后练习记录&#xff0c;主要目的是快速回顾基础知识。 练习1&#xff1a;汽车租赁 编写一个程序&#xff0c;询问用户要租什么样的汽车&a…

【华为机试】HJ52 计算字符串的编辑距离

文章目录HJ52 计算字符串的编辑距离描述输入描述输出描述示例1HJ52 计算字符串的编辑距离描述输入描述输出描述示例1解题思路算法分析动态规划状态转移状态转移方程算法流程图DP表格示例三种操作详解代码实现思路时间复杂度分析关键优化技巧实际应用场景算法扩展面试考点完整题…

15.手动实现BatchNorm(BN)

15.1 BatchNorm操作手动实现 import torch from torch import nndef batch_norm(X,gamma,beta,moving_mean,moving_var,eps,momentum):if not torch.is_grad_enabled():#这个是推理模式X_hat(X-moving_mean)/torch.sqrt(moving_vareps)else:assert len(X.shape) in (2,4)if le…

【项目实践】SMBMS(Javaweb版)汇总版

文章目录前期准备工作数据库、数据表创建web项目创建项目文件目录配置Tomcat&#xff0c;导入依赖建立实体类编写基础公共方法类导入基础资源登录功能登录页面持久层dao层的用户登录及接口实现dao层接口实现所需的方法业务层sevice层的接口的实现接口实现相关的业务逻辑编写ser…

隐藏源IP的核心方案与高防实践

一、源IP暴露的风险 直接DDoS攻击&#xff1a;2025年Q2全球DDoS攻击峰值达3.8Tbps&#xff08;来源&#xff1a;Cloudflare报告&#xff09;漏洞利用&#xff1a;暴露的SSH端口平均每天遭受12,000暴力破解尝试数据泄露&#xff1a;直接连接数据库风险提升300% 二、4种有效隐藏方…

深度学习图像分类数据集—五种电器识别分类

该数据集为图像分类数据集&#xff0c;适用于ResNet、VGG等卷积神经网络&#xff0c;SENet、CBAM等注意力机制相关算法&#xff0c;Vision Transformer等Transformer相关算法。 数据集信息介绍&#xff1a;五种电器识别分类&#xff1a;[notebook, phone, powerbank, tablet, w…

Windows11家庭版配置frigate 嵌入自研算法(基于Yolov8)-【2】

使用 YOLOv8 的 results.xyxy 结构&#xff0c;下面是一个完整的 MQTT 推送脚本&#xff0c;用于把识别到的目标&#xff08;比如突涌水、水渍、障碍物等&#xff09;发送到 Frigate 的 MQTT 接口。✅ 前提假设 YOLOv8 推理代码已经运行并生成 results.xyxy。每一行是 [x1, y1,…

安装llama-factory报错 error: subprocess-exited-with-error

报错信息如下 Using cached https://mirrors.aliyun.com/pypi/packages/17/89/940a509ee7e9449f0c877fa984b37b7cc485546035cc67bbc353f2ac20f3/av-15.0.0.tar.gz (3.8 MB)Preparing metadata (pyproject.toml) ... errorerror: subprocess-exited-with-error Preparing metad…

QT 多线程 管理串口

记录一下自己使用多线程进行串口管理和数据读取的过程。如果有问题的话可以发消息给我。背景在使用QT制作一个串口数据读取处理的小软件的时候&#xff0c;发现了存在界面卡顿的情况&#xff0c;感觉性能太低&#xff0c;于是考虑把串口数据的读取和处理都放到子线程的缓冲区中…

在虚拟环境中复现论文(环境配置)

前提&#xff1a;已经下载condawinR&#xff0c;输入cmd进入命令行conda create -n PPT python3.8.3 pytorch1.7.0conda create -n PPT(虚拟环境名) python3.8.3(包名) pytorch1.7.0(包名)安装完毕&#xff0c;激活虚拟环境&#xff1a;conda activate PPT根据论文readme要求安…

Flutter Web 的发展历程:Dart、Flutter 与 WasmGC

Flutter Web 应该是 Flutter 开发者里最不“受宠”的平台了&#xff0c;但是其实 Flutter 和 Dart 团队对于 Web 的投入一直没有减少&#xff0c;这也和 Flutter 还有 Dart 的"出生"有关系&#xff0c;今天就借着 Dart 团队的 mer Ağacan 和 Martin Kustermann 在油…

c#方法关键字,ref、out、int

在 C# 中&#xff0c;ref、out 和 in 是用于方法参数传递的关键字&#xff0c;它们控制参数如何在方法和调用者之间传递数据。以下是对这三个关键字的详细分析&#xff1a;1. ref 关键字&#xff08;引用传递&#xff09;作用允许方法修改调用者的变量&#xff1a;通过引用传递…

设计模式—初识设计模式

1.设计模式经典面试题分析几个常见的设计模式对应的面试题。1.1原型设计模式1.使用UML类图画出原型模式核心角色&#xff08;意思就是使用会考察使用UML画出设计模式中关键角色和关系图等&#xff09;2.原型设计模式的深拷贝和浅拷贝是什么&#xff0c;写出深拷贝的两种方式的源…

深度学习-参数初始化、损失函数

A、参数初始化参数初始化对模型的训练速度、收敛性以及最终的性能产生重要影响。它可以尽量避免梯度消失和梯度爆炸的情况。一、固定值初始化在神经网络训练开始时&#xff0c;将权重或偏置初始化为常数。但这种方法在实际操作中并不常见。1.1全零初始化将所有的权重参数初始化…

格密码--Ring-SIS和Ring-LWE

1. 多项式环&#xff08;Polynomial Rings&#xff09; 设 f∈Z[x]f \in \mathbb{Z}[x]f∈Z[x] 是首一多项式&#xff08;最高次项系数为1&#xff09; 则环 RZ[x]/(f)R \mathbb{Z}[x]/(f)RZ[x]/(f) 元素为&#xff1a;所有次数 <deg⁡(f)< \deg(f)<deg(f) 的多项式…

前端工作需要和哪些人打交道?

前端工作中需要协作的角色及协作要点 前端工作中需要协作的角色及协作要点 前端开发处于产品实现的 “中间环节”,既要将设计方案转化为可交互的界面,又要与后端对接数据,还需配合团队推进项目进度。日常工作中,需要频繁对接的角色包括以下几类,每类协作都有其核心目标和…

万字长文解析 OneCode3.0 AI创新设计

一、研究概述与背景 1.1 研究背景与意义 在 AI 技术重塑软件开发的浪潮中&#xff0c;低代码平台正经历从 “可视化编程” 到 “意图驱动开发” 的根本性转变。这种变革不仅提升了开发效率&#xff0c;更重新定义了人与系统的交互方式。作为国内领先的低代码平台&#xff0c;On…

重学前端006 --- 响应式网页设计 CSS 弹性盒子

文章目录盒模型一、盒模型的基本概念二、两种盒模型的对比 举例三、总结Flexbox 弹性盒子布局一、Flexbox 的核心概念​​二、Flexbox 的基本语法​​​​1. 定义 Flex 容器​​​2. Flex 容器的主要属性​​​​3. Flex 项目的主要属性​​​​三、Flexbox 的常见布局示例​​…

rLLM:用于LLM Agent RL后训练的创新框架

rLLM&#xff1a;用于LLM Agent RL后训练的创新框架 本文介绍了rLLM&#xff0c;一个用于语言智能体后训练的可扩展框架。它能让用户轻松构建自定义智能体与环境&#xff0c;通过强化学习进行训练并部署。文中还展示了用其训练的DeepSWE等智能体的出色表现&#xff0c;以及rLL…

rocky8 --Elasticsearch+Logstash+Filebeat+Kibana部署【7.1.1版本】

软件说明&#xff1a; 所有软件包下载地址&#xff1a;Past Releases of Elastic Stack Software | Elastic 打开页面后选择对应的组件及版本即可&#xff01; 所有软件包名称如下&#xff1a; 架构拓扑&#xff1a; 集群模式&#xff1a; 单机模式 架构规划&#xff1a…