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

前端小游戏实战:用JavaScript给爱心粒子添加点击互动效果

前端小游戏实战用JavaScript给爱心粒子添加点击互动效果当静态的爱心粒子在屏幕上跳动时你是否想过让它对你的每一次点击做出回应本文将带你从零开始用JavaScript为爱心粒子系统添加点击生成、拖拽交互等动态效果同时深入探讨动画性能优化技巧。1. 基础爱心粒子系统解析我们先快速搭建一个基础爱心粒子系统。这个系统由三个核心类构成class Particle { constructor(x, y) { this.x x; this.y y; this.size Math.random() * 5 1; this.speedX Math.random() * 3 - 1.5; this.speedY Math.random() * 3 - 1.5; } update() { this.x this.speedX; this.y this.speedY; if (this.size 0.2) this.size - 0.1; } draw(ctx) { ctx.fillStyle hsl(${Math.random() * 60 330}, 100%, 50%); ctx.beginPath(); ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2); ctx.fill(); } }关键参数说明参数说明典型值size粒子大小1-6像素speedX/Y运动速度-1.5到1.5hsl()颜色范围330-390度(粉红色系)提示使用HSL色彩模式可以轻松创建协调的粉色系渐变效果2. 实现点击生成粒子效果让粒子对用户点击做出响应是提升交互性的第一步。我们需要监听canvas的点击事件在点击位置生成粒子群为粒子添加随机运动轨迹const canvas document.getElementById(particleCanvas); const ctx canvas.getContext(2d); let particles []; canvas.addEventListener(click, (event) { const rect canvas.getBoundingClientRect(); const x event.clientX - rect.left; const y event.clientY - rect.top; // 在点击位置生成20个新粒子 for (let i 0; i 20; i) { particles.push(new Particle(x, y)); } }); function animate() { ctx.clearRect(0, 0, canvas.width, canvas.height); particles.forEach((particle, index) { particle.update(); particle.draw(ctx); // 移除过小的粒子 if (particle.size 0.3) { particles.splice(index, 1); } }); requestAnimationFrame(animate); } animate();性能优化要点使用对象池技术复用粒子对象及时清理不可见粒子限制同时存在的粒子数量3. 添加粒子拖拽交互拖拽效果能让用户触摸到粒子实现更直观的互动let isDragging false; let draggedParticles []; canvas.addEventListener(mousedown, (e) { const rect canvas.getBoundingClientRect(); const mouseX e.clientX - rect.left; const mouseY e.clientY - rect.top; // 找出鼠标附近的粒子 draggedParticles particles.filter(p { const distance Math.sqrt((p.x - mouseX) ** 2 (p.y - mouseY) ** 2); return distance 30; }); isDragging true; }); canvas.addEventListener(mousemove, (e) { if (!isDragging) return; const rect canvas.getBoundingClientRect(); const mouseX e.clientX - rect.left; const mouseY e.clientY - rect.top; // 移动被拖拽的粒子 draggedParticles.forEach(p { p.x mouseX (Math.random() * 20 - 10); p.y mouseY (Math.random() * 20 - 10); }); }); canvas.addEventListener(mouseup, () { isDragging false; });拖拽实现技巧使用距离检测确定可拖拽粒子为拖拽添加随机偏移避免完全重叠在mouseup时重置拖拽状态4. 动画性能优化实战当粒子数量增多时性能优化变得至关重要。以下是关键对比requestAnimationFrame vs setTimeout特性requestAnimationFramesetTimeout调用时机下次重绘前固定时间间隔帧率与屏幕刷新率同步可能丢帧后台标签自动暂停继续执行适用场景动画/连续渲染定时任务// 性能监控代码 let lastTime 0; const fpsElement document.getElementById(fps); function monitorFPS(timestamp) { const delta timestamp - lastTime; const fps 1000 / delta; fpsElement.textContent Math.round(fps); lastTime timestamp; requestAnimationFrame(monitorFPS); } requestAnimationFrame(monitorFPS);Chrome DevTools调试技巧使用Performance面板记录动画运行检查FPS图表中的帧率波动分析火焰图中耗时最长的函数使用Layers面板检查复合层情况5. 高级效果粒子物理系统为粒子添加简单物理效果可以显著提升视觉吸引力class PhysicsParticle extends Particle { constructor(x, y) { super(x, y); this.mass this.size; this.velocity { x: 0, y: 0 }; } applyForce(forceX, forceY) { this.velocity.x forceX / this.mass; this.velocity.y forceY / this.mass; } update() { // 应用重力 this.applyForce(0, 0.1); // 更新位置 this.x this.velocity.x; this.y this.velocity.y; // 边界反弹 if (this.y canvas.height - this.size) { this.y canvas.height - this.size; this.velocity.y * -0.8; } // 空气阻力 this.velocity.x * 0.99; this.velocity.y * 0.99; } }物理参数调整建议质量(mass)应与粒子大小正比反弹系数控制在0.7-0.9之间空气阻力系数0.95-0.99效果最佳在实现这些效果时我发现粒子系统的性能瓶颈通常出现在碰撞检测阶段。通过四叉树空间分区可以显著优化大规模粒子场景当粒子数量超过500时帧率能提升2-3倍。

相关文章:

前端小游戏实战:用JavaScript给爱心粒子添加点击互动效果

前端小游戏实战:用JavaScript给爱心粒子添加点击互动效果 当静态的爱心粒子在屏幕上跳动时,你是否想过让它对你的每一次点击做出回应?本文将带你从零开始,用JavaScript为爱心粒子系统添加点击生成、拖拽交互等动态效果&#xff0c…...

FanControl深度指南:智能散热系统的架构解析与实战优化

FanControl深度指南:智能散热系统的架构解析与实战优化 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/f…...

104人重写底层,OpenClaw装上「任务大脑」,连QQ机器人都能管

104位开发者联手,全球最火开源AI助手OpenClaw再出重磅更新,第一次给AI Agent装上「操作系统」级的任务控制面板:让AI能够自己管理自己,会排任务也会说不:Agent竞赛的下半场来了。一个月前,网络安全公司eSen…...

QMCFLAC2MP3:解锁音乐格式封印,让QQ音乐真正属于你

QMCFLAC2MP3:解锁音乐格式封印,让QQ音乐真正属于你 【免费下载链接】qmcflac2mp3 直接将qmcflac文件转换成mp3文件,突破QQ音乐的格式限制 项目地址: https://gitcode.com/gh_mirrors/qm/qmcflac2mp3 你是否曾经遇到过这样的尴尬场景&a…...

青蓝送水模式小程序开发指南

核心功能模块设计编辑: 三匠互联土土哥用户端功能在线订水:支持选择水桶规格(如18L、12L)、品牌(农夫山泉、怡宝等)及配送时间。订单跟踪:实时显示配送状态(接单、配送中、已完成)&a…...

不止System.Memory!OpenCVSharp依赖的这几个DLL报错,一个方法全搞定

深度解析OpenCVSharp依赖冲突:从System.Memory到通用解决方案 当你兴致勃勃地准备运行一个基于OpenCVSharp的计算机视觉项目时,突然弹出的"DLL加载失败"或"版本不匹配"错误信息就像一盆冷水浇灭了热情。System.Memory只是众多潜在问…...

医疗AI实战:如何用NLP技术从电子病历中提取科研特征(附Python代码)

医疗AI实战:从电子病历中挖掘科研金矿的NLP技术指南 在医疗健康领域,电子病历(EMR)是一座尚未充分开发的数据金矿。据统计,医疗机构产生的数据中超过70%是非结构化文本信息,包括医生记录、检查报告和病程描…...

米哈游面经规律总结:我看了大量面经,挂掉的人都卡在同一层

米哈游面经规律总结:我看了大量面经,挂掉的人都卡在同一层 offer直通车-校招大礼包获取:入口 几乎所有挂掉的人,都挂在同一个地方 最近整理米哈游的面经,看到一个反复出现的场面。 面试官问:"说说智…...

OrCAD Capture CIS DRC矩阵设置实战:如何自定义ERC检查规则

OrCAD Capture CIS DRC矩阵深度定制指南:从基础配置到高阶规则设计 1. 理解DRC矩阵的核心价值与应用场景 在复杂电路设计领域,标准化的设计规则检查(DRC)往往无法满足特殊元件的连接验证需求。OrCAD Capture CIS的ERC矩阵功能正是为解决这一痛点而生——…...

STM32F407 ADC实战:从CubeMX配置到高精度电压采集

1. STM32F407 ADC基础与核心概念 ADC(模数转换器)是嵌入式开发中最常用的外设之一,它就像电子系统的"味蕾",负责将现实世界的模拟信号(如温度、压力、光照)转换为单片机能够理解的数字信号。STM3…...

9 鸿蒙页面渲染效率优化实战 | 鸿蒙开发筑基实战

9 鸿蒙页面渲染效率优化实战 | 鸿蒙开发筑基实战 作者:杨建宾(华夏之光永存) 摘要 本文聚焦鸿蒙应用页面渲染卡顿、掉帧、长列表加载缓慢等核心痛点,梳理页面渲染全流程的通用优化方案,从布局规范、组件复用、渲染管控…...

用MATLAB搞定模电实验:单管共射放大电路静态工作点与放大倍数的保姆级仿真

MATLAB仿真单管共射放大电路:从理论到实践的完整指南 引言 在电子工程领域,单管共射放大电路是模拟电路设计的基石之一。传统实验教学中,学生往往需要花费大量时间搭建实体电路、调整参数并测量数据,这不仅效率低下,…...

2024年Image Caption数据集全攻略:从COCO到TextCaps的实战选择指南

2024年Image Caption数据集实战指南:从基础到行业落地的深度解析 当算法工程师第一次接触图像描述任务时,面对琳琅满目的数据集选择往往会陷入困惑——COCO的通用性、TextCaps的文本理解要求、VizWiz的特殊场景适用性,每个数据集都有其独特的…...

Facebook Instant Game变现全攻略:如何通过广告和内购让你的HTML5游戏赚钱

Facebook Instant Game变现全攻略:如何通过广告和内购让你的HTML5游戏赚钱 在HTML5游戏开发领域,Facebook Instant Game已经成为不可忽视的平台。这个无需下载、即点即玩的游戏生态系统,为开发者提供了独特的变现机会。不同于传统应用商店30%…...

告别截图贴图!用MATLAB的text函数+LaTeX,在图像任意位置添加公式注释(含α, β, ∑等符号)

科研图像标注革命:MATLABLaTeX实现动态公式嵌入全攻略 在学术论文与科研报告中,数据可视化图表的质量直接影响研究成果的呈现效果。传统方式中,研究者往往需要先导出图像,再通过第三方软件(如Photoshop或PPT&#xff0…...

大数据标注工具对比:2023年最值得推荐的5款工具

大数据标注工具对比:2023年最值得推荐的5款工具关键词:大数据标注工具、2023年推荐、工具对比、标注效率、标注质量摘要:本文聚焦于2023年大数据标注领域,详细对比了五款极具代表性的大数据标注工具。通过对它们的核心概念、算法原…...

Ostrakon-VL-8B环境配置:Ubuntu 22.04 + CUDA 12.1 + PyTorch 2.3 验证清单

Ostrakon-VL-8B环境配置:Ubuntu 22.04 CUDA 12.1 PyTorch 2.3 验证清单 想快速在Ubuntu系统上跑通Ostrakon-VL-8B这个强大的视觉理解模型,但被各种环境依赖搞得头大?别担心,这份清单就是为你准备的。 Ostrakon-VL-8B是一个专门…...

ADC0809模数转换实战:如何用51单片机+LCD1602搭建简易电压表(附完整代码)

51单片机与ADC0809模数转换实战:打造高精度LCD电压表 1. 项目背景与核心器件解析 在电子测量领域,电压表是最基础也最常用的工具之一。传统指针式电压表虽然直观,但精度和功能扩展性有限。而基于51单片机与ADC0809的数字电压表,不…...

Python异步爬虫实战:如何避免aiohttp的ServerDisconnectedError(附完整代码)

Python异步爬虫实战:深度解决aiohttp的ServerDisconnectedError问题 最近在帮朋友优化一个电商价格监控项目时,遇到了令人头疼的ServerDisconnectedError。每当爬取量超过5000条商品数据时,程序就会随机崩溃,控制台满是红色错误日…...

2026届毕业生推荐的十大降重复率助手实际效果

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能技术于学术写作领域的运用愈发广泛,其助力论文撰写的本领已获实证&#…...

微信支付ApiV3回调实战:Java版签名校验与参数解密全流程解析

1. 微信支付ApiV3回调的核心流程 微信支付ApiV3的回调机制是整个支付流程中非常关键的一环。当用户完成支付后,微信服务器会主动向商户服务器发送支付结果通知。这个通知包含了支付状态、金额等重要信息,但为了确保数据安全,微信会对这些信息…...

深度解析jqktrader:基于Python的同花顺自动化交易架构设计与实战应用

深度解析jqktrader:基于Python的同花顺自动化交易架构设计与实战应用 【免费下载链接】jqktrader 同花顺自动程序化交易 项目地址: https://gitcode.com/gh_mirrors/jq/jqktrader 在量化交易技术快速发展的今天,传统手动交易已无法满足高频、精准…...

1-1 从零实现邻接矩阵:构建无向图的核心步骤与实战解析

1. 邻接矩阵与无向图:从概念到代码的桥梁 第一次接触图论时,我完全被那些抽象的概念搞晕了。直到有一天,导师在黑板上画了个简单的社交网络图:"你看,每个人是一个点,好友关系是连线,这不就…...

Flowable6.4实战:如何优雅处理并行网关驳回与多实例加减签(附完整代码)

Flowable 6.4实战:并行网关驳回与多实例加减签的工程化解决方案 在企业级流程审批系统中,并行任务处理和多实例任务动态调整是高频需求场景。当某部门采购申请需要同时经过财务审核、法务审核和业务负责人审核时,传统串行审批模式会导致效率…...

PPTist:重新定义在线演示文稿创作体验

PPTist:重新定义在线演示文稿创作体验 【免费下载链接】PPTist PowerPoint-ist(/pauəpɔintist/), An online presentation application that replicates most of the commonly used features of MS PowerPoint, allowing for the editing a…...

Kindle电子书制作终极指南:Typora+Calibre从入门到精通(附常见问题解决方案)

Kindle电子书制作终极指南:TyporaCalibre从入门到精通(附常见问题解决方案) 1. 为什么需要自制Kindle电子书? 作为一个深度阅读爱好者,我发现自己收藏的很多优质内容无法直接推送到Kindle上阅读。比如个人整理的读书笔…...

3步解锁加密音乐:ncmdumpGUI技术解析与实战指南

3步解锁加密音乐:ncmdumpGUI技术解析与实战指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI ncmdumpGUI是一款专为网易云音乐用户设计的NCM文件…...

从4.3(a)到2.1再到4.3(a):一次App Store审核“过山车”的实战复盘与破局

1. 当4.3(a)突然降临:一场没有预警的"Spam"风暴 那天早上我像往常一样打开邮箱,看到苹果审核团队的回复时,整个人瞬间清醒——醒目的"Guideline 4.3(a) - Design - Spam"像一盆冷水浇下来。这已经是我们的RPG游戏第三次提…...

RTX 3090上跑Isaac Lab强化学习:从克隆仓库到训练蚂蚁机器人保姆级避坑指南

RTX 3090上的Isaac Lab强化学习实战:从零训练蚂蚁机器人的完整指南 在机器人强化学习领域,NVIDIA Isaac Lab正迅速成为研究者和开发者的首选工具链。当RTX 3090的24GB显存遇上Ubuntu 22.04的稳定环境,这套组合能为复杂RL任务提供令人惊喜的训…...

避坑指南:WFDB读取ECG数据时,.hea文件真的‘几乎没用’吗?

避坑指南:WFDB读取ECG数据时,.hea文件真的‘几乎没用’吗? 在生物信号处理领域,WFDB(Waveform Database)格式是存储心电图(ECG)数据的黄金标准。许多开发者习惯性地认为.hea头文件只…...