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

9.pixi.js编写的塔防游戏(类似保卫萝卜)-群炮弹发射逻辑

游戏说明

一个用pixi.js编写的h5塔防游戏,可以用electron打包为exe,支持移动端,也可以用webview控件打包为app在移动端使用

环境说明

  cnpm@6.2.0  npm@6.14.13  node@12.22.7  npminstall@3.28.0  yarn@1.22.10  npm config list  electron_mirror = "https://npm.taobao.org/mirrors/electron/"  home = "https://www.npmjs.org"  registry = "https://registry.npmmirror.com/"  

曲线移动

 通过控制炮弹移动的曲线方向 速度 中点位置来控制炮弹的移动位置。

起点和终点:

起点为导弹发射单位的位置

终点为要攻击目标的位置

中点可以通过随机数计算出来:

 中点为灰色我们需要计算中点

起点和终点可以构成一条直线

我们要获取两点的中点可以i通过公式:

  /*** 获取两点的中点* @param p1 点一* @param p2 点二* @returns 返回中点*/midPoint(p1:POINT, p2:POINT) {const returnPoint = [0, 0]returnPoint[0] = (p1.x + p2.x) / 2returnPoint[1] = (p1.y + p2.y) / 2return returnPoint},

获取两点的中点 但是中点还在直线上我们还需要极坐标来位移中点

  /*** 极坐标位移* @param p1 位移的起始点* @param dir 位移的方向 弧度制* @param dis 位移的距离*/coorTranslate(p1:POINT, dir:number, dis:number) {const returnPoint = [0, 0]const sin = Math.sin(dir)const cos = Math.cos(dir)const y = dis * sinconst x = dis * cosreturnPoint[0] = x + p1.xreturnPoint[1] = y + p1.yreturn returnPoint},

 方向我们可以是角度和距离可以是随机的这样我们的曲线就像是做的目标的移动了只需要在固定的时间创建多个炮弹并设置炮弹的速度就可以达到目标。

详细代码:

            // 发射子弹数量let bulletNumber = 6// 开始点根据绑定单位的坐标获取const startPoint = { x: p.x, y: p.y }const f = function() {Main.setTimeoutGame(function() {bulletNumber--const count = userUtilsPro.randIntBetween(1, 3)for (let i = 0; i < count; i++) {if (bulletNumber >= 0) {const end = { x: p2.x, y: p2.y }// 创建子弹对象const b = Bullet.create(bulletName, startPoint, end, BULLET_MOVE_TYPE.BEZIER) as Bullet// 计算两点间的距离const dis = userUtilsPro.pointsDis(startPoint, end)// 随机方向const fx = userUtilsPro.randIntBetween(0, 1) === 0 ? 1 : -1// 中点计算随机位置// 中点随机角度const c = userUtilsPro.bezierMidPoint(startPoint, end, Math.PI * userUtilsPro.randBetween(0, 2), fx * Math.round(dis) * userUtilsPro.randBetween(0.5, 1.5))b._userCenter = trueb.center = {x: c[0],y: c[1]}// 随机速度b.setSpeed(2.6 + 4 * userUtilsPro.randBetween(0.1, 1))// 子弹的创建单位b.use = p.id// 添加子弹到场景Main.getMain().getNowScene().addGameObject(b)}}

 先设置发射炮弹数量 然后通过延时计时器来执行有下面的操作:

起点,终点固定。一次发射执行数量随机,方向随机,中点极坐标位置随机,速度随机 就可以达到下面的效果。

这是我们做的目标:

 项目开源地址:

GitHub - yinhui1129754/towerDefense: 一个使用pixi.js编写的类似保卫萝卜的塔防游戏。

相关文章:

9.pixi.js编写的塔防游戏(类似保卫萝卜)-群炮弹发射逻辑

游戏说明 一个用pixi.js编写的h5塔防游戏&#xff0c;可以用electron打包为exe&#xff0c;支持移动端&#xff0c;也可以用webview控件打包为app在移动端使用 环境说明 cnpm6.2.0 npm6.14.13 node12.22.7 npminstall3.28.0 yarn1.22.10 npm config list electron_mirr…...

分布式链路追踪

文章目录 1、背景2、微服务架构下的问题3、链路追踪4、核心概念5、技术选型对比6、zipkin 1、背景 随着互联网业务快速扩展&#xff0c;软件架构也日益变得复杂&#xff0c;为了适应海量用户高并发请求&#xff0c;系统中越来越多的组件开始走向分布式化&#xff0c;如单体架构…...

计算机网络————网络层

文章目录 网络层设计思路IP地址IP地址分类IP地址与硬件地址 协议ARP和RARPIP划分子网和构造超网划分子网构造超网&#xff08;无分类编址CIDR&#xff09; ICMP 虚拟专用网VPN和网络地址转换NATVPNNAT 网络层设计思路 网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数…...

el-table刷新后保持高亮并改变状态字段

一、需求&#xff1a; 1、点击左侧右边显示具体内容 2、点击右边确认 左侧依旧高亮并且改变启动状态颜色 3、点击刷新、重置、高级搜索等不高亮 右边也不显示具体内容 二、效果图&#xff1a; 三、具体实施 1、定义highlight-current-row 是否高亮行 <el-table ref&quo…...

ARM Ubuntu内核更新记录

1&#xff0c;系统版本说明&#xff1a;ARM 鲲鹏920 cat /etc/lsb-release DISTRIB_IDUbuntu DISTRIB_RELEASE18.04 DISTRIB_CODENAMEbionic DISTRIB_DESCRIPTION"Ubuntu 18.04.5 LTS" 2&#xff0c; 将source.list中的deb-src打开 # 默认注释了源码镜像以提高 apt…...

【sgUploadTray】上传托盘自定义组件,可实时查看上传列表进度

【sgUploadTray】上传托盘自定义组件&#xff0c;可实时查看上传列表进度 特性&#xff1a; 可以全屏可以还原尺寸可以最小化可以回到右下角默认位置支持删除队列数据 sgUploadTray源码 <template><div :class"$options.name" :show"show" :size…...

改进二进制粒子群算法在配电网重构中的应用(Matlab实现)【论文复现】

目录 ​ 0 概述 1 配电网重构的目标函数 2 算例 3 matlab代码实现 0 概述 配电系统中存在大量的分段开关和联络开关&#xff0c;配电网重构正是通过调整分段开关和联络升大的组合状态来变换网络结构,用于优化配电网某些指标&#xff0c;使其达到最优状态。正常运行时,则通…...

【文章系列解读】Nerf

1. Nerf NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis 2020年8月3日 &#xff08;0&#xff09;总结 NeRF工作的过程可以分成两部分&#xff1a;三维重建和渲染。&#xff08;1&#xff09;三维重建部分本质上是一个2D到3D的建模过程&#xff…...

基于springboot,vue网上订餐系统

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 前端技术 &#xff1a;VueElementUI 服务端技术&#xff1a;springbootmybatisredis 本系统分用户前台和管理后台两部分&#xff0c;项…...

Nautilus Chain 更换全新测试网,主网即将在不久上线

目前&#xff0c;Nautilus Chain 正在为主网上线前的最后阶段做准备&#xff0c;据悉该链更新了全新的测试网&#xff0c;在此前版本的测试网的基础上进行了全新的技术升级&#xff0c;最新测试网版本与生态发展的技术规划更为贴近。本次测试网升级将会是最后一次测试网版本的迭…...

攻防世界web:Web_php_wrong_nginx_config,python3后门

网上的wp中关于Web_php_wrong_nginx_config的后门代码都是python2的&#xff08;源码来自&#xff1a;Weevely&#xff1a;一个 PHP 混淆后门的代码分析 - Phukers Blog&#xff09; 以下是转换成python3的版本 # encoding: utf-8from random import randint, choice from ha…...

【VUE】解决图片视频加载缓慢/首屏加载白屏的问题

1 问题描述 在 Vue3 项目中&#xff0c;有时候会出现图片视频加载缓慢、首屏加载白屏的问题 2 原因分析 通常是由以下原因导致的&#xff1a; 图片或视频格式不当&#xff1a;如果图片或视频格式选择不当&#xff0c;比如选择了无损压缩格式&#xff0c;可能会导致文件大小过大…...

spring复习:(35)在getBean时,在哪里根据普通bean和工厂bean进行区分处理来返回的?

在AbstractBeanFactory的doGetBean方法&#xff1a; 调用的getObjectForBeanInstance方法部分代码如下&#xff1a; 如果不是工厂bean,则直接将实例返回&#xff0c;否则调用getObjectFromFactoryBean方法获取工厂bean的getObject方法返回的对象 protected Object getObjectF…...

Jenkins全栈体系(二)

Jenkins 第三章 Jenkins Git Maven 自动化部署配置 十、几种构建方式 快照依赖构建/Build whenever a SNAPSHOT dependency is built 当依赖的快照被构建时执行本job 触发远程构建 (例如,使用脚本) 远程调用本job的restapi时执行本job job依赖构建/Build after other proj…...

c++11 标准模板(STL)(std::basic_istream)(九)

定义于头文件 <istream> template< class CharT, class Traits std::char_traits<CharT> > class basic_istream : virtual public std::basic_ios<CharT, Traits> 类模板 basic_istream 提供字符流上的高层输入支持。受支持操作包含带格式的…...

OpenSource - Spring Startup Ananlyzer

文章目录 &#x1f680;Optimization of Spring Startup核心能力&#x1f4c8;Spring应用启动数据采集报告应用启动时长优化 &#x1f4c8;Spring应用启动数据采集报告安装jar包配置项应用启动自定义扩展 &#x1f680;应用启动时长优化支持异步化的Bean类型接入异步Bean优化 开…...

ES6迭代器、Set、Map集合和async异步函数

目录 迭代器 Iterator 的作用 Iterator 的遍历过程 Set Map集合 map和对象区别? async异步函数 迭代器 迭代器&#xff08;Iterator&#xff09;就是这样一种机制。它是一种接口&#xff0c;为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口&…...

mac android studio设置跟mac系统一样的快捷键

mac版的android studio 跟mac系统的快捷键不一样,主要修改了下面几组操作,为了跟mac系统快捷键相同 setting->Keymap 搜索bottom 修改3个快捷键: cmd↓ 设置让鼠标移动到屏幕最后面 shiftcmd↓ 选中从当前位置到屏幕最下面 option↓. 或者 end 滚动到屏幕最下方 // 因为默认…...

Java-通过IP获取真实地址

文章目录 前言功能实现测试 前言 最近写了一个日志系统&#xff0c;需要通过访问的 IP 地址来获取真实的地址&#xff0c;并且存到数据库中&#xff0c;我也是在网上看了一些文章&#xff0c;遂即整理了一下供大家参考。 功能实现 这个是获取正确 IP 地址的方法&#xff0c;可…...

Java代码实现word转PDF

import com.spire.doc.Document; import com.spire.doc.FileFormat; import lombok.extern.slf4j.Slf4j; public class WordConvertPdf { /** * word转pdf * param wordPathName word文件路径及名称 * param pdfPathName pdf生成路径及名称 */ public static void wordToPdf(…...

Colmap避坑指南:如何用SuperPoint+SuperGlue提升三维重建精度(附错误案例修复)

Colmap三维重建精度提升实战&#xff1a;从特征匹配优化到工业级解决方案 在计算机视觉领域&#xff0c;三维重建技术已经从实验室走向工业应用&#xff0c;而Colmap作为开源摄影测量工具链的核心&#xff0c;其重建精度直接决定了后续NeRF或Gaussian Splatting等神经渲染技术的…...

手机高频麦克风音频采样技术

随着移动终端音频应用的多元化发展&#xff0c;从超声通信、高频声纹识别到医疗级音频监测&#xff0c;对手机麦克风的高频采样能力提出了更高要求。手机高频麦克风音频采样技术&#xff0c;是实现高频音频信号捕捉、传输与后续处理的核心支撑&#xff0c;其性能直接决定了高频…...

从Python入门到调用伏羲API:零基础开发者气象AI初体验

从Python入门到调用伏羲API&#xff1a;零基础开发者气象AI初体验 你是不是也对那些能预测天气、分析气候的AI模型感到好奇&#xff0c;但一看到“API调用”、“HTTP请求”这些词就觉得头大&#xff0c;心想“这得会编程才行吧”&#xff1f;别担心&#xff0c;这篇教程就是为…...

思源宋体:七重字体音阶如何重塑中文数字美学

思源宋体&#xff1a;七重字体音阶如何重塑中文数字美学 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 当数字界面与中文排版相遇时&#xff0c;你是否有过这样的困惑&#xff1a;为什…...

微信小程序结合HTTP接口打造智能门锁远程控制系统

1. 为什么选择微信小程序控制智能门锁&#xff1f; 每次出门都要检查钥匙带没带的日子该结束了&#xff01;用微信小程序控制智能门锁&#xff0c;就像把门禁系统装进了每天必用的微信里。我去年给公司办公室装了这个系统&#xff0c;现在同事们刷脸进门、手机远程开门两不误&a…...

AIVideo GPU算力适配指南:低显存(8G)模式启用、缓存策略与批处理优化

AIVideo GPU算力适配指南&#xff1a;低显存&#xff08;8G&#xff09;模式启用、缓存策略与批处理优化 1. 引言&#xff1a;当AI视频创作遇上“显存焦虑” 如果你尝试过用AI生成视频&#xff0c;大概率遇到过这样的场景&#xff1a;兴致勃勃地输入一个创意主题&#xff0c;…...

5步打造高效音乐体验:Listen1扩展的智能选择与效率提升指南

5步打造高效音乐体验&#xff1a;Listen1扩展的智能选择与效率提升指南 【免费下载链接】listen1_chrome_extension one for all free music in china (chrome extension, also works for firefox) 项目地址: https://gitcode.com/gh_mirrors/li/listen1_chrome_extension …...

Spring AI + DeepSeek 实战:5分钟搞定一个能听懂人话的数据库查询工具

Spring AI DeepSeek 实战&#xff1a;5分钟搞定一个能听懂人话的数据库查询工具 在数据驱动的时代&#xff0c;数据库查询是每个开发者绕不开的日常任务。但当你面对产品经理频繁变更的需求&#xff0c;或是运营同事临时提出的数据提取请求时&#xff0c;反复编写和调试SQL语句…...

实测:用GPT-4和KernelBench自动生成CUDA内核,效果到底如何?

实测&#xff1a;GPT-4与KernelBench自动生成CUDA内核的实战效果分析 当我在深夜调试一个矩阵乘法的CUDA内核时&#xff0c;第17次尝试依然无法突破PyTorch原生实现的性能。这种场景对GPU开发者来说再熟悉不过——我们总在手工优化与开发效率之间寻找平衡。而当我第一次听说可以…...

避坑指南:解决Livox Mid-360双雷达点云融合时坐标系错乱与IMU数据混杂问题

Livox Mid-360双雷达点云融合实战&#xff1a;坐标系校准与IMU数据分离全解析 当你在RViz中看到两个Livox Mid-360雷达的点云像醉酒的水母一样随机飘动&#xff0c;而IMU数据又像被搅拌机混合过的果汁——恭喜你&#xff0c;遇到了多传感器融合的经典难题。这不是简单的参数调整…...