C语言项目 天天酷跑(上篇)
前言
这里讲述这个天天酷跑是怎么实现的,我会在天天酷跑的下篇添加源代码,这里会讲述天天酷跑这个项目是如何实现的每一个思路,都是作者自己学习于别人的代码而创作的项目和思路,这个代码和网上有些许不一样,因为掺杂了作者的思路
建立一个窗口
我们要先安装EaxyX图库,安装到我们的开发工具里面去,这样我们才可以实现窗口的实现和图片的加载
这个头文件我们一定要调用,这样才可以实现我们一系列的EaxyX图库函数的实现,对于一个小型的项目设计,我们不可以全部都堆在main函数里面,要不然可读性极差,后面编写项目的时候,内容会很乱,我们也不好去查找错误,我们应该把每一个功能都分装到一个函数里面去,后者创建更多的cpp源文件来是实现多功能
窗口的设计
这里我们在main函数里面写一个init();函数,把所有的初始化分装到这个函数里面去,把窗口的长宽都用宏定义来定义,这样后面方便使用,还具有很高的可读性
根据以上,我们就有了
Main函数-----控制台函数
Init函数-----初始化函数
EaxyX图形库函数的学习
我们可以转到initgraph函数的定义来看里面的参数是什么
这里的参数HWND是一个是窗口句手柄(包括程序窗口,对话框,按钮等)都有一个唯一的标识符号,这个就是窗口句柄
参数:
Width 这个是窗口的宽 height 这个是窗口的高
Flag:
作用:可以取不同的值来实现特定的功能或效果,常见的取值及作用如下:
0:默认模式,通常表示普通的图形显示模式,会创建一个标准的图形窗口,根据width和height指定的大小进行显示。
EW_SHOWCONSOLE:在创建图形窗口的同时显示控制台窗口。这对于在图形程序中需要同时在控制台输出调试信息或与用户进行命令行交互的情况非常有用。
EW_NOCLOSE:创建的图形窗口没有关闭按钮,用户无法通过点击关闭按钮来关闭窗口。这种模式通常用于需要限制用户对窗口关闭操作的特定应用场景
初始化背景
设计思路
我们在实现玩窗口的设置的时候,我们接下来的目的就是要把背景画出来,这就是初始化背景,但是我们要知道这个该怎么设计,我们角色是原地奔跑的,只要背景进行移动,我们就可以达到角色奔跑的效果,所以我们的代码就是要实现背景的挪动,我们可以近处的景色移动快一点,远处的移动的慢一点
这个是我们要实现的一个程序,我们分别把图片的右上角放到x为0,y为对应的位置即可,接下来这个就是我们的思路,我们用代码来实现一波
定义背景图的全局变量
这里我们就用这三个全局变量来存放背景图片,这里就以两个背景图片为例子
第一个为IMAGE类型的图片数组
第二个为存放背景的对于x的坐标
第三个为背景移动的速度,快的为远的物体,慢的为进的物体
初始化背景属性
我们有两个图片就是要实现两次的循环(init函数)
Name 数组:我们利用该数组来存放这个文件的名
Sprintf:这个是把我们输入的内容格式化,可以存放到char类型的数组里面
Loadimage:是把这个name的东西加载到这个imgbgs数组里面
然后初始化一下这个背景的X坐标为0,因为都是在0处,只需要改y即可
(如果想加全局变量的y不加x也是可以的,后面只需再putimage函数加上x)
加载图片的内容到窗口
Putimage是放置到窗口的特定位置,这里就是实现窗口放置图片
背景的奔跑
我们已经放置好图片在窗口处,我们这个时候就要实现图片的移动,我们就写一个run函数运行所有可以运动的东西
这里上面的srand函数是后面用的,这里不用看,我们按照我们的步骤走
我们需要执行两次循环,然后让图片向后面移动,由于我们执行的是一个小游戏,所以这个几毫秒是微乎其微的,不会影响我们的游戏的性能,注意我们是减不是加,因为我们背景往后面移动,我们的人才可以往前面跑动,我们的图片的长度设计应该为窗口长度的两倍,当这个图片运动到—长,那么我们就重置我们背景图片的位置
这样我们就可以实现一个背景的奔跑,利用死循环来不断是实现背景奔跑
目前为止我们实现了一下的函数
Main函数-----控制台函数
Init函数-----初始化函数
Updatebg-----更新背景函数
Run-----所有的运行程序函数
EaxyX图形库的函数学习
这里是loadimage函数参数
pDstImg保存图像的 IMAGE 对象指针。如果为 NULL,表示图片将读取至绘图窗口
(一般这个都是NULL,直接绘制到窗口里面)
pImgFile图片文件名。支持 bmp / gif / jpg / png / tif / emf / wmf / ico 格式的图片
gif 格式的图片仅加载第一帧;gif 与 png 均不支持透明
(我们一般都是用png,jpg,但是图片在这个函数一直都是有一个bug,不可以重叠图片)
nWidth图片的拉伸宽度。加载图片后,会拉伸至该宽度。如果为 0,表示使用原图的宽度
nHeight图片的拉伸高度。加载图片后,会拉伸至该高度。如果为 0,表示使用原图的高度
bResize
是否调整 IMAGE 的大小以适应图片
void putimage(
int dstX, // 绘制位置的 x 坐标
int dstY, // 绘制位置的 y 坐标
IMAGE *pSrcImg, // 要绘制的 IMAGE 对象指针
DWORD dwRop = SRCCOPY // 三元光栅操作码
);
void putimage(
int dstX, // 绘制位置的 x 坐标
int dstY, // 绘制位置的 y 坐标
int dstWidth, // 绘制的宽度
int dstHeight, // 绘制的高度
IMAGE *pSrcImg, // 要绘制的 IMAGE 对象指针
int srcX, // 绘制内容在 IMAGE 对象中的左上角 x 坐标
int srcY, // 绘制内容在 IMAGE 对象中的左上角 y 坐标
DWORD dwRop = SRCCOPY // 三元光栅操作码
);
这里我们一般都是写出x和y的坐标,然后利用指针指向那个图片的位置,然后进行放置图片
实现角色的跑动
根据我们实现背景的步骤,我们就有了一个很清晰的认知
定义相关属性(全局变量)—>初始化相关属性(init)-->加载相关图片(update…)
-->运行该物体(run)
定义角色的全局变量
角色的图片(12帧)
角色的x与y坐标
角色加载的帧数
初始化角色属性
这里就是同样的操作,把图片加载到name数组里面,然后初始化这个图片和角色的坐标和角色的帧
加载角色的图片
下面那个是下蹲所需要,这个后面会讲,我们理解下面这个就好
我们这里是放置一个角色在(heroX,heroY)这个坐标的位置,放置的是这个imgHero这个数组里面的图片,那么我们现在最后的一步就是不断逐帧的显示图片即可
逐帧显示图片
我们利用这个可以进行逐帧动画,实现玩家的不断奔跑,用取模运算改变数组的下角标来实现角色的运动
目前我们设计的函数有
Main函数-----主控制台
Init-----初始化每一个东西的属性
Updatebg-----加载背景
UpdateHero-----加载角色
Run-----运行每一个事物
实现玩家的跳跃
这里我们利用这几个全局变量来是实现跳跃的功能
Herojump 这个是一个布尔变量,实现是否进行跳跃
Jump HeightMax 这个每一次进行的循环,这个角色该上移和下移动多少
初始化跳跃的属性
herojump是进行判断是否进行跳跃
jump HeightMax 是跳跃的最大限度
herojumpOff 是每次所减少的量
输入空格键来实现玩家的跳跃
这里就是如果有键盘输入的话,这个_kbhit()这个就会返回为真,否则返回为假
我们有了这个然后判断一下输入的是什么键盘就可以进行操作的执行了,ch是用来接受这个他输入的是什么东西就执行什么东西,我们如果输入空格之后就会跳到jump函数的里面
Jump的开关函数
跳跃的实现
这个是我们实现跳跃的函数,如果jump被打开,那么就让heroY先上升,但是我们是往0靠近的,所以我要加负数,然后下降的时候是要加正数来实现下下降然后当我们角色下降到合适的位置,我们就可以关掉这个角色跳跃的开关即可
优化帧
这个就是我们用来实现这个优化帧的
这个是我们一般来写的,每间隔30毫秒执行一次循环里面的语句,但是我们在这30毫秒里面去输入空格的话,这个电脑是执行休眠期的,所以这个空格就不会执行,胡出现掉帧的情况,虽然我们这种小型的游戏看不出什么,但是大型游戏就很明显,所以我们来优化一下
我们定义了一个update来执行是否进行更新,虽然跟sleep的功能很相似,但是这个是受我们控制的keyEvent(),在更新的前面,方便控制更新getdaly()执行的就是不断的输入1毫秒,当这个到达30次就执行一次清零,然后就update打开,跟sleep很像,但是当我们输入空格的时候,那个jump开关函数里面也有一个update打开,这样就可以在30毫秒里执行跳跃,不至于掉帧
到目前我们所实现的程序:
Main-----控制台函数
Init-----初始化函数
Update(xxx)---加载各种图片
keyEvent—判断输入的键盘的功能-
jump的开关函数
实现多种障碍物的出现
我们把定义一个枚举,里面放置各种类型的障碍物
这里是定义一个存储每一个障碍物的数组,这里使用的c++的容器写的,大家也可也用c语言的二维数组来进行编写
这里定义了每一个障碍物的的属性,用于后面的编写
这个是定义的是,我们用于存放障碍物的,便于我们设置他们的属性
接下来我们就要把这所有的进行初始化,用于后面的操作里
这个是初始化小奶龙的
这个是我们现加载一下这个图片,创建一个容器类的一维数组用来存放图片然后把在容器里用push_back功能来实现把图片压入容器,然后在把这个一维数组放入到我们先前创建好的二维容器数组里面,这个TOTRTOISE是我们之前用枚举定义过的,用这个可读性很高,这样我们就可以分清楚哪一行对应的那一种的障碍物
这个是我们kunkun的图片初始化,跟小奶龙的初始化是一样的,只不过kunkun是一个动图,所以才需要for循环来执行逐一把图片压入到二维数组里面
这个是柱子的初始化,由于不知道为什么这个用for循环逐个压入会有问题,可能是尺寸问题,所以采取了逐一的压入的方法
OBSTACLE_CUONT是障碍物的最大个数
然后我们把每一个障碍物的存在都设置为false
这里生声明一下,我们定义了两种数组:
一个是存放照片的
vector<vector<IMAGE>>obstacleImags(OBSTACLE_TYPE_COUNT,vector<IMAGE>(12));
一个是存放每个障碍物的,这个是用于管理每一个障碍物的属性
obstacle_t obstacles[OBSTACLE_CUONT];
当我们进行图片的初始化,我们就要创造障碍物
除了伤害和移动速度对于每一个角色都不一样,其他的属性都是一样的
这里就是如果障碍物不存在的化,这个就是跳出循环,但是如果单单这样就是每一次都是第一个障碍物出现,所以我们就要在后面实现一个随机取的一个功能
这里就是随机取这个障碍物的功能,由于vs比较严谨,所以整形和枚举类型是不会兼容的,所以需要强制转换一下,这个rand前面要写一个strand函数,随机种子要写time,这样才可以实现随机出现一个数字,要不然是一直出现一种的数字,所以我们分为了两个区域一个是取奶龙,kunkun,柱子,但是柱子有出现了很多种,为了让每一个柱子出现的频率相同,下面在写一个对于柱子的随机取值
知识点:rand()%x这个是取0~(x-1)范围的值,在前面我们已经定义了枚举的类型,所以这个是十分方便的,其他与初始化反着来就可以了
我们现在初始化了每一个障碍物和实现了他们的创建,但是我们还要实现他们的出现和调整频率,要不然一直出来就完蛋了在这样就没有操作空间了
所以我们要在run函数里面进行操作
我们定义一个静态变量,这个是每一次都是加1,达到50次就刷新怪物来调整这个怪物之后就进行创造这个障碍物,这个频率肯定不可以一直不变嘛,所以我们后面再写一个rand函数前面也写一个srand函数来以time为种子实现随机,但是创造这个障碍物还要实现移动和关闭,要不然不动还不一移动就不是游戏了
实现障碍物的移动和开关的关闭
这里我们也是在run函数里写,创建完障碍物,我们就逐一的判断每一个障碍物的存在性,存在就调用他们之前定义的速度,记住要加背景的速度,因为小奶龙是不动的,然后这个当到达这个-300的时候,就把这个图片关掉,但是由于我们的kunkun使用一个动图,所以我们就要加下面这个,计算他数组的长度,然后利用取模运算来
方法:
取模:(x+1)% n这个是确保不超出n如果等于n就自动为0了,但是小于n就是他本身加1,比如(1+1)%12为2,就是为(x+1)的值,只是为了不超过一直在0~n的区间内执行
我们现在已经初始化障碍物,创造障碍物,实现障碍物移动与关闭,现在就差一个放置在窗口了,所以我们就要写一个updatezhang这个来放置图片
这个是放置障碍物所用的看是否存在然后进行放置窗口
这样也就实现了障碍物了
实现玩家的下蹲
定义相关下蹲属性
用于下蹲的开关和存放这个角色下蹲图片的数组
初始化角色的相关属性
Down的输入设置
当我们输入s的时候就可以打开这个down的开关
这个时候我们是读取这个角色下蹲数组的图片,所以这个下角标一定要进行更新为0,然后再进去,要不然会出现bug
这里是下蹲功能的实现
我们用静态变量来实现这个次数,我们要这两个图片之间要有一定的时间间隔,要不然会很快的起来,所以我们这里定义一个delays是用于延迟的,然后延迟到一定的时间的时候,我们就可以实现这个图片的更换,完成之后,我们有初始化这个图片的下角标,这样就可以实现下蹲和然后再关掉这个开关
当下蹲和跳跃都没有实现的时候,就执行这个奔跑
当目前为止我们已经完成了大半的进度了实现了玩家的下蹲,奔跑,背景的移动,障碍物的出现,调频,帧的优化
接下来就是实现这个血条,得分,撞到检测,打包,这个会在下一篇讲到
总结
今天我们学习到了障碍物,背景,人物的制作
对于大部分的物件的实现
定义这个物件的相关属性-->初始化这个程序的相关的属性-->加载这个物件到这个窗口-->运行这个程序
对于大部分功能的实现
定义这个共能再物件的相关属性(如跳多高)-->定义这个功能的开关-->再运行函数写出这个程序-->是否需要别的函数来辅助实现(如这个障碍物就是需要creatObstacle函数)-->放置物体
关于背景
我们再实现东西的时候要知道拿一些放入到死循环里面,那些不需要,这个背景是每时每刻都是存在的,所以我们不需要放到死循环里面,放到外面即可
关于人物
我们再写人物的时候,有很多的动作,我们这个时候先创建这个人物的相关的属性,然后这个根据功能写出相关的函数,比如我们在这里就是要跳跃,下蹲,奔跑,这里我们可以用if语句来实现三种功能,在奔跑是奔跑,跳跃时不奔跑等,我们还设计了一个函数是关于键盘的输入还有开关的公控制是否需要打开,这样我们的逻辑思路是很清晰的
知识点(x+1)%n这个公式就是循环取值的时候永远都不会超过n,一直在(x+1)~n跳动这个就为我们逐帧动画提供了很好的帮助
关于障碍物
我们在写障碍物的时候,我们要写出很多的属性,这里需要用到结构体就可以简化很多的代码,结构体里面全部都是障碍物的相关属性,然后利用枚举类型,在实现数组的时候,初始化用枚举具有很高的可读性,然后到后面我们存了这个图片不知道在哪一行是这个障碍物的图片是,可以去到枚举里面查看,而且枚举在最后面定义一个sum就是障碍物的总和
障碍物的功能总结
我们在实现障碍物的时候,我们需要随机出现所以创造障碍物的时候,我们需要用到rand和strand函数来实现实现,后面就是频率的控制和障碍物的放置和移动了
知识点 rand()%n这个数字永远是0~n-1这个区间里面的,这样也可以用于调整出现频率什么时候出现,也可以用于随机出现障碍物
优化帧
我们一般都是用sleep这个来写,但是容易掉帧,所以我们需要写一个自己可以控制那30毫秒里面的东西
相关文章:

C语言项目 天天酷跑(上篇)
前言 这里讲述这个天天酷跑是怎么实现的,我会在天天酷跑的下篇添加源代码,这里会讲述天天酷跑这个项目是如何实现的每一个思路,都是作者自己学习于别人的代码而创作的项目和思路,这个代码和网上有些许不一样,因为掺杂了…...

Python读取Excel批量写入到PPT生成词卡
一、问题的提出 有网友想把Excel表中的三列数据,分别是:单词、音标和释义分别写入到PPT当中,每一张PPT写一个单词的内容。这种批量操作是python的强项,尤其是在办公领域,它能较好地解放双手,读取Excel表后…...
NS3学习——tcpVegas算法代码详解(1)
目录 一、源码 二、详解 1.定义日志和命名空间 2.注册Typeld类:TcpVegas和GetTypeId方法的实现 3.构造函数和析构函数 4.TcpVegas类中成员函数 (1) Fork函数 (2) PktsAcked函数 (3) EnableVegas函数 (4) DisableVegas函数 一、源码 /* -*- Mode:C; c-file-style:&qu…...

相机雷达外参标定综述“Automatic targetless LiDAR–camera calibration: a survey“
相机雷达外参标定综述--Automatic targetless LiDAR–camera calibration: a survey 前言1 Introduction2 Background3 Automatic targetless LiDAR–camera calibration3.1 Information theory based method(信息论方法)3.1.1 Pairs of point cloud and image attributes(属性…...
【Java基础-27】Java中的访问修饰符:分类、作用及应用场景
在Java编程中,访问修饰符(Access Modifiers)是控制类、方法、变量和构造函数访问权限的关键工具。通过合理使用访问修饰符,可以有效地封装代码,保护数据,并确保代码的安全性和可维护性。本文将详细介绍Java…...

Redis+注解实现限流机制(IP、自定义等)
简介 在项目的使用过程中,限流的场景是很多的,尤其是要提供接口给外部使用的时候,但是自己去封装的话,相对比较耗时。 本方式可以使用默认(方法),ip、自定义参数进行限流,根据时间…...

SAP从入门到放弃系列之委外分包(Subcontracting)-Part1
以前写过一篇委外相关的文章,没有很详细的写。只是一个概念的概述ERP实施-委外业务-委外采购业务 最近看PA教材,遇到了这块内容,就再详细的整理一下SAP关于委外的理论知识。 文章目录 概述分包和物料需求计划 (MRP)委外分包订单分包委外业务…...

nlp新词发现——浅析 TF·IDF
传统nlp任务处理文本及其依赖已有的词表,只有在词表里出现的词才能被识别并加以处理。但这也带来了一些问题: 假设没有词表,如何从文本中发现新词? 随着时间推移,新词会不断出现,固有词表会过时࿰…...
WebGL2示例项目常见问题解决方案
WebGL2示例项目常见问题解决方案 webgl2examples Rendering algorithms implemented in raw WebGL 2. [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/we/webgl2examples 项目基础介绍 WebGL2示例项目(https://github.com/tsherif/webgl2examples.gi…...

鸿蒙元服务从0到上架【第三篇】(第二招有捷径)
第一招:开始发布元服务 AppGallery 上传通过IDE生成的图标,后面按照步骤填写 后台有隐私政策链接生成处,前往填写生成 第二招:用户协议 对于没有服务器或者是需要极速开发的开发者,可通过gitee生成用户协议&…...

Jimureport h2命令执行分析记录
首先找testConnection接口,前面进行了jimureport-spring-boot-starter-1.5.8.jar反编译查找,接口找到发现请求参数是json var1是JmreportDynamicDataSourceVo类型,也就是如上图的dbSource,根据打印的结果可以知道这里是local cac…...

vue 集成 webrtc-streamer 播放视频流 - 解决阿里云内外网访问视频流问题
资料: 史上最详细的webrtc-streamer访问摄像机视频流教程-CSDN博客 webrtc目录 前端集成 html文件夹里的webrtcstreamer.js,集成到前端,可以访问webrtc,转换rtsp为webrtc视频流,在前端video中播放 <videoref&quo…...

进网许可认证、交换路由设备检测项目更新25年1月起
实施时间 2025年1月1日起实施 涉及设备范围 核心路由器、边缘路由器、以太网交换机、三层交换机、宽带网络接入服务器(BNAS) 新增检测依据 GBT41266-2022网络关键设备安全检测方法交换机设备 GBT41267-2022网络关键设备安全技术要求交换机设备 GB/…...

Provides transitive vulnerable dependency maven 提示依赖存在漏洞问题的解决方法
问题描述 如下图所示,对于 java 项目某些依赖,IDEA 提示,引用了含有漏洞的依赖。如果是单个依赖,可以考虑直接升级版本即可。但是对于传递性依赖,比如 flink 项目中,依赖的部分模块,它们自己依…...
WebAuthn 项目常见问题解决方案
WebAuthn 项目常见问题解决方案 webauthn Webauthn / passkeys helper library to make your life easier. Client side, server side and demo included. [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/webaut/webauthn 项目基础介绍 WebAuthn 项目是一个开源…...
LeetCode 844. 比较含退格的字符串 (C++实现)
1. 题目描述 给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。 注意:如果对空文本输入退格字符,文本继续为空。 示例 1: 输入:s …...

Python8-写一些小作业
记录python学习,直到学会基本的爬虫,使用python搭建接口自动化测试就算学会了,在进阶webui自动化,app自动化 python基础8-灵活运用顺序、选择、循环结构 写一些小练习题目1、给一个半径,求圆的面积和周长,…...
C++ STL vector基本原理和用法
文章目录 基本原理1. 数据存储结构2. 内存管理机制3. 迭代器实现原理4. 元素访问原理5. 插入和删除元素原理 常见用法1. 概述2. 包含头文件3. 定义和初始化4. 常用成员函数5. 迭代器6. 内存管理与性能特点7. 应用场景 基本原理 以下是关于 std::vector 的基本原理讲解…...

【计算机视觉基础CV-图像分类】05 - 深入解析ResNet与GoogLeNet:从基础理论到实际应用
引言 在上一篇文章中,我们详细介绍了ResNet与GoogLeNet的网络结构、设计理念及其在图像分类中的应用。本文将继续深入探讨如何在实际项目中应用这些模型,特别是如何保存训练好的模型、加载模型以及使用模型进行新图像的预测。通过这些步骤,读…...
【人工智能-初级】基于用户的协同过滤推荐算法
文章目录 1. 数据集2. 实验代码3. 代码解释4. 实验结果5. 评估基于用户的协同过滤算法是一种常见的推荐算法,它的核心思想是根据用户之间的相似性来进行推荐。 实验案例: 使用的是电影推荐数据集 MovieLens,实验中我们会通过用户评分数据计算用户之间的相似性,并使用基于用户…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...