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

Libgdx游戏开发系列教程(6)——游戏暂停

目录

最初方案1

优化方案2 - 事件拦截器监听按键

优化方案3 - 暂停状态重绘

优化方案4

优化方案5

补充 - 监听android手机的返回键


暂停也是一个游戏的必要功能了,本文研究了Libgdx实现游戏暂停

例子以桌面端游戏实现讲解为主,至于移动端,可能之后会进行补充...

本文最终实现的就是

按下esc暂停,之后会出现一个界面提示,表示当前已经暂停

重新按下esc,则返回继续游戏

本篇稍微学习了下libgdx里的输入事件监听

最初方案1

最初看的教程是,通过一个boolean变量来控制render渲染,这里我们以上文例子Libgdx游戏开发(5)——碰撞反弹的简单实践-Stars-One的杂货小窝代码为例,增加一个暂停功能

注:下面贴的是全部代码,发布各位自行运行,但后续代码例子只看CircleBallTest这个类,为了方便阅读其他类就不再贴出了...

import com.badlogic.gdx.ApplicationAdapter
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.Input
import com.badlogic.gdx.graphics.GL20
import com.badlogic.gdx.graphics.glutils.ShapeRendererclass CircleBallTest : ApplicationAdapter() {lateinit var shape: ShapeRendererval ball by lazy { Ball() }val line by lazy { MyBan() }override fun create() {shape = ShapeRenderer()}//增加一个变量标识var isPause = falseoverride fun render() {//监听按下esc键,修改标识if (Gdx.input.isKeyPressed(Input.Keys.ESCAPE)) {isPause = !isPause}if (isPause) {//如果是暂停,则不再进行绘制return} Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)line.control()ball.gundon()line.draw(shape)ball.draw(shape)ball.checkFz()//检测碰撞到数横条ball.checkLineP(line)}
}class MyBan {var width = 200fvar height = 10fvar x = 0fvar y = heightfun draw(shape: ShapeRenderer) {shape.begin(ShapeRenderer.ShapeType.Filled)//这里注意: x,y是指矩形的左上角shape.rect(x, height, width, height)shape.end()}fun control() {if (Gdx.input.isKeyPressed(Input.Keys.LEFT)) {x -= 200 * Gdx.graphics.deltaTime}if (Gdx.input.isKeyPressed(Input.Keys.RIGHT)) {x += 200 * Gdx.graphics.deltaTime}//这里屏蔽y坐标改变,只给控制左右移动returnif (Gdx.input.isKeyPressed(Input.Keys.UP)) {y += 200 * Gdx.graphics.deltaTime}if (Gdx.input.isKeyPressed(Input.Keys.DOWN)) {y -= 200 * Gdx.graphics.deltaTime}}
}class Ball {var size = 5fvar x = 50fvar y = 50fvar speedX = 5fvar speedY = 5ffun checkLineP(myBan: MyBan) {if (y - size <= myBan.y) {speedY = speedY * -1}}fun gundon() {x += speedXy += speedY}fun draw(shape: ShapeRenderer) {shape.begin(ShapeRenderer.ShapeType.Filled)shape.circle(x, y, size)shape.end()}fun checkFz() {//到达右边缘,x变反if (x + size >= Gdx.graphics.width) {speedX = speedX * -1}//到达下边缘,y变反//todo 这个是判输条件!if (y - size <= 0) {speedY = speedY * -1}//到达上边缘,y变反if (y + size >= Gdx.graphics.height) {speedY = speedY * -1}//到达左边缘,x变反if (x - size <= 0) {speedX = speedX * -1}}
}

效果:

可能上面的效果看得不明显,我已经按了3次esc,但是发现好像没暂停,什么原因导致的?

原因很简单,render()方法是每帧进行渲染的,所以导致我们的监听会执行多次,我们加个日志打印就能发现端倪,如下图:

按下了一次,但由于每帧都会渲染,所以触发了多次

优化方案2 - 事件拦截器监听按键

经过了一番百度和GPT询问,得知Libgdx里有一个输入事件的拦截器接口InputProcessor

为了方便我们不必重写每个此接口的每个方法,我们可以使用InputAdapter(这个是InputProcessor接口的空实现类),之后重写需要的方法即可

我们以上面需求,实现监听esc键的监听,代码如下:

class InputP:InputAdapter(){//暂停标志var isPause = falseoverride fun keyDown(keycode: Int): Boolean {if (keycode == Input.Keys.ESCAPE) {//按下esc按键则修改状态isPause=!isPause}//ps:如果想监听android上的返回键,则可以使用Input.Keys.BACK,不过得先调用return true}
}

接着通过Gdx.input.inputProcessor(我这里是kotlin写法,java的话则是个setinputProcessor*()方法)进行设置拦截事件的拦截

class CircleBallTest : ApplicationAdapter() {lateinit var shape: ShapeRendererval ball by lazy { Ball() }val line by lazy { MyBan() }//懒加载创建拦截器对象val inputPro by lazy { InputP() }override fun create() {shape = ShapeRenderer()//开始之前就设置拦截器Gdx.input.inputProcessor = inputPro}override fun render() {//通过拦截器里的标志判断当前是否暂停绘制if (inputPro.isPause) {} else {Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)line.draw(shape)ball.draw(shape)line.control()ball.gundon()ball.checkFz()//检测碰撞到数横条ball.checkLineP(line)}}
}

效果:

从动图效果来看,暂停功能是实现了,但是出现了闪动的问题

这里虽然具体原理不清楚,但是根据之前做过Android动态壁纸的研究,知道这种底层还是使用OpenGl绘制,所以直接猜测OpenGl渲染缓存中有上一帧数据,导致了此问题

优化方案3 - 暂停状态重绘

根据上面的原因,所以有下解决思路:

暂停状态下,重新绘制当前的UI,但不改变物体的x,y坐标

这里就提到了上章节说的,为什么要将绘制和坐标逻辑计算分开不同方法来写的原因了

如下代码(只贴核心代码):

override fun render() {if (inputPro.isPause) {//这里重新绘制Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)line.draw(shape)ball.draw(shape)return}Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)line.draw(shape)ball.draw(shape)line.control()ball.gundon()ball.checkFz()//检测碰撞到数横条ball.checkLineP(line)
}

效果如下图:

但个人感觉这种方案,在暂停了但仍然会不停的绘制,感觉有些性能浪费,于是有了下面的方案4

优化方案4

再回到问题上来,因为是上一帧和当前帧切换导致的问题,所以我们将上一帧和当前帧整成一样,绘制的时候就不会出现闪动的状态了吧,得到一个新的解决思路:

每次进入暂停状态后,绘制2遍帧数据,保证上一帧和当前帧相同,之后即可跳过绘制过程,由于前2帧一直是相同的,所以就不会出现抖动的效果,即则完成我们需要的效果和优化的效果

class InputP : InputAdapter() {var isPause = falseoverride fun keyDown(keycode: Int): Boolean {if (keycode == Input.Keys.ESCAPE) {isPause = !isPause}//如果不是暂停状态,则重置if (isPause.not()) {count=0}return true}var count = 0fun handlePase(drawAction: () -> Unit) {//这里保证绘制完2帧if (count > 1) {return} drawAction.invoke()count++}
}class CircleBallTest : ApplicationAdapter() {lateinit var shape: ShapeRendererval ball by lazy { Ball() }val line by lazy { MyBan() }override fun create() {shape = ShapeRenderer()Gdx.input.inputProcessor = inputPro}val inputPro by lazy { InputP() }override fun render() {if (inputPro.isPause) {inputPro.handlePase {draw()}return}draw()line.control()ball.gundon()ball.checkFz()//检测碰撞到数横条ball.checkLineP(line)}private fun draw() {Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)line.draw(shape)ball.draw(shape)}
}

由于效果与上面相同,这里就不上图了

优化方案5

上面已经完成实现暂停功能了,现在我们在上面基础上个加个暂停文字提示(之前章节已经讲过如何绘制文字了),这里简单起见,我们直接显示pause单词

class CircleBallTest : ApplicationAdapter() {lateinit var shape: ShapeRendererval ball by lazy { Ball() }val line by lazy { MyBan() }val batch: SpriteBatch by lazy { SpriteBatch() }val font: BitmapFont by lazy { BitmapFont() }override fun create() {shape = ShapeRenderer()Gdx.input.inputProcessor = inputPro}val inputPro by lazy { InputP() }override fun render() {if (inputPro.isPause) {inputPro.handlePase {draw()//绘制暂停提示Gdx.gl.glClearColor(0f, 0f, 0f, 0.8f); // 设置清屏颜色为透明度80%的黑色batch.begin()font.draw(batch, "Pause", 100f, 150f)batch.end()}return}draw()line.control()ball.gundon()ball.checkFz()//检测碰撞到数横条ball.checkLineP(line)}private fun draw() {Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)line.draw(shape)ball.draw(shape)}
}

效果如下:

补充 - 监听android手机的返回键

如果想要监听android手机的返回键,则需要先设置Gdx.input.setCatchKey(Input.Keys.BACK, true),之后和上述一样监听keycode==Keys.BACK即可实现,如下图代码示例

这里就不放演示动图了,实际测试效果按下返回键即可暂停,但好像分辨率没有兼容,导致小球特别小,后续优化的时候再研究了...

相关文章:

Libgdx游戏开发系列教程(6)——游戏暂停

目录 最初方案1 优化方案2 - 事件拦截器监听按键 优化方案3 - 暂停状态重绘 优化方案4 优化方案5 补充 - 监听android手机的返回键 暂停也是一个游戏的必要功能了,本文研究了Libgdx实现游戏暂停 例子以桌面端游戏实现讲解为主,至于移动端,可能之后会进行补充... 本文最…...

车载测试:智能座舱测试中多屏联动与语音交互的挑战

智能座舱作为汽车智能化发展的核心&#xff0c;集成了多屏联动和语音交互功能&#xff0c;为驾驶员和乘客提供更便捷的体验。然而&#xff0c;这些功能的测试面临诸多挑战&#xff0c;包括多屏同步性、噪声干扰和复杂场景的处理。本文将详细分析这些挑战&#xff0c;探讨测试方…...

【踩坑随笔】`npm list axios echarts`查看npm依赖包报错

npm list axios echarts查看npm依赖包出现以下报错&#xff0c;原因就是包的版本匹配问题&#xff0c;按照提示降axios版本或者自己升找合适的got版本&#xff0c;我这里是选择了降版本。本文记录仅做解决思路参考不一定适配大家的实际情况。 weed-detection-system1.0.0 E:\P…...

用于管理 Elasticsearch Serverless 项目的 AI Agent

作者&#xff1a;来自 Elastic Fram Souza 由自然语言驱动的 AI 代理&#xff0c;可轻松管理 Elasticsearch Serverless 项目 - 支持项目创建、删除和状态检查。 这个小型命令行工具让你可以用简单的英语管理你的无服务器 Elasticsearch 项目。它通过AI&#xff08;这里是 Ope…...

【文生图】windows 部署stable-diffusion-webui

windows 部署stable-diffusion-webui AUTOMATIC1111 stable-diffusion-webui Detailed feature showcase with images: 带图片的详细功能展示: Original txt2img and img2img modes 原始的 txt2img 和 img2img 模式 One click install and run script (but you still must i…...

STaR(Self-Taught Reasoner)方法:让语言模型自学推理能力(代码实现)

STaR&#xff08;Self-Taught Reasoner&#xff09;方法&#xff1a;让语言模型自学推理能力 在大型语言模型&#xff08;LLM&#xff09;的推理能力优化中&#xff0c;STaR&#xff08;Self-Taught Reasoner&#xff09; 是一种引人注目的技术&#xff0c;属于“修改提议分布…...

十大经典排序算法简介

一 概述 本文对十大经典排序算法做简要的总结(按常用分类方式排列),包含核心思想、时间/空间复杂度及特点。 二、比较类排序 1. 冒泡排序 (BUBBLE SORT) 思想:重复交换相邻逆序元素,像气泡上浮 复杂度: 时间:O(n^2)(最好情况O(n)) 空间:O(1) 特点:简单但效率低,稳…...

5.训练策略:优化深度学习训练过程的实践指南——大模型开发深度学习理论基础

在实际开发中&#xff0c;训练策略对神经网络的表现起着至关重要的作用。通过合理的训练策略&#xff0c;我们可以有效避免过拟合和欠拟合&#xff0c;加速模型收敛&#xff0c;并提升最终性能。本文将从实际开发角度详细介绍几种关键的训练策略&#xff0c;包括 Early Stoppin…...

道可云人工智能每日资讯|《奇遇三星堆》VR沉浸探索展(淮安站)开展

道可云元宇宙每日简报&#xff08;2025年3月5日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 《奇遇三星堆》VR沉浸探索展&#xff08;淮安站&#xff09;开展 近日&#xff0c;《奇遇三星堆》VR沉浸探索展&#xff08;淮安站&#xff09;开展。该展将三星堆文…...

Camera相关配置

一、 Purpose目的 通常&#xff0c; 感知模块使用雷达点云和相机图像来对物体进行检测和分类&#xff0c;感知数据分别来自雷达和相机&#xff0c;就传感器数据融合准确性&#xff0c;我们需要雷达和相机同一时间捕捉到同一物体(时间间隔尽可能短)&#xff0c;否则一个真实的物…...

PHP Error处理指南

PHP Error处理指南 引言 在PHP开发过程中,错误处理是一个至关重要的环节。正确的错误处理不仅能够提高代码的健壮性,还能提升用户体验。本文将详细介绍PHP中常见的错误类型、错误处理机制以及最佳实践,帮助开发者更好地应对和处理PHP错误。 PHP错误类型 在PHP中,错误主…...

【Pandas】pandas Series argmax

Pandas2.2 Series Computations descriptive stats 方法描述Series.argsort([axis, kind, order, stable])用于返回 Series 中元素排序后的索引位置的方法Series.argmin([axis, skipna])用于返回 Series 中最小值索引位置的方法Series.argmax([axis, skipna])用于返回 Series…...

Gitlab配置personal access token

1.点击左上角个人账号 -> Preferences 2. 点击左边栏 Access Tokens 3. 点击Add new token &#xff0c;输入token名称&#xff0c;勾选权限&#xff08;注意截至日期 “Expiration date” 可不填&#xff09; 4. 创建成功后&#xff0c;显示token信息&#xff0c;复制到本地…...

【MySQL、Oracle、SQLserver、postgresql】查询多条数据合并成一行

四大数据库多行合并为单行&#xff1a;函数详解与对比 一、MySQL**GROUP_CONCAT()** 函数说明&#xff1a;语法结构&#xff1a;参数解释&#xff1a;示例&#xff1a;注意事项&#xff1a; 二、Oracle**LISTAGG()** 函数说明&#xff1a;语法结构&#xff1a;参数解释&#xf…...

人机交互进化论:解码智能手机81种交互方式背后的用户体验革命

人机交互进化论&#xff1a;解码智能手机81种交互方式背后的用户体验革命 2023年艾瑞咨询报告显示&#xff1a;中国智能手机用户日均触屏交互超2500次&#xff0c;解锁屏幕达76次/天。在这看似简单的点击与滑动背后&#xff0c;隐藏着一场持续演进的人机交互革命。本文将深度解…...

OCPP扩展机制与自定义功能开发:协议灵活性设计与实践 - 慧知开源充电桩平台

OCPP扩展机制与自定义功能开发&#xff1a;协议灵活性设计与实践 引言 OCPP作为开放协议&#xff0c;其核心价值在于平衡标准化与可扩展性。面对不同充电桩厂商的硬件差异、区域能源政策及定制化业务需求&#xff0c;OCPP通过**扩展点&#xff08;Extension Points&#xff09…...

网络编程之TCP协议

传输层协议&#xff1a;UDP和TCP的区别 UDP&#xff1a;用户数据报协议 1.面向数据报 2.无连接 3.不安全&#xff0c;不可靠(尽最大努力交付) TCP:传输控制协议 1.面向数据流(流式套接字) 2.建立连接 3.安全可靠的传输协议 TCP的传输过程 三次握手&#xff1a;TCP建立…...

策略模式的C++实现示例

核心思想 策略模式是一种行为型设计模式&#xff0c;它定义了一系列算法&#xff0c;并将每个算法封装在独立的类中&#xff0c;使得它们可以互相替换。策略模式让算法的变化独立于使用它的客户端&#xff0c;从而使得客户端可以根据需要动态切换算法&#xff0c;而不需要修改…...

keil软件下载安装使用(STM32篇)

一、前言 Keil软件是一款专为嵌入式系统开发设计的集成开发环境&#xff08;IDE&#xff09;&#xff0c;由德国Keil公司创立&#xff0c;后被ARM公司收购并持续更新维护。它集成了代码编辑、编译、调试和项目管理等功能&#xff0c;广泛应用于各类单片机的程序开发&#xff0…...

【简单的C++围棋游戏开发示例】

C围棋游戏开发简单示例&#xff08;控制台版&#xff09; ‌核心代码实现‌ #include <iostream> #include <vector> #include <queue> using namespace std;const int SIZE 9; // 简化棋盘为9x9‌:ml-citation{ref"1" data"citationList&…...

【Python 数据结构 4.单向链表】

目录 一、单向链表的基本概念 1.单向链表的概念 2.单向链表的元素插入 元素插入的步骤 3.单向链表的元素删除 元素删除的步骤 4.单向链表的元素查找 元素查找的步骤 5.单向链表的元素索引 元素索引的步骤 6.单向链表的元素修改 元素修改的步骤 二、Python中的单向链表 ​编辑 三…...

组合逻辑和时序逻辑

组合逻辑 定义 组合逻辑电路是一种输出只取决于当前输入值的电路&#xff0c;即电路的输出状态仅由当前时刻的输入信号组合决定&#xff0c;与电路过去的状态无关。 特点 无记忆功能&#xff1a;组合逻辑电路不具备存储信息的能力&#xff0c;它不会记住之前的输入情况。每次…...

如何有效判断与排查Java GC问题

目录 一、GC的重要性与对性能的影响 &#xff08;一&#xff09;GC对性能的影响简要分析 1.GC暂停与应用停顿 2.GC吞吐量与资源利用率 3.GC对内存管理的作用&#xff1a;资源回收 4.GC策略与优化的选择 &#xff08;二&#xff09;GC的双刃剑 二、GC性能评价标准 &…...

Ubuntu20.04 在离线机器上安装 NVIDIA Container Toolkit

步骤 1.下载4个安装包 Index of /nvidia-docker/libnvidia-container/stable/ nvidia-container-toolkit-base_1.13.5-1_amd64.deb libnvidia-container1_1.13.5-1_amd64.deb libnvidia-container-tools_1.13.5-1_amd64.deb nvidia-container-toolkit_1.13.5-1_amd64.deb 步…...

【流行病学】Melodi-Presto因果关联工具

title: “[流行病学] Melodi Presto因果关联工具” date: 2022-12-08 lastmod: 2022-12-08 draft: false tags: [“流行病学”,“因果关联工具”] toc: true autoCollapseToc: true 阅读介绍 Melodi-Presto: A fast and agile tool to explore semantic triples derived from …...

Android14 OTA差分包升级报Package is for source build

制作好差分包&#xff0c;使用adb线刷模式验证ota升级&#xff0c;出现E:Package is for source build错误 使用adb方式验证 进入recovery模式 adb reboot recovery稍等一会界面会提示 Now send the package you want to apply to the device with "adb sidelaod <…...

PTA L2一些题目

L2-014 列车调度 - 团体程序设计天梯赛-练习集 样例是怎么来的呢&#xff1f;通过题目我们知道每一条轨道的车牌号必须是依次递减的。那么&#xff0c;我们如果让每条轨道尽可能长就能保证轨道数最少------也就是说&#xff0c;我们要尽可能的找最长降序序列。 但是1e5数据量…...

Harbor端口更改||Harbor端口映射

Harbor端口更改|Harbor端口映射 目标&#xff1a;将端口更改为8930 前言 [rootk8s-node1 harbor]# ls common common.sh docker-compose.yml harbor.v2.5.0.tar.gz harbor.yml harbor.yml.tmpl install.sh LICENSE prepare如上是Harbor的文件目录 更改harbor.yml文件…...

基于STM32的智能家居蓝牙系统(论文+源码)

1总体方案设计 本次基于STM32的智能家居蓝牙系统&#xff0c;其系统总体架构如图2.1所示&#xff0c;采用STM32f103单片机作为控制器&#xff0c;通过DHT11传感器实现温湿度检测&#xff0c;MQ-2烟雾传感器实现烟雾检测&#xff0c;光敏电阻实现光照检测&#xff0c;同时将数据…...

视觉Transformer(DETR)

文章目录 DETR总体流程DETR 中 transformer 结构encoderdecoderObeject Query HEADFFNLOSS正负样本分配 简单的demo不足之处 DETR 是首次将 Transformer结构首次应用到视觉 目标检测中&#xff0c;实现 端到端的目标检测。 传统目标检测路线&#xff08;yolo代表&#xff09…...

Linux下学【MySQL】中如何实现:多表查询(配sql+实操图+案例巩固 通俗易懂版~)

每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” 绪论​&#xff1a; 本章是MySQL篇中&#xff0c;非常实用性的篇章&#xff0c;相信在实际工作中对于表的查询&#xff0c;很多时候会涉及多表的查询&#xff0c;在多表查询…...

【Office-Word】如何自动生成中英文目录

1.目录介绍 Word这个自动生成目录非常强大&#xff0c;涉及的功能很琐碎&#xff0c;想要完美的生成目录不仅仅是只会目录这么简单&#xff0c;前后涉及到的大纲级别、目标样式和域代码等操作是比较头疼的。 下面就一步一步开始介绍 2.多级标题级别编号设置 目录想要设置好…...

低代码平台的后端架构设计与核心技术解析

引言&#xff1a;低代码如何颠覆传统后端开发&#xff1f; 在传统开发模式下&#xff0c;一个简单用户管理系统的后端开发需要&#xff1a; 3天数据库设计5天REST API开发2天权限模块对接50个易出错的代码文件 而现代低代码平台通过可视化建模自动化生成&#xff0c;可将开发…...

【微信小程序】每日心情笔记

个人团队的比赛项目&#xff0c;仅供学习交流使用 一、项目基本介绍 1. 项目简介 一款基于微信小程序的轻量化笔记工具&#xff0c;旨在帮助用户通过记录每日心情和事件&#xff0c;更好地管理情绪和生活。用户可以根据日期和心情分类&#xff08;如开心、平静、难过等&#…...

【leetcode hot 100 73】矩阵置零

解法一&#xff1a;&#xff08;使用两个标记变量&#xff09;用矩阵的第一行和第一列代替方法一中的两个标记数组&#xff08;col、row[ ]&#xff1a;第几列、行出现0&#xff09;&#xff0c;以达到 O(1) 的额外空间。 这样会导致原数组的第一行和第一列被修改&#xff0c;…...

【Linux】自定协议和序列化与反序列化

目录 一、序列化与反序列化概念 二、自定协议实现一个加法网络计算器 &#xff08;一&#xff09;TCP如何保证接收方的接收到数据是完整性呢&#xff1f; &#xff08;二&#xff09;自定义协议 &#xff08;三&#xff09;自定义协议的实现 1、基础类 2、序列化与反序列…...

混合专家模型(MoE):高效处理复杂任务的智能架构,DeepSeek性能出色的秘诀

混合专家模型 1. 什么是混合专家模型 混合专家模型&#xff08;Mixture of Experts&#xff0c;简称 MoE&#xff09; 是一种先进的神经网络架构&#xff0c;旨在通过整合多个 专门化的子模型&#xff08;或称为“专家”&#xff09; 的预测来提升整体模型性能。其核心思想是…...

使用 Spring Boot 实现前后端分离的海康威视 SDK 视频监控

使用 Spring Boot 实现前后端分离的海康威视 SDK 视频监控系统&#xff0c;可以分为以下几个步骤&#xff1a; 1. 系统架构设计 前端&#xff1a;使用 Vue.js、React 或 Angular 等前端框架实现用户界面。后端&#xff1a;使用 Spring Boot 提供 RESTful API&#xff0c;负责与…...

C++ 内存序在多线程中的使用

目录 一、内存顺序 二、 指令重排在多线程中的问题 2.1 问题与原因 2.2 解决方案 三、六种内存序 3.1 memory_order_relaxed 3.2 memory_order_consume 3.3 memory_order_acquire 3.4 memory_order_release 3.5 memory_order_acq_rel 3.6 memory_order_seq_cst 一、…...

【MySQL】表的操作

文章目录 &#x1f449;表的操作&#x1f448;创建表查看表修改表删除表 &#x1f449;表的操作&#x1f448; 创建表 create tabletable_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎;说明&#xff1a;…...

【Flink银行反欺诈系统设计方案】3.欺诈的7种场景和架构方案、核心表设计

【Flink银行反欺诈系统设计方案】3.欺诈的7种场景和架构方案、核心表设计 1. **欺诈场景分类与案例说明**1.1 **大额交易欺诈**1.2 **异地交易欺诈**1.3 **高频交易欺诈**1.4 **异常时间交易欺诈**1.5 **账户行为异常**1.6 **设备指纹异常**1.7 **交易金额突变** 2. **普适性软…...

DeepSeek-R1本机部署(VLLM+OpenWebUI)

本文搭建环境 系统&#xff1a;Ubuntu 22.04.4 LTS Python版本&#xff1a;Python 3.10 显卡&#xff1a;RTX 4090D 一、DeepSeek-R1-14b原始模型和q8量化模型 1.从modelscope下载模型 官方原始模型&#xff1a;https://modelscope.cn/models/deepseek-ai/DeepSeek-R1-Di…...

计算机网络软考

1.物理层 1.两个主机之间发送数据的过程 自上而下的封装数据&#xff0c;自下而上的解封装数据&#xff0c;实现数据的传输 2.数据、信号、码元 码元就是数字通信里用来表示信息的基本信号单元。比如在二进制中&#xff0c;用高电平代表 “1”、低电平代表 “0”&#xff0c…...

vscode 查看3d

目录 1. vscode-3d-preview obj查看ok 2. vscode-obj-viewer 没找到这个插件&#xff1a; 3. 3D Viewer for Vscode 查看obj失败 1. vscode-3d-preview obj查看ok 可以查看obj 显示过程&#xff1a;开始是绿屏&#xff0c;过了1到2秒&#xff0c;后来就正常看了。 2. vsc…...

HTML第三节

一.初识CSS 1.CSS定义 A.内部样式表 B.外部样式表 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&g…...

爬虫去重:数据采集时如何进行去重,及去重优化策略

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 1. 去重的核心思路2. 常见的去重方法2.1 基于集合(Set)的去重2.2 基于布隆过滤器(Bloom Filter)的去重2.3 基于数据库的去重2.4 基于文件存储的去重2.5 基于 Redis 的去重3. 去重的优化策略3.1 URL 规范化3.2 分片去…...

IDEA集成DeepSeek,通过离线安装解决无法安装Proxy AI插件问题

文章目录 引言一、安装Proxy AI1.1 在线安装Proxy AI1.2 离线安装Proxy AI 二、Proxy AI中配置DeepSeek2.1 配置本地部署的DeepSeek&#xff08;Ollama方式&#xff09;2.2 通过第三方服务商提供的API进行配置 三、效果测试 引言 许多开发者尝试通过安装Proxy AI等插件将AI能力…...

【电子基础】运算放大器应用笔记(持续更新)

目录 运放应用1&#xff1a; 运放基础知识同相比例运算放大器计算放大倍数 电压比较器 运放应用2&#xff1a;500W调压器同相比例运算放大器计算放大倍数计算平衡电阻 积分电路 运放应用3&#xff1a;逆变电焊机电压跟随器积分电路 加油站1. 为什么比例运算放大电路要加平衡电阻…...

计算机网络核心知识点:信道容量、OSI模型与调制技术详解

目录 一、信道容量与调制技术 奈奎斯特定理&#xff08;无噪声环境&#xff09; 核心公式&#xff1a; 参数说明&#xff1a; 应用场景&#xff1a; 香农定理&#xff08;有噪声环境&#xff09; 核心公式&#xff1a; 参数说明&#xff1a; 应用场景&#xff1a; 奈奎…...

AI赋能企业协作4-NL2Sql技术路线

1.1 对话即服务的一点思考 在数智化转型的过程中&#xff0c;基于即时通信&#xff08;IM&#xff09;的协作平台正悄然成为企业智能化转型的“新基建”。协作平台天然具备高频交互、实时协同和场景化落地的特性&#xff0c;仿佛是为对话式AI量身定制的试验场——员工在熟悉的聊…...