uni app 打肉肉(打飞机)小游戏

都给老婆和孩子写了 合十  钓鱼了,给自己写个打飞机吧。没找飞机怪兽的图片。就用馒头和肉肉代替了。有问题不要私信我。自己改哈

<template><view class="page_main"><view class="contentone"><canvas class="canvas_cla" style="z-index: 1;" canvas-id="myCanvas" id="myCanvas"></canvas></view><view class="contentone"><canvas class="canvas_cla" style="z-index: 2;" canvas-id="myCanvasb" id="myCanvasb"></canvas></view><view class="contenttwo"><canvas class="canvas_cla" style="z-index: 9;" canvas-id="myCanvasa" id="myCanvasa" @touchstart="touchstart"@touchend="touchend" @touchmove="touchmove"></canvas></view><view class="zhezhao" v-if="isshowstart"><view class="dialog_back"><cover-view class="add_button_ef" style=" color: #07a5a6;" @tap.stop.prevent="start_zhezhao">开始</cover-view><cover-view class="add_button_ef" style="color: #07a5a6;" @tap.stop.prevent="back_zhezhao">返回</cover-view></view></view></view>
</template><script>export default {data() {return {isshowstart: true,canvaswidth: 0,canvasheight: 0,ctx: null, // canvas 上下文  ctxtwo: null, // canvas 上下文  ctxthree: null, // canvas 上下文  background: {images: ['../static/fangzi1.png', '../static/fangzi1.png'], // 图片资源数组speed: 2, // 滚动速度  position: 0, // 图片当前位置 },zhujue: {x: 0,y: 0,image: '../static/addpeople.png',size: 50,speed: 2,ismoveing: false,value: 200,zdvalue: 20,fstime: 120,zdsize: 10,lives: 5,wdtime: 0,isdie: false,},zhujpz: false,zjzdlist: [],gslist: [],bosslist: [],guankadefen: 0,defen: 0,guanka: 1,isboos: false,ytimerX: null, // requestAnimationFrame 的 ID zjfszdtimer: '',jspztimer: '',};},onLoad() {},onReady() {this.init()},/*** 生命周期函数--监听页面卸载*/onUnload: function() {this.game_stop()},methods: {start_zhezhao: function() {this.isshowstart = falsethis.game_start(); // 开始滚动  },back_zhezhao: function() {uni.navigateBack({delta: 1})},init: function() {this.ctx = uni.createCanvasContext('myCanvas');this.ctxtwo = uni.createCanvasContext('myCanvasa');this.ctxthree = uni.createCanvasContext('myCanvasb');let canvas = uni.createSelectorQuery().select('#myCanvas');canvas.boundingClientRect(rect => {this.canvaswidth = rect.widththis.canvasheight = rect.heightthis.zhujue.x = (rect.width - this.zhujue.size) / 2this.zhujue.y = rect.height - this.zhujue.size - 50this.drawzj()}).exec();this.drawbackg();},drawzj: function() {if (this.zhujue.x < 0) {this.zhujue.x = 0}if (this.zhujue.x > this.canvaswidth - this.zhujue.size) {this.zhujue.x = this.canvaswidth - this.zhujue.size}if (this.zhujue.y < 0) {this.zhujue.y = 0}if (this.zhujue.y > this.canvasheight - this.zhujue.size) {this.zhujue.y = this.canvasheight - this.zhujue.size}if (this.zhujpz) {this.ctxtwo.drawImage('../static/mantou.png', this.zhujue.x, this.zhujue.y - 30, this.zhujue.size -20, this.zhujue.size - 20); // 绘制图片  this.zjdrawbaopo()}this.ctxtwo.drawImage(this.zhujue.image, this.zhujue.x, this.zhujue.y, this.zhujue.size, this.zhujue.size); // 绘制图片  this.ctxtwo.draw();},drawzjzd: function() {for (var i = 0; i < this.zjzdlist.length; i++) {if (this.zjzdlist[i].isuse) {this.zjzdlist.splice(i, 1)i--} else {this.ctxthree.drawImage(this.zjzdlist[i].image, this.zjzdlist[i].x, this.zjzdlist[i].y,this.zhujue.zdsize, this.zhujue.zdsize); // 绘制图片  }}if (this.isboos) {this.drawboos()} else {this.drawgs()}this.ctxthree.draw();},zjfszd: function() {this.zjfszdtimer = setInterval(() => {var zd = {x: this.zhujue.x + this.zhujue.size / 2 - this.zhujue.zdsize / 2,y: this.zhujue.y,image: '../static/mantou.png',speed: 3,isuse: false}this.zjzdlist.push(zd)}, this.zhujue.fstime);},scgs: function() {let gs = {x: this.getRandomInt(50, this.canvaswidth - 50),y: -45,size: 20 + this.guanka * 3,image: "../static/rou.png",value: 100 * this.guanka * 0.8,speed: 0.5 * this.guanka * 0.8,isfszd: this.getRandomInt(0, 1),isdj: this.getRandomInt(0, 2), // 怪兽携带道具 0 不带 1 子弹威力+0.1   2 发射速度-0.5zdspeed: 5 * this.guanka * 0.5,isover: false}this.gslist.push(gs)},drawgs: function() {for (var i = 0; i < this.gslist.length; i++) {if (this.gslist[i].isover) {this.drawbaopo(this.gslist[i])this.gslist.splice(i, 1)i--} else {this.gslist[i].y += this.gslist[i].speedthis.ctxthree.drawImage(this.gslist[i].image, this.gslist[i].x, this.gslist[i].y, this.gslist[i].size, this.gslist[i].size); // 绘制图片  	}}},drawboos: function() {var that = this// 计算物体A需要移动的距离和方向const dx = that.bosslist[0].x + that.bosslist[0].size / 2 - that.bosslist[0].mbx; // 水平移动距离  const dy = that.bosslist[0].y + that.bosslist[0].size / 2 - that.bosslist[0].mby // 垂直移动距离为0,因为我们只想在水平方向上移动  if (dx > 10) {that.bosslist[0].x = that.bosslist[0].x - that.bosslist[0].speed} else if (dx < -10) {that.bosslist[0].x = that.bosslist[0].x + that.bosslist[0].speed}if (dy > 10) {that.bosslist[0].y = that.bosslist[0].y - that.bosslist[0].speed} else if (dy < -10) {that.bosslist[0].y = that.bosslist[0].y + that.bosslist[0].speed}that.ctxthree.drawImage(that.bosslist[0].image, that.bosslist[0].x, that.bosslist[0].y,that.bosslist[0].size, that.bosslist[0].size); // 绘制图片if (dy <= 10 && dy >= -10 && dx <= 10 && dx >= -10) {if (!that.bosslist[0].isover) {that.bosslist[0].mbx = that.getRandomInt(50, that.canvaswidth - 50)that.bosslist[0].mby = that.getRandomInt(50, that.canvasheight - 50)that.bosslist[0].speed = that.getRandomInt(1, 5)}}},drawbaopo: function(bean) {var that = thislet counter = 0; // 计数器,记录执行次数  const intervalId = setInterval(function() {// 这里是你的操作代码  that.ctxthree.drawImage("../static/mantou.png", bean.x, bean.y, bean.size, bean.size); // 绘制图片  counter++; // 每次执行,计数器加1  // 检查是否达到了执行三次的条件  if (counter >= 10) {clearInterval(intervalId); // 清除定时器  }}, 100); // 每秒执行一次(1000毫秒)},zjdrawbaopo: function() {var that = thislet counter = 0; // 计数器,记录执行次数  const intervalId = setInterval(function() {// 这里是你的操作代码  counter++; // 每次执行,计数器加1  // 检查是否达到了执行三次的条件  if (counter >= 10) {that.zhujpz = falseclearInterval(intervalId); // 清除定时器  }}, 100); // 每秒执行一次(1000毫秒)},/*** 触摸屏幕开始 记录开始坐标*/touchstart: function(e) {let startx = e.touches[0].xlet starty = e.touches[0].yif (startx > this.zhujue.x && startx < this.zhujue.x + this.zhujue.size && starty > this.zhujue.y &&starty < this.zhujue.y + this.zhujue.size) {this.zhujue.x = startx - this.zhujue.size / 2this.zhujue.y = starty - this.zhujue.size / 2this.zhujue.ismoveing = truethis.drawzj()}},/*** 触摸屏幕结束 计算*/touchend: function(e) {let x = e.changedTouches[0].xlet y = e.changedTouches[0].ythis.zhujue.ismoveing = false},/*** 触摸屏幕移动  画框*/touchmove: function(e) {let x = e.touches[0].xlet y = e.touches[0].yif (this.zhujue.ismoveing) {this.zhujue.x = x - this.zhujue.size / 2this.zhujue.y = y - this.zhujue.size / 2this.drawzj()}},drawbackg: function() {this.background.position += this.background.speed; // 更新图片位置if (this.background.position > this.canvasheight) { // 如果图片完全移出视口  this.background.position = 0; // 将图片重新放置在视口的另一端  }this.ctx.clearRect(0, 0, this.canvaswidth, this.canvaswidth); // 清除画布  this.ctx.drawImage(this.background.images[0], 0, this.background.position, this.canvaswidth, this.canvasheight); // 绘制图片  this.ctx.drawImage(this.background.images[1], 0, this.background.position - this.canvasheight, this.canvaswidth, this.canvasheight); // 绘制图片 this.ctx.setFontSize(14); // 设置字体大小  this.ctx.setFillStyle('white'); // 设置填充颜色为白色  this.ctx.setTextAlign('center'); // 设置文本水平对齐方式为居中  this.ctx.setTextBaseline('middle'); // 设置文本垂直对齐方式为中间  this.ctx.fillText('剩余' + this.zhujue.lives, 40, 30); // 在圆心位置绘制文本“按钮” this.ctx.setFontSize(14); // 设置字体大小  this.ctx.setFillStyle('white'); // 设置填充颜色为白色  this.ctx.setTextAlign('center'); // 设置文本水平对齐方式为居中  this.ctx.setTextBaseline('middle'); // 设置文本垂直对齐方式为中间  this.ctx.fillText('总得分' + this.defen, 120, 30); // 在圆心位置绘制文本“按钮” this.ctx.setFontSize(14); // 设置字体大小this.ctx.setFillStyle('white'); // 设置填充颜色为白色  this.ctx.setTextAlign('center'); // 设置文本水平对齐方式为居中  this.ctx.setTextBaseline('middle'); // 设置文本垂直对齐方式为中间  this.ctx.fillText('关卡' + this.guanka, 200, 30); // 在圆心位置绘制文本“按钮” this.ctx.setFontSize(14); // 设置字体大小this.ctx.setFillStyle('white'); // 设置填充颜色为白色  this.ctx.setTextAlign('center'); // 设置文本水平对齐方式为居中  this.ctx.setTextBaseline('middle'); // 设置文本垂直对齐方式为中间  this.ctx.fillText('关卡得分' + this.guankadefen, 280, 30); // 在圆心位置绘制文本“按钮” this.ctx.draw();},game_start: function() {this.zjfszd()this.jisuanpz()this.ytimerX = setInterval(() => {for (var i = 0; i < this.zjzdlist.length; i++) {this.zjzdlist[i].y -= this.zjzdlist[i].speedif (this.zjzdlist[i].y < 0) {this.zjzdlist.splice(i, 1)}}if (this.isboos) {if (this.bosslist.length == 0) {this.bosslist = [{x: this.canvaswidth / 2,y: 0,size: 30 + this.guanka * 8,image: "../static/rou.png",value: 1000 * this.guanka * 0.8,speed: this.getRandomInt(1, 5),isfszd: this.getRandomInt(0, 1),zdspeed: 5,isover: false,mbx: this.getRandomInt(50, this.canvaswidth - 50),mby: this.getRandomInt(50, this.canvasheight - 50),}]}} else {if (this.gslist.length == 0) {this.scgs()}for (var i = 0; i < this.gslist.length; i++) {this.gslist[i].y += this.gslist[i].speedif (this.gslist.length < 12 && this.gslist[this.gslist.length - 1].y > 80) {this.scgs()}if (this.gslist[i].y > this.canvasheight) {this.gslist[i].y = -45}}}this.drawbackg();this.drawzjzd()}, 16); // 每100毫秒更新一次位置 },jisuanpz: function() {this.jspztimer = setInterval(() => {if (this.zhujue.wdtime > 0) {this.zhujue.wdtime -= 1}this.isCollidingbyzjzdAndGS()this.isCollidingbyzjAndGS()}, 16); // 每100毫秒更新一次位置 },game_stop: function() {clearInterval(this.ytimerX); // 停止动画  clearInterval(this.zjfszdtimer);clearInterval(this.jspztimer);this.isshowstart = true},/*** 生成min 到 max 的随机数*/getRandomInt: function(min, max) {min = Math.ceil(min);max = Math.floor(max);return Math.floor(Math.random() * (max - min + 1)) + min;},isCollidingbyzjzdAndGS: function() {var arrif (this.isboos) {arr = this.bosslist} else {arr = this.gslist}for (var j = 0; j < arr.length; j++) {let gsbean = arr[j]if (!gsbean.isover && gsbean.y > 0) {for (var i = 0; i < this.zjzdlist.length; i++) {let zjzdbean = this.zjzdlist[i]if (!zjzdbean.isuse) {let zdx = zjzdbean.x + this.zhujue.zdsize / 2let zdy = zjzdbean.y + this.zhujue.zdsize / 2if (zdx > gsbean.x && zdx < gsbean.x + gsbean.size && zdy > gsbean.y && zdy < gsbean.y + gsbean.size) {this.zjzdlist[i].isuse = trueif (this.isboos) {this.defen += 10this.guankadefen += 10gsbean.value = gsbean.value - this.zhujue.zdvalueif (gsbean.value <= 0) {//消灭怪兽console.log(JSON.stringify(gsbean))if (gsbean.isdj == 1) {this.zhujue.zdvalue += 0.1}if (gsbean.isdj == 2) {this.zhujue.fstime -= 0.5}this.bosslist[j].isover = truethis.defen += 100this.bosslist = []this.isboos = falsethis.guanka += 1this.guankadefen = 0this.zhujue.zdvalue += 5this.zhujue.fstime -= 1if (this.guanka % 2 == 0) {this.zhujue.lives += 1}}} else {//产生碰撞this.defen += 5this.guankadefen += 5gsbean.value = gsbean.value - this.zhujue.zdvalueif (gsbean.value <= 0) {//消灭怪兽console.log(JSON.stringify(gsbean))if (gsbean.isdj == 1) {this.zhujue.zdvalue += 0.1}if (gsbean.isdj == 2) {this.zhujue.fstime -= 0.5}this.gslist[j].isover = truethis.defen += 5this.guankadefen += 5}}if (this.guankadefen >= 1000 * this.guanka * 1) {this.isboos = truethis.gslist = []}}}}}}},isCollidingbyzjAndGS: function() {let zjx = this.zhujue.x + this.zhujue.size / 2let zjy = this.zhujue.y + this.zhujue.size / 2var arrif (this.isboos) {arr = this.bosslist} else {arr = this.gslist}for (var j = 0; j < arr.length; j++) {let gsbean = arr[j]if (!gsbean.isover) {let gsx = gsbean.xlet gsy = gsbean.ylet gssize = gsbean.sizeif (zjx < gsx + gssize && zjx > gsx && zjy < gsy + gssize && zjy > gsy) {console.log("11111")console.log("主角发生碰撞", this.zhujue.wdtime)if (this.zhujue.wdtime <= 0) {if (this.isboos) {this.zhujue.value -= gsbean.value} else {this.gslist[j].isover = truethis.zhujue.value -= gsbean.valuethis.zhujpz = true}}if (this.zhujue.value <= 0) {console.log("主角死了。结束")this.zhujue.lives -= 1this.zhujue.wdtime = 300if (this.zhujue.lives < 0) {this.game_stop()} else {this.zhujue.value = 200}}}}}},}};
</script><style scoped>.contentone {width: 100vw;height: 100vh;position: absolute;display: flex;justify-content: center;}.contenttwo {width: 100vw;height: 100vh;position: absolute;display: flex;justify-content: center;}.canvas_cla {width: 100vw;height: 100vh;}.top_linear {display: flex;flex-direction: row;justify-content: space-between;display: flex;flex-direction: row;height: 80rpx;}.top_mean_left {margin-left: 32rpx;}.top_mean_right {margin-right: 32rpx;}.top_mean_tv {color: #07a5a6;}.page_main {position: fixed;overflow: hidden;width: 100vw;height: 100vh;background-color: #efefef;}.zhezhao {position: fixed;top: 0;bottom: 0;width: 100vw;height: 100vh;display: flex;justify-content: center;align-items: center;background-color: rgba(0, 0, 0, 0.4);z-index: 9999;}.dialog_back {position: fixed;z-index: 12;top: 0;right: 0;left: 0;bottom: 0;background: rgba(0, 0, 0, 0.3);justify-content: center;align-items: center;display: flex;}.add_button_ef {margin-left: 32rpx;margin-right: 32rpx;padding-top: 30rpx;padding-bottom: 30rpx;width: 300rpx;border: solid 2rpx #efefef;color: #999;background: #efefef;font-size: 32rpx;border-radius: 10rpx;display: flex;align-items: center;justify-content: center;text-align: center;vertical-align: center;}
</style>

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

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

相关文章

C语言每日一题(64)快乐数

题目链接 力扣网202 快乐数 题目描述 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不…

Flink源码解析(1)job启动,从JM到TM过程详解

网络传输模型 首先在看之前,回顾一下akka模型: Flink通讯模型—Akka与Actor模型-CSDN博客 注:ActorRef就是actor的引用,封装好了actor 下面是jm和tm在通讯上的概念图: RpcGateway 不理解网关的作用,可以先移步看这里:网关_百度百科 (baidu.com) 用于定义RPC协议,是…

torchvision pytorch预训练模型目标检测使用

参考&#xff1a; https://pytorch.org/vision/0.13/models.html https://blog.csdn.net/weixin_42357472/article/details/131747022 有分类、检测、分割相关预训练模型 1、目标检测 https://pytorch.org/vision/0.13/models.html#object-detection-instance-segmentation-…

四.流程控制(顺序,分支,循环,嵌套)

c刚刚转过来的记得写在public static void main&#xff08;String[] args&#xff09;的花括号里 一.顺序结构 二.分支结构 if &#xff0c;switch 1.if (条件判断&#xff09; 2.if else 3.if else if else if ... else(它是一个一个否定来一个个执行判断的 4.s…

day-24 腐烂的橘子

思路&#xff1a;利用bfs的思想 首先利用bfs遍历值为2的橘子&#xff08;遍历时1和2都可以走&#xff09;结束后如果存在某个橘子未被访问过且值为1则返回-1 再利用bfs遍历值为2的橘子 每遍历一次 时间加1 注意不要立即将map的值变为2&#xff0c;可以通过一个缓存数组临时存放…

CentOS7使用Docker部署.net Webapi

1 准备WebApi项目 对于已存在的WebApi项目&#xff0c;需要添加Docker支持&#xff1b; 编码时&#xff0c;先设置好项目需要的端口号&#xff1a;program.cs中&#xff0c;app.Run("http://*:8000");设置端口为&#xff1a;8000在VS中&#xff0c;选中项目&#xf…

作业:基于udp的tftp文件传输实例

#include <head.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <errno.h>#define PORT 69 //服务器绑定的端口号 #define IP "192.168.1.107" //服务器的IP地址int do_download(i…

使用JAXB生成XML的Java对象

文章目录 标题使用JAXB生成XML的Java对象根据xml生成xsd文件&#xff1a;下载trang.jar&#xff1a;使用trang.jar生成xml的xsd文件&#xff1a; 使用JAXB的xjc生成java对象&#xff1a; 标题使用JAXB生成XML的Java对象 根据xml生成xsd文件&#xff1a; 下载trang.jar&#x…

如何在极狐GitLab Runner Job 添加域名host?

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 在极狐GitLab Runner Job 添加域名…

MySQL进阶45讲【34】为什么临时表可以重名?

1 前言 在上一篇文章中&#xff0c;我们在优化join查询的时候使用到了临时表。当时&#xff0c;我们是这么用的&#xff1a; create temporary table temp_t like t1; alter table temp_t add index(b); insert into temp_t select * from t2 where b>1 and b<2000; se…

为什么我学了几天 STM32 感觉一脸茫然?

为什么我学了几天 STM32 感觉一脸茫然&#xff1f; 如果你只有C语言基础就马上学习STM32&#xff0c;你一定会有这些疑惑&#xff1a; 为什么有这么多没见过的API函数&#xff1f;没见过的变量&#xff08;寄存器&#xff09;名称&#xff1f; 为什么工程除了main.c&#xff…

机器人现有力控技术检索

文章目录 力控技术1 基本柔顺力控1.1 直接力控1.2 间接力控1.2.1 被动和主动柔顺控制1.2.2 混合力位控制1.2.3 阻抗&导纳力控1.2.3.1 原理1.2.3.2 区别和联系1.2.3.3 工程应用 1.2.4 阻抗力控1.2.5 导纳力控 2 先进力控2.1 自适应力控2.2 鲁棒力控2.3 学习力控 3 智能力控3…

深度学习神经网络训练环境配置以及演示

&#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础教程 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质就是极致重复! 目录 1 NVIDIA Dr…

2024-3-18-C++day6作业

1>思维导图 2>试编程 要求: 封装一个动物的基类&#xff0c;类中有私有成员&#xff1a;姓名&#xff0c;颜色&#xff0c;指针成员年纪 再封装一个狗这样类&#xff0c;共有继承于动物类&#xff0c;自己拓展的私有成员有&#xff1a;指针成员&#xff1a;腿的个数&a…

为什么技术人员副业赚钱那么难?

公众号&#xff1a;小北技术圈。 34岁老程序员&#xff0c;长期探索副业项目&#xff0c;写过IDEA插件&#xff0c;搞过工具导航&#xff0c;做过出海网站&#xff0c;运营过自媒体。欢迎提前探索35岁程序员的第二赛道。 每周分享干货内容。寻找100个技术人员&#xff0c;聚在…

vue-router(v4.0) 基础2

路由跳转 核心代码 import { useRouter,useRoute } from vue-router; const $router useRouter() const $route useRoute() const toAbout () > {console.log($router)$router.push(/about/888) } 全部代码 常量路由 export const constantRoute [{path: /about/:id,co…

Java开发从入门到精通(八):Java的面向对象编程OOP:封装、继承、多态

Java大数据开发和安全开发 &#xff08;一&#xff09;Java的封装1.1 什么是封装1.1.1 封装的设计规范1.1.2 代码层面如何控对象的成员公开或隐藏? 1.2 JavaBean(实体类)1.2.1创建实体类1.2.2 实体类有啥应用场景?1.2.3 实体类总结 1.3 继承1.3.1 继承的语法格式1.3.2 继承的…

Stompy:一款针对时间戳的Timestomp工具

关于Stompy Stompy是一款功能强大的时间戳管理工具&#xff0c;在该工具的帮助下&#xff0c;广大研究人员能够轻松对指定文件或目录的时间戳进行修改和操作。该工具基于PowerShell开发&#xff0c;并且支持对目标目录中的所有文件执行递归时间戳操作。 功能介绍 1、修改独立…

【问题记录】自定义Prometheus exporter收集数据,Prometheus显示收集到数据,grafana未显示数据出来

问题背景&#xff1a; 使用golang编写Prometheus exporter&#xff0c;获取指定API Url返回值中的data值&#xff0c;把它做为自定义指标。 1、exporter 500ms自动更新一次data值 2、Prometheus的Graph界面输入自定义指标可以查询到值的变化 3、自定义指标最小时间是ms级别&…

IDEA中的Project工程、Module模块的概念及创建导入

1、IDEA中的层级关系&#xff1a; project(工程) - module(模块) - package(包) - class(类)/接口具体的&#xff1a; 一个project中可以创建多个module一个module中可以创建多个package一个package中可以创建多个class/接口2、Project和Module的概念&#xff1a; 在 IntelliJ …