《uni-app》一个非canvas的飞机对战小游戏实现-我方飞机实现

2023-05-16

在这里插入图片描述

这是一个没有套路的前端博主,热衷各种前端向的骚操作,经常想到哪就写到哪,如果有感兴趣的技术和前端效果可以留言~博主看到后会去代替大家踩坑的~接下来的几篇都是uni-app的小实战,有助于我们更好的去学习uni-app~ 这是一个系列文章,有兴趣的小伙伴点个赞,点个收藏,关注一下吧~
主页: oliver尹的主页
格言: 跌倒了爬起来就好~
准备篇:https://oliver.blog.csdn.net/article/details/127185461
启动页实现:https://oliver.blog.csdn.net/article/details/127217681
敌机模型实现:https://oliver.blog.csdn.net/article/details/127332264
requestAnimationFrame详解:https://oliver.blog.csdn.net/article/details/127377916

《uni-app》一个非canvas的飞机对战小游戏实现-我方飞机实现

  • 一. 前言
  • 二. 阅读对象与难度
  • 三. 项目地址以及最终效果
  • 四. 我方飞机模型的实现
    • 4.1 分析分析
    • 4.2 我方飞机的样式
    • 4.3 我方飞机生成的实现
    • 4.4 我方飞机坐标的实现
    • 4.5 我方飞机的操控与位移
      • 4.5.1 初始化操作事件
      • 4.5.2 位移函数
  • 五. 阶段性展示
  • 六. 小结

一. 前言

上一篇中主要分享的是 位移这个功能的实现,简单的说就是通过 requestAnimationFrame 这个window对象上提供的原生能力,将坐标改变这个过程与屏幕帧率吻合实现了动画化,这种动画化的效果不管是从性能上,还是从动画的流畅度上都远好于 setTimeoutsetInterval,当然也包括本文中提到的我方飞机,其实现过程也是依靠 requestAnimationFrame 实现的位移;
本文主要分享的内容为我方飞机的实现,耐心看完,或许你会所有收获~

二. 阅读对象与难度

本文难度属于:中级本文中主要实现的我方飞机模型相关的操作,包括我方飞机坐标 位置初始化爆炸动画飞机位移等等,通过文本你可以大致了解到一下内容

  • Vue中的基础知识,包括v-for等常规用法;
  • 我方飞机的操控;
  • requestAnimationFrame 等等

具体内容可以参考以下的思维导图:
在这里插入图片描述

三. 项目地址以及最终效果

文本代码已上传CSDN上的gitCode,有兴趣的小伙伴可以直接clone,项目地址:https://gitcode.net/zy21131437/planegameuni
如果有小伙伴愿意点个星,那就非常感谢了~最终效果图如下:
在这里插入图片描述

四. 我方飞机模型的实现

4.1 分析分析

根据上面的效果图,我们先分析一下要实现的功能:

  1. 首先要实现的就是我方飞机的样式,当然也包括我方飞机被摧毁时的动画;
  2. 我方飞机初始化时候的坐标;
  3. 由于我们这个阶段是仅仅在web网页上进行控制的,因此,在操控上实现的是传统网页游戏那种WASD来控制我方飞机的上下左右移动;

大致上这三个功能在本文这个阶段是最主要的,再来估计一下如果要实现这几个功能可能要用到什么实现逻辑
第一个,我方飞机样式
飞机样式,这一块其实包含两部分:

  • 第一部分,我方飞机,其实就是DOM元素,加上背景图,这一点应该是毋庸置疑的;
  • 第二部分,爆炸动画,当敌机撞到我们控制的飞机时,我方飞机会被摧毁,被摧毁时会有一个爆炸的效果动画,既然是动画那肯定是老传统了,通过 CSS3animation 实现;

第二个,出生坐标
既然是坐标,那坐标肯定是有x和y的,从效果上看,我方飞机处于的位置在于屏幕的下方且处于中间位置;
第三个,位移
重头戏来了,通过之前我们知道移动是靠的 requestAnimationFrame 实现的,那操控呢,就是就是键盘事件,当按下指定的按键后,触发对应的控制位移的方法,这样就实现了对应方向的位移;

4.2 我方飞机的样式

先来看看我放飞机的样式,它的的素材图如下:
在这里插入图片描述
可能看到这会有一点点疑惑,不对啊,怎么是这种图片,我们其实可以这么理解,先看一个示意图
在这里插入图片描述
正常情况下,默认显示最左边的我方飞机素材图,也就是 正常状态下的飞机,当这个飞机模型接收到被摧毁的信号时,触发爆炸动画,此时的我方飞机模型只需要通过 animation 将右侧隐藏的图片分步显示出来,形成一个动画,具体完整代码如下:

<template>
	<view class="plane" :class="getClass"></view>
</template>

<script>
export default {
	props: {
		data: {
			type: Object,
			default: () => {
				return {};
			}
		},
	},
	computed: {
		getClass() {
			const classStyle = [`plane`];
			const explosion = {};
			explosion[`plane_animate`] = this.isExplosion;
			classStyle.push(explosion);
			return classStyle;
		}
	},
};
</script>
<style scoped lang="scss">
.plane {
	position: fixed;
	width: 98px;
	height: 122px;
	z-index: 3;
	background: url(@/static/images/plane.png) no-repeat left top;
}

.plane_animate {
	animation: plane_animate 0.5s steps(5) both infinite;
	-webkit-animation: plane_animate 0.5s steps(5) both infinite;
}

/* 飞机-爆炸效果 */
@keyframes plane_animate {
	0% {
		background-position: 0 0;
	}

	100% {
		background-position: -490px 0;
	}
}

@-webkit-keyframes plane_animate {
	0% {
		background-position: 0 0;
	}

	100% {
		background-position: -490px 0;
	}
}
</style>

完整代码差不多就是如上,我们分布看一下,首先是template

<template>
	<view :class="getClass"></view>
</template>

template部分非常简洁,通过一个名为getClass的计算属性获取完整的类名数组,我们细看一下这个计算属性

getClass() {
  const classStyle = [`plane`];
  const explosion = {};
  explosion[`plane_animate`] = this.isExplosion;
  classStyle.push(explosion);
  return classStyle;
}

通这个属性中可以看到,最终返回出去的是一个数组,数组一共有两项,第一项是一个字符串,第二项是一个对象,举个例子吧,假设this.data.type的值是1,那么这个计算属性最终返回的结果是这个

["plane",{"plane_animate":this.data.isExplosion}]

我们放到css中去看一下,这个两个对应的样式

.plane {
	position: fixed;
	width: 98px;
	height: 122px;
	z-index: 3;
	background: url(@/static/images/plane.png) no-repeat left top;
}

标准DOM样式,宽,高,背景图等等,很明显这一个用于设定DOM基本属性的,另外一个

.plane_animate {
	animation: plane_animate 0.5s steps(5) both infinite;
	-webkit-animation: plane_animate 0.5s steps(5) both infinite;
}

/* 飞机-爆炸效果 */
@keyframes plane_animate {
	0% {
		background-position: 0 0;
	}

	100% {
		background-position: -490px 0;
	}
}

@-webkit-keyframes plane_animate {
	0% {
		background-position: 0 0;
	}

	100% {
		background-position: -490px 0;
	}
}

这是一个动画,关于animation的用法具体可以参考之前的博文,启动页的那一篇,里面有详细的用法解释,简单的说,就是当 this.data.isExplosion 的值为true的时候,plane_animate这个类名将会被添加到这个DOM上,当类名被添加的同时会立即执行名为plane_animate的动画,该动画会在0.5秒内分成5步显示完,动画改变的背景图的坐标,将x轴从0变到了-490px,实现了动画效果;
具体效果图如下:
在这里插入图片描述

4.3 我方飞机生成的实现

飞机的创建流畅和之前敌机的创建流程其实差不多,大致的流程是,我方的文件是一个单独的.vue文件,里面有我方飞机模型的所有参数功能,当参数创建成功后存入飞机数组,通过v-for将飞机数组遍历,其它的类似于是否爆炸等参数的则是通过props传入的飞机组件
在这里插入图片描述

因此,在父级,我们可以这么写

	<!-- 我方飞机 -->
  <template v-if="isStart">
    <Plane v-for="plane in planeData" :data="plane" :params="config" :key="plane.id" @addBullet="addBullet" />
  </template>

  <script>
import Plane from '../view/plane/plane.vue';
export default {
	data() {
		return {
			planeData: [],
		};
	},
	components: { Plane },
	methods: {
		initPlane() {
			const data = {
				width: 98,
				height: 122,
				x: (this.config.winWdith - 98) / 2,
				y: this.config.winHeight - 122,
				id: `plane` + new Date().getTime(),
				isExplosion: true
			};

			this.planeData.push(data);
		}
	}
};
</script>

子组件,也就是我方飞机组件则是如下,通过props将父组件中的飞机配置参数传入子组件

<script>
export default {
	props: {
		data: {
			type: Object,
			default: () => {
				return {};
			}
		},
	},
};
</script>

4.4 我方飞机坐标的实现

从效果图中我们其实可以看到,我方飞机y轴上飞机的生成位置处于屏幕的下半方,在x轴上处于
在这里插入图片描述

因此,实际上我们只需要固定X轴和Y轴的值即可~,先看X轴的代码

(this.config.winWdith - 98) / 2

在x轴上显示获取屏幕的宽度,减掉飞机的宽度再除以2,这就是飞机模型离左边距的距离,Y轴就更简单了

this.config.winHeight - 122

直接屏幕高度减掉一个固定值即可,接着就将参数传递到子组件接收

<template>
	<view class="plane" :class="getClass" :style="{ left: data.x + 'px', top: data.y + 'px' }"></view>
</template>

在子组件中直接 设置left属性 以及 top属性 来控制我方飞机的的初始坐标方位;

4.5 我方飞机的操控与位移

我方飞机的操控是按键盘的WASD来控制飞机的前后左右移动,因此我们先看一下实现思路:
在这里插入图片描述

简单的说就是 飞机模型被加载的时候给当前页面添加一个监听事件,监听整个键盘的按键,当WASD这几个按键被按下的时候 打开对应的开关,因此循环执行飞机位移动画时得到位移方向确认,因此飞机即可向对应方向位移

4.5.1 初始化操作事件

操作事件的初始化,初始化一共分为两种,一种是按键按下时触发控制器为开一种是按键松开时触发控制器为关,先是控制器为开的操作

document.addEventListener('keydown', e => {
  switch (e.keyCode) {
    //up键
    case 38:
      this.keyTop = true;
      break;
    //down键
    case 40:
      this.keyBottom = true;
      break;
    //left键
    case 37:
      this.keyLeft = true;
      break;
    //right键
    case 39:
      this.keyRight = true;
      break;
    default:
      console.log('无效案件,请使用上、下、左、右控制');
  }
});

接着是 控制器关 的代码,如下:

document.addEventListener('keyup', e => {
    switch (e.keyCode) {
      //up键
      case 38:
        this.keyTop = false;
        break;
      //down键
      case 40:
        this.keyBottom = false;
        break;
      //left键
      case 37:
        this.keyLeft = false;
        break;
      //right键
      case 39:
        this.keyRight = false;
        break;
    }
  });

通过绑定 keydownkeyup 开控制开关的开启与关闭;

4.5.2 位移函数

先上代码

move() {
  if (this.keyTop && this.data.y > 0) {
    this.data.y -= 5;
  }
  if (this.keyBottom && this.data.y + 122 < this.params.winHeight) {
    this.data.y += 5;
  }
  if (this.keyLeft && this.data.x > 0) {
    this.data.x -= 5;
  }
  if (this.keyRight && this.data.x + 98 < this.params.winWdith) {
    this.data.x += 5;
  }
},
initMove() {
  this.moveTimer = () => {
    this.move();
    requestAnimationFrame(this.moveTimer);
  };
  this.moveTimer();
},

整个位移有两段,分别 实现位移动画 以及 位移动画的具体实现,一段一段看

initMove() {
  this.moveTimer = () => {
    this.move();
    requestAnimationFrame(this.moveTimer);
  };
  this.moveTimer();
},

这一段很明显,在敌机模型中也被用到了,作用就是通过 requestAnimationFrame 实现了飞机位移动画,位移的具体实现则是通过move()这个函数实现的

move() {
  if (this.keyTop && this.data.y > 0) {
    this.data.y -= 5;
  }
  if (this.keyBottom && this.data.y + 122 < this.params.winHeight) {
    this.data.y += 5;
  }
  if (this.keyLeft && this.data.x > 0) {
    this.data.x -= 5;
  }
  if (this.keyRight && this.data.x + 98 < this.params.winWdith) {
    this.data.x += 5;
  }
}

这里有4个判断,用于判断当前哪个开关是处于开关,当对应的开关处于打开的状态时,那么飞机将在对应方向上实现位移:

  • 第一个if,按键是W时执行,飞机在Y轴上的位移轨迹,每次在Y轴上减少5个像素,当然坐标不能小于0,小于0的话就到屏幕外了;
  • 第二个if,按键是S时执行,飞机在Y轴上的位移轨迹,每次在Y轴上增加5个像素,坐标加飞机本身高度不能大于屏幕高度,大于的话就到屏幕外了;
  • 第三个if,按键是A时执行,飞机在X轴上的位移轨迹,每次在X轴上减少5个像素,X轴上的坐标也不能小于0,小于的话就到屏幕外了;
  • 第四个if,按键是D时执行,飞机在X轴上的位移轨迹,每次在X轴上增加5个像素,坐标加飞机本身宽度不能大于屏幕宽度,大于的话就到屏幕外了;

这就是每次执行 requestAnimationFrame 的内部动画逻辑;

五. 阶段性展示

到这一章节,我们已经实现的效果图如下:
在这里插入图片描述

六. 小结

本文主要概述了我方飞机的实现,主要包含:

  • 飞机样式:其实就是设定好DOM,加入背景图,预设好爆炸的CSS动画;
  • 飞机生成:创建我方飞机配置参数,加入缓存数组,通过v-for指令循环生成飞机;
  • 飞机坐标:我方飞机的坐标位于屏幕的下方,是固定的;
  • 飞机操作位移:位移通过 requestAnimationFrame 实现,并在加载我方飞机时 添加按键监听,监听WASD这几个按键,当这几个按键被按下时,触发对应的位移效果;

但看飞机模型的代码量,也不算复杂,耐心看看还可以明白的,接下来就是碰撞检测了,这一块稍微涉及到了一些计算,当然,问题不大~
都已经看到这里了,点个赞吧,点个关注吧,谢谢

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《uni-app》一个非canvas的飞机对战小游戏实现-我方飞机实现 的相关文章

  • 将文本大小调整为矩形 在 Canvas HTML5 中调整大小

    我是 Canvas 新手 我正在创建一个网站 以在调整矩形大小时增加文本 我尝试了很多 但没有任何效果 实际上 我希望如果我仅按其宽度调整矩形大小 向左拉伸 向右拉伸 则仅应增加文本宽度而不是字体大小 我已经完成了字体大小 但发现增加孤立文
  • 在 Fabric.js 中按宽度/高度在另一个画布对象内居中和缩放画布对象

    Goal 将一个对象 水平和垂直 置于另一个对象 矩形或组 的中心canvas via Fabric js或者通过Javascript保持原始对象的长宽比相同 但也不超过父对象的宽度 高度比例 父对象 矩形或组 不会居中于canvas元素
  • WPF画布性能-children.add调用多次

    我在长画布上绘制了很多线条 想想条形图 并对其性能进行了相当好的调整 使用低级几何类并冻结它们等 这极大地提高了性能 但仍然需要几秒钟将几千个项目加载到画布中 我对应用程序进行了性能分析 看起来每次调用都花费了很大一部分时间canvas c
  • 如何在android中画一条曲线?

    我是 Android 新手 正在开发一个关于绘制线条的示例项目 我想画一条连接两点的曲线或高架线 x1 y1 and x2 y2 我试过canvas drawArc 方法 但是RectF内的值drawArc方法只是圆的 x y 中心点 它在
  • 强制 Firefox 在 img.src 更改后重新加载图像

    我正在修改画布上的一些图像 然后将这些图像的 src 设置为新的 Base64 编码图片 img src changeColor img 更改颜色返回 base64 编码图像 return canvas toDataURL Chrome 和
  • Html5画布最热门的任意形状

    我正在尝试开发可以在画布中渲染图像和文本的程序 我尝试处理画布中图像的点击 但它适用于可矩形图像 我的问题 您是否知道处理单击画布中图像的可见部分 非透明部分 的解决方案或框架 我正在寻找 ActionScript hitTestObjec
  • 仅最后一个用户控件显示内容控件

    我有一个奇怪的问题 我创建了一个带有标签和画布的用户控件 画布引用资源 但画布仅显示在我的堆栈面板中的最后一个控件上 这是我的窗户
  • 如何提高Canvas渲染性能?

    我必须画很多Shape http msdn microsoft com en us library system windows shapes shape aspx 约 1 20 万 作为 Canvas 2 的子级 我在 WPF 应用程序中
  • JavaScript;使用画布在图像上添加文本并保存到图像

    我只想制作一个页面 您可以在其中输入文本并将其添加到所选图像上并将其另存为新图像 我尝试了几种方法 但没有运气
  • 如何将webview内容划分为多个页面

    我必须使用 Android 上的 PdfDocument 从 webView 创建 PDF https developer android com reference android graphics pdf PdfDocument htm
  • 如何精确缩放已翻译的d3地图

    我有一张已翻译的地图 以使其正确适合画布 我正在尝试实现一种缩放它的方法 它确实有效 但是当您放大时它会远离中心 而不是以鼠标甚至画布为中心 这是我的代码 function map data total views var xy d3 ge
  • html5 canvas 使用图像作为蒙版

    是否可以使用具有形状的图像作为整个画布或画布内图像的蒙版 我想将图像放置在画布中 并在图像上添加蒙版 然后将其另存为新图像 您可以使用 source in globalCompositeOperation 将黑白图像用作蒙版 首先 将蒙版图
  • Gridview,允许背景画布在视图之外绘制

    我正在开发一个 Android 应用程序 一个小型记事本应用程序 在我的应用程序中 我使用 Gridview 创建 2 X 大小的网格并在每个单元格中 我有一个 LinearLayout 调用 AbstractNote 它的任务是显示每个保
  • 带滚动条的 HTML 画布

    我正在宽度不等的画布上绘制图表 每个画布可以有自己的滚动条吗 我尝试将所有画布放在一个 div 中并指定最大宽度 但它不起作用 是否有可能所有画布在页面上的可见宽度均为 500 像素 并且每个画布都有其滚动条来查看画布的整个宽度 谢谢 指定
  • 如何使用 HTML5 Javascript Canvas 获取三个碰撞形状的交集并删除不碰撞的部分?

    我最近专门针对 KonvaJs 发布了类似的问题here https stackoverflow com questions 64603077 how can i get the intersection of three shapes c
  • EaselJS Alpha 遮罩滤镜

    我对 Canvas 还很陌生 我一直在尝试将图像颠倒过来EaselJS Alpha 蒙版 http www createjs com demos easeljs alphamaskreveal示例 以便初始图像清晰 并且您可以paint是模
  • 在android中的圆形路径上绘制文本

    我需要在圆形路径上绘制文本 我已经尝试过drawTextOnPath 方法 但对于所附图像中的 肥沃窗口 等文本 文本会旋转且不可读 我使用过的代码 customPath2 addArc mCircleRectF 30F 64 28F cu
  • 将画布缩放到鼠标光标

    我正在编写一个 HTML5 项目 其中涉及使用滚轮放大和缩小图像 我想像谷歌地图一样缩放光标 但我完全不知道如何计算移动 我所拥有的 图像x和y 左上角 图像宽度和高度 光标 x 和 y 相对于画布中心 简而言之 你想要translate
  • 将 PictureStream 转换为 HTML5 画布

    我正在从 net Web 服务检索图片流的字节数组 JSON 字节数组响应如下所示 137 80 78 372 617 more 我正在尝试转换这个字节数组并将其绘制到 HTML 画布中 如下所示 var context document
  • 如何计算android中位图擦除区域的百分比?

    我是安卓新手 我正在制作一个可以使用手指擦除画布上的位图的应用程序 像手指画橡皮擦之类的东西 我想计算擦除区域的百分比 例如 60 已从完整图像中擦除 请帮助我做到这一点 提前致谢 我尝试了一些方法 它总是给我 0 它不起作用 请参阅该方法

随机推荐

  • 蓝桥杯分考场

    历届试题 分考场 时间限制 xff1a 1 0s 内存限制 xff1a 256 0MB 问题描述 n个人参加某项特殊考试 为了公平 xff0c 要求任何两个认识的人不能分在同一个考场 求是少需要分几个考场才能满足条件 输入格式 第一行 xf
  • CCF_Markdown(正则表达式)

    试题编号 xff1a 201703 3试题名称 xff1a Markdown时间限制 xff1a 1 0s内存限制 xff1a 256 0MB问题描述 xff1a 问题描述 Markdown 是一种很流行的轻量级标记语言 xff08 lig
  • idea常用的插件

    1 lombok 省略get set方法 2 Alibaba Java Coding Guidelines 阿里的代码规范 3 Translation 谷歌中英文翻译工具 4 CodeGlance 代码迷你缩放图插件 xff0c 快速下拉拖
  • Hadoop windows本地环境安装

    hadoop使用java编写 xff0c 所以windows安装和java一样也需要配置环境变量 一 下载所需文件 JDK下载地址 xff0c jdk1 8下载Hadoop下载 xff0c hadoop下载 xff0c 进去后找到一个版本然
  • Gitlab的安装及使用

    1 GitLab概述 1 1 GitLab介绍 GitLab是利用Ruby on Rails一个开源的版本管理系统 xff0c 实现一个自托管的Git项目仓库 xff0c 可通过Web界面进行访问公开的或者私人项目 GitLab能够浏览源代
  • C语言例程:用二维数组实现矩阵转置

    用二维数组实现矩阵转置 本实例将输入的 3 4 矩阵转置为 4 3 矩阵 xff0c 并输出结果 通过本实例 xff0c 可以学习如何使用二 维数组 实例解析 二维数组的定义 二维数组定义的一般形式为 xff1a 第一部分 基础篇 X227
  • C++头文件的相互引用问题(#include” xxx“使用)

    188条消息 C C 43 43 头文件的引用问题 xff08 include使用 xff09 保护大苹果 CSDN博客 c 43 43 include头文件
  • 树莓派设置自动连接无线网络

    树莓派开机后自动连接无线网络方法 xff0c 亲测有效 1 在任意方法 xff08 无线或有线 xff09 已经连接树莓派的基础上 xff0c 执行该命令 xff0c 意思是编辑wpa supplicant conf这个文件 内容如下 xf
  • 常用快捷键(1)----Windows组合键

    单个的Windows键是打开和隐藏开始菜单 xff0c 功能与 Esc 43 Ctrl 组合键功能相同 下面是一些常用的Windows组合键 xff1a 1 快捷键 xff1a Windows 43 Shift 43 S 功能 xff1a
  • android 获取唯一Id,小小总结一下。仅供参考

    1 获取imei xff1a 前言 xff1a 因传统的移动终端设备标识如国际移动设备识别码 xff08 IMEI xff09 等已被部分国家认定为用户隐私的一部分 xff0c 并存在被篡改和冒用的风险 xff0c 所以在Android 1
  • xib中添加自定义可编辑属性

    IOS开发中 xff0c 有些人喜欢使用xib来进行项目的开发 xff0c 使用xib可以使界面可视化 xff0c 很多控件的属性设置都可以在 xib 中设置 xff0c 减少了代码量 xff1b 同时不用一遍遍的运行程序看效果 xff0c
  • STM32使用寄存器工程模板点亮一个LED灯

    1 环境说明 xff08 1 xff09 使用的是普中STM32F103开发板 xff08 2 xff09 keil 5软件 2 目的 点亮开发板上的LED1灯 3 步骤 xff08 1 xff09 定义一系列寄存器的宏 span clas
  • 结构体数组的使用

    测试源码 span class token macro property span class token directive keyword include span span class token string lt stdio h
  • string字符串拼接

    功能描述 实现在字符串末尾拼接字符串 函数原型 xff1a string amp operator 43 61 const char str 重载 43 61 操作符string amp operator 43 61 const char
  • 千万不要在TX2上安装Qt6

    失败 xff01 Nvidia TX2安装Qt6 和qtCreator7 手把手一步步 千万不要想在TX2上安装QT6 xff01 XCB缺失几乎无解 xff0c 如果有大佬可以指导一下 最开始准备使用交叉编译的方案给TX2写程序 因为台式
  • 最新WSL2 ubuntu环境 cuda,教程,适用于40系显卡

    实验环境 xff1a ubuntu2204 ubuntu1804 xff0c 最新4060笔记本电脑 xff0c 自我觉得是目前比较好用的搭配 xff1a wsl2 43 gnome 43 wsl中的pycharm xff0c 写的很全 x
  • 高分辨率机器安装 Ubuntu虚拟机的屏幕显示字体过小问题的解决

    在网上搜索了很多的解决方案 xff0c 有的试了没效果 xff0c 有的比较麻烦 xff0c 没尝试了 我说一下我的解决方案 问题 xff1a 首先我这个机器是2k屏的 xff0c 分辨率就是会大于 1920x1080 xff1b 然后我是
  • IDEA rebuild project idea如何重新编译项目

    idea如何重新编译项目 1 2 3 4 5 6 7 分步阅读 idea工具可以用于多种语言来开发项目 xff0c 如果是像java这样需要编译之后运行的编程语言 xff0c 每次在运行项目之前都需要对源码进行编译 一般的情况下都是idea
  • Ubuntu更新软件时报"http://cn.archive.ubuntu.com/ubuntu"相关错误的解决方案

    一 问题日志 W 仓库 http cn archive ubuntu com ubuntu xenial Release 没有 Release 文件 N 无法认证来自该源的数据 xff0c 所以使用它会带来潜在风险 N 参见 apt sec
  • 《uni-app》一个非canvas的飞机对战小游戏实现-我方飞机实现

    这是一个没有套路的前端博主 xff0c 热衷各种前端向的骚操作 xff0c 经常想到哪就写到哪 xff0c 如果有感兴趣的技术和前端效果可以留言 xff5e 博主看到后会去代替大家踩坑的 xff5e 接下来的几篇都是uni app的小实战