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

用AI学安卓游戏开发1——控制小球上下左右移动2

业务逻辑:初始化小球随机自有移动,遇到屏幕边缘反弹,摇杆介入后小球停止自有移动,按照摇杆控制方向移动。

https://download.csdn.net/download/AnalogElectronic/90453667
https://download.csdn.net/download/AnalogElectronic/90453667

实现效果
在这里插入图片描述

核心代码

package com.example.snakegame2import android.annotation.SuppressLint
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.gestures.detectDragGestures
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlin.math.cos
import kotlin.math.sin
import kotlin.random.Randomclass MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {BallControlScreen()}}@SuppressLint("CoroutineCreationDuringComposition")@Composablefun BallControlScreen() {var ballX by remember { mutableStateOf(200f) }var ballY by remember { mutableStateOf(300f) }var dx by remember { mutableStateOf(0f) }var dy by remember { mutableStateOf(0f) }var canvasWidth by remember { mutableStateOf(400f) }var canvasHeight by remember { mutableStateOf(400f) }// 初始化随机方向val angle = Random.nextFloat() * 360fdx = cos(Math.toRadians(angle.toDouble())).toFloat()dy = sin(Math.toRadians(angle.toDouble())).toFloat()Column(horizontalAlignment = Alignment.CenterHorizontally,verticalArrangement = Arrangement.Center,modifier = Modifier.fillMaxSize()) {// 小球绘制区域Canvas(modifier = Modifier.size(400.dp).padding(20.dp).onSizeChanged { size ->canvasWidth = size.width.toFloat()canvasHeight = size.height.toFloat()},onDraw = {// 绘制蓝色边界线drawRect(color = Color.Blue,topLeft = Offset(0f, 0f),size = Size(size.width, size.height),style = Stroke(width = 2f))// 绘制小球,背景为白色drawCircle(color = Color.Red,radius = 20f,center = Offset(ballX, ballY))})// 虚拟摇杆Joystick(modifier = Modifier.size(100.dp),onJoystickMoved = { x, y ->// 归一化摇杆输入,确保dx和dy的范围在[-1, 1]dx = xdy = y})// 根据摇杆移动更新小球位置GlobalScope.launch(Dispatchers.Main) {while (true) {// 摇杆控制方向,但不改变速度ballX += dx * 10ballY += dy * 10// 碰撞检测if (ballX < 20) {ballX = 20fdx = -dx} else if (ballX > canvasWidth - 20) {ballX = canvasWidth - 20dx = -dx}if (ballY < 20) {ballY = 20fdy = -dy} else if (ballY > canvasHeight - 20) {ballY = canvasHeight - 20dy = -dy}delay(16)}}}}@Composablefun Joystick(modifier: Modifier = Modifier,onJoystickMoved: (Float, Float) -> Unit = { _, _ -> }) {var offsetX by remember { mutableStateOf(0f) }var offsetY by remember { mutableStateOf(0f) }Box(modifier = modifier.pointerInput("Joystick") {detectDragGestures(onDragStart = {offsetX = 0foffsetY = 0fonJoystickMoved(0f, 0f)},onDrag = { change, dragAmount ->val size = sizeval center = Offset((size.width / 2).toFloat(), (size.height / 2).toFloat())val position = change.position - centerval distance = position.getDistance()val maxDistance = size.width / 2if (distance > maxDistance) {val normalizedPosition = if (distance > maxDistance) {val ratio = maxDistance / distanceOffset(position.x * ratio, position.y * ratio)} else {position}offsetX = normalizedPosition.x / maxDistanceoffsetY = normalizedPosition.y / maxDistance} else {offsetX = position.x / maxDistanceoffsetY = position.y / maxDistance}onJoystickMoved(offsetX, offsetY)},onDragEnd = {offsetX = 0foffsetY = 0fonJoystickMoved(0f, 0f)})}) {// 摇杆背景Canvas(modifier = Modifier.fillMaxSize()) {drawCircle(color = Color.Gray,radius = size.width / 2)}// 摇杆帽子Canvas(modifier = Modifier.size(60.dp).align(Alignment.Center),onDraw = {drawCircle(color = Color.Blue,radius = size.width / 2,center = Offset(size.width / 2 + (offsetX * (size.width / 2 - 10)),size.height / 2 + (offsetY * (size.height / 2 - 10))))})}}
}

当然!以下是对代码的详细解释,包括导入的包和每一行代码的作用:

导入的包

import android.annotation.SuppressLint
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.gestures.detectDragGestures
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlin.math.cos
import kotlin.math.sin
import kotlin.random.Random
  • android.annotation.SuppressLint:用于抑制特定的编译器警告。
  • android.os.Bundle:用于传递活动之间的数据。
  • androidx.activity.ComponentActivity:Android 的活动基类,用于创建活动。
  • androidx.activity.compose.setContent:用于设置活动的内容为 Jetpack Compose UI。
  • androidx.compose.foundation.Canvas:用于绘制自定义图形。
  • androidx.compose.foundation.gestures.detectDragGestures:用于检测拖拽手势。
  • androidx.compose.foundation.layout.Arrangement:用于布局子组件的排列方式。
  • androidx.compose.foundation.layout.Box:用于创建一个容器,可以包含多个子组件。
  • androidx.compose.foundation.layout.Column:用于创建垂直排列的布局。
  • androidx.compose.foundation.layout.fillMaxSize:用于使组件填充父容器。
  • androidx.compose.foundation.layout.padding:用于为组件添加内边距。
  • androidx.compose.foundation.layout.size:用于设置组件的大小。
  • androidx.compose.runtime.Composable:用于标记一个可组合函数。
  • androidx.compose.runtime.getValue:用于从 mutableStateOf 获取值。
  • androidx.compose.runtime.mutableStateOf:用于创建一个可变状态。
  • androidx.compose.runtime.remember:用于在组合中记住一个值。
  • androidx.compose.runtime.setValue:用于设置 mutableStateOf 的值。
  • androidx.compose.ui.Alignment:用于对齐组件。
  • androidx.compose.ui.Modifier:用于修改组件的属性。
  • androidx.compose.ui.geometry.Offset:用于表示一个二维坐标。
  • androidx.compose.ui.geometry.Size:用于表示一个大小。
  • androidx.compose.ui.graphics.Color:用于表示颜色。
  • androidx.compose.ui.graphics.drawscope.Stroke:用于绘制边框。
  • androidx.compose.ui.input.pointer.pointerInput:用于处理指针输入。
  • androidx.compose.ui.layout.onSizeChanged:用于在组件大小改变时触发回调。
  • androidx.compose.ui.unit.dp:用于表示密度无关的像素。
  • kotlinx.coroutines.Dispatchers:用于处理协程的调度。
  • kotlinx.coroutines.GlobalScope:用于创建全局协程。
  • kotlinx.coroutines.Job:用于表示协程的作业。
  • kotlinx.coroutines.delay:用于在协程中延迟执行。
  • kotlinx.coroutines.launch:用于启动协程。
  • kotlin.math.cos:用于计算余弦值。
  • kotlin.math.sin:用于计算正弦值。
  • kotlin.random.Random:用于生成随机数。

主活动类

class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {BallControlScreen()}}
}
  • MainActivity:主活动类,继承自 ComponentActivity
  • onCreate:活动的生命周期方法,用于初始化活动。
  • setContent:设置活动的内容为 Jetpack Compose UI,调用 BallControlScreen 函数。

小球控制屏幕

@SuppressLint("CoroutineCreationDuringComposition")
@Composable
fun BallControlScreen() {var ballX by remember { mutableStateOf(200f) }var ballY by remember { mutableStateOf(300f) }var dx by remember { mutableStateOf(0f) }var dy by remember { mutableStateOf(0f) }var canvasWidth by remember { mutableStateOf(400f) }var canvasHeight by remember { mutableStateOf(400f) }// 初始化随机方向val angle = Random.nextFloat() * 360fdx = cos(Math.toRadians(angle.toDouble())).toFloat()dy = sin(Math.toRadians(angle.toDouble())).toFloat()Column(horizontalAlignment = Alignment.CenterHorizontally,verticalArrangement = Arrangement.Center,modifier = Modifier.fillMaxSize()) {// 小球绘制区域Canvas(modifier = Modifier.size(400.dp).padding(20.dp).onSizeChanged { size ->canvasWidth = size.width.toFloat()canvasHeight = size.height.toFloat()},onDraw = {// 绘制蓝色边界线drawRect(color = Color.Blue,topLeft = Offset(0f, 0f),size = Size(size.width, size.height),style = Stroke(width = 2f))// 绘制小球,背景为白色drawCircle(color = Color.Red,radius = 20f,center = Offset(ballX, ballY))})// 虚拟摇杆Joystick(modifier = Modifier.size(100.dp),onJoystickMoved = { x, y ->// 归一化摇杆输入,确保dx和dy的范围在[-1, 1]dx = xdy = y})// 根据摇杆移动更新小球位置GlobalScope.launch(Dispatchers.Main) {while (true) {// 摇杆控制方向,但不改变速度ballX += dx * 10ballY += dy * 10// 碰撞检测if (ballX < 20) {ballX = 20fdx = -dx} else if (ballX > canvasWidth - 20) {ballX = canvasWidth - 20dx = -dx}if (ballY < 20) {ballY = 20fdy = -dy} else if (ballY > canvasHeight - 20) {ballY = canvasHeight - 20dy = -dy}delay(16)}}}
}
  • @SuppressLint("CoroutineCreationDuringComposition"):抑制特定的编译器警告。
  • @Composable:标记一个可组合函数。
  • BallControlScreen:小球控制屏幕的可组合函数。
  • var ballX by remember { mutableStateOf(200f) }:初始化小球的 X 坐标。
  • var ballY by remember { mutableStateOf(300f) }:初始化小球的 Y 坐标。
  • var dx by remember { mutableStateOf(0f) }:初始化小球的水平速度。
  • var dy by remember { mutableStateOf(0f) }:初始化小球的垂直速度。
  • var canvasWidth by remember { mutableStateOf(400f) }:初始化画布的宽度。
  • var canvasHeight by remember { mutableStateOf(400f) }:初始化画布的高度。
  • val angle = Random.nextFloat() * 360f:生成一个随机角度。
  • dx = cos(Math.toRadians(angle.toDouble())).toFloat():将角度转换为水平速度。
  • dy = sin(Math.toRadians(angle.toDouble())).toFloat():将角度转换为垂直速度。
  • Column:创建一个垂直排列的布局。
  • horizontalAlignment = Alignment.CenterHorizontally:水平居中对齐。
  • verticalArrangement = Arrangement.Center:垂直居中排列。
  • modifier = Modifier.fillMaxSize():使组件填充父容器。
  • Canvas:绘制小球和边界线的画布。
  • modifier = Modifier.size(400.dp).padding(20.dp):设置画布的大小和内边距。
  • onSizeChanged:在画布大小改变时更新 canvasWidthcanvasHeight
  • onDraw:绘制蓝色边界线和小球。
  • drawRect:绘制蓝色边界线。
  • drawCircle:绘制小球。
  • Joystick:虚拟摇杆的可组合函数。
  • modifier = Modifier.size(100.dp):设置摇杆的大小。
  • onJoystickMoved:处理摇杆的移动事件。
  • GlobalScope.launch(Dispatchers.Main):启动一个协程,用于更新小球的位置。
  • while (true):无限循环,持续更新小球的位置。
  • ballX += dx * 10:根据摇杆的输入更新小球的 X 坐标。
  • ballY += dy * 10:根据摇杆的输入更新小球的 Y 坐标。
  • if (ballX < 20):检测小球是否碰到左边界。
  • if (ballX > canvasWidth - 20):检测小球是否碰到右边界。
  • if (ballY < 20):检测小球是否碰到上边界。
  • if (ballY > canvasHeight - 20):检测小球是否碰到下边界。
  • delay(16):延迟 16 毫秒,使小球的移动更加平滑。

虚拟摇杆

@Composable
fun Joystick(modifier: Modifier = Modifier,onJoystickMoved: (Float, Float) -> Unit = { _, _ -> }
) {var offsetX by remember { mutableStateOf(0f) }var offsetY by remember { mutableStateOf(0f) }Box(modifier = modifier.pointerInput("Joystick") {detectDragGestures(onDragStart = {offsetX = 0foffsetY = 0fonJoystickMoved(0f, 0f)},onDrag = { change, dragAmount ->val size = sizeval center = Offset((size.width / 2).toFloat(), (size.height / 2).toFloat())val position = change.position - centerval distance = position.getDistance()val maxDistance = size.width / 2if (distance > maxDistance) {val normalizedPosition = if (distance > maxDistance) {val ratio = maxDistance / distanceOffset(position.x * ratio, position.y * ratio)} else {position}offsetX = normalizedPosition.x / maxDistanceoffsetY = normalizedPosition.y / maxDistance} else {offsetX = position.x / maxDistanceoffsetY = position.y / maxDistance}onJoystickMoved(offsetX, offsetY)},onDragEnd = {offsetX = 0foffsetY = 0fonJoystickMoved(0f, 0f)})}) {// 摇杆背景Canvas(modifier = Modifier.fillMaxSize()) {drawCircle(color = Color.Gray,radius = size.width / 2)}// 摇杆帽子Canvas(modifier = Modifier.size(60.dp).align(Alignment.Center),onDraw = {drawCircle(color = Color.Blue,radius = size.width / 2,center = Offset(size.width / 2 + (offsetX * (size.width / 2 - 10)),size.height / 2 + (offsetY * (size.height / 2 - 10))))})}
}
  • @Composable:标记一个可组合函数。
  • Joystick:虚拟摇杆的可组合函数。
  • modifier: Modifier = Modifier:设置摇杆的修饰符。
  • onJoystickMoved: (Float, Float) -> Unit = { _, _ -> }:处理摇杆的移动事件。
  • var offsetX by remember { mutableStateOf(0f) }:初始化摇杆的水平偏移量。
  • var offsetY by remember { mutableStateOf(0f) }:初始化摇杆的垂直偏移量。
  • Box:创建一个容器,包含摇杆的背景和帽子。
  • modifier = modifier.pointerInput("Joystick"):处理摇杆的指针输入。
  • detectDragGestures:检测拖拽手势。
  • onDragStart:在拖拽开始时重置偏移量。
  • onDrag:在拖拽过程中更新偏移量。
  • onDragEnd:在拖拽结束时重置偏移量。
  • Canvas:绘制摇杆的背景。
  • drawCircle:绘制灰色的摇杆背景。
  • Canvas:绘制摇杆的帽子。
  • drawCircle:绘制蓝色的摇杆帽子。

希望这个详细解释能帮助你更好地理解代码!如果有任何问题或需要进一步优化,请随时告诉我。

相关文章:

用AI学安卓游戏开发1——控制小球上下左右移动2

业务逻辑&#xff1a;初始化小球随机自有移动&#xff0c;遇到屏幕边缘反弹&#xff0c;摇杆介入后小球停止自有移动&#xff0c;按照摇杆控制方向移动。 https://download.csdn.net/download/AnalogElectronic/90453667 https://download.csdn.net/download/AnalogElectronic…...

计算机毕业设计SpringBoot+Vue.js医院挂号就诊系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

说一下redis事务底层原理

Redis事务 1. 事务的基本流程 Redis 事务通过 MULTI、EXEC、WATCH 等命令实现&#xff0c;底层原理可以分为以下几个步骤&#xff1a; (1) MULTI 命令 当客户端发送 MULTI 命令时&#xff0c;Redis 会将客户端标记为“事务模式”。在事务模式下&#xff0c;客户端发送的所有…...

eNSP中AR2220、AR201、AR1220、AR2240、AR3260、Router、NE40E、NE5000E、NE9000、CX路由器学习笔记

eNSP中常见华为路由器型号的接口特性详解及横向对比&#xff0c;重点关注接口类型、扩展能力和适用场景&#xff1a; 缩写解释&#xff1a; LPU&#xff1a;Line Processing Unit&#xff08;线路处理单元&#xff09; SPU&#xff1a;Service Processing Unit&#xff08;业务…...

FastGPT 引申:借鉴 FastGPT 基于MySQL + ES 实现知识库(含表结构以及核心代码)

文章目录 FastGPT 引申&#xff1a;借鉴 FastGPT 基于MySQL ES 实现知识库&#xff08;含表结构以及核心代码&#xff09;一、整体思路二、存储结构2.1 MySQL 表结构(1) knowledge_base_dataset(2) knowledge_base_data(3) knowledge_base_index(4) ai_kb_relation 2.2 Elasti…...

WPF+WebView 基础

1、基于.NET8&#xff0c;通过NuGet添加Microsoft.Web.WebView2。 2、MainWindow.xaml代码如下。 <Window x:Class"Demo.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/win…...

skia的学习与研究

最近再研究skia,特地发一篇文章来记录一下。Skia版本更新非常频繁&#xff0c;大概每四周就会创建一个新版本&#xff0c;此版本持续维护六周左右就会被标记为稳定分支&#xff1b; skia三套渲染&#xff1a; 无gpu硬件如嵌入式设备&#xff0c;使用CPU渲染&#xff0c;使用…...

Linux--基础命令3

大家好&#xff0c;今天我们继续学习Linux的基础命令 mv命令 mv命令是move的缩写&#xff0c;可以用来移动文件或者将文件改名 move(rename) files&#xff0c;经常⽤来备份⽂件或者目录 语法: mv [ 选项 ] 源⽂件或目录 目标⽂件或目录 mv src[文件、目录] dst[路径、文…...

[LeetCode]day33 150.逆波兰式求表达值 + 239.滑动窗口最大值

逆波兰式求表达值 题目链接 题目描述 给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意&#xff1a; 有效的算符为 ‘’、‘-’、‘*’ 和 ‘/’ 。 每个操作数&#xff08;运…...

记一次误禁用USB导致键盘鼠标失灵的修复过程

背景说明 在电脑上插入了一个USB hub&#xff0c;然后弹窗提示&#xff1a;“集线器端口上出现电涌”&#xff0c;点开让选择“重置”或者“关闭”&#xff0c;不小心点了关闭&#xff0c;结果这个usb口就被关了&#xff0c;再插任何东西都没反应&#xff0c;找了很多办法都恢…...

node项目前后端密码加密传输及存储方案

前端&#xff1a;使用crypto-js库的SHA256算法&#xff0c;包含用户注册时使用的邮箱加上自定义的secret key生成盐值&#xff0c;接着使用PBKDF2算法进行加密。最后将加密后的密码传给后端。 import CryptoJS from "crypto-js";export const encryptPassword (ema…...

GIt分支合并

分支 1: C0 → C1 → C2 → C3&#xff08;最新&#xff09; 分支 2: C0 → C4 → C5 → C6&#xff08;最新&#xff09;1. 找到共同父节点 C0 Git 会先找出 branch1 和 branch2 的共同祖先节点 C0。这通常借助 git merge-base 命令达成&#xff0c;虽然在日常使用 git merge…...

Python 入门教程(2)搭建环境 | 2.3、VSCode配置Python开发环境

文章目录 一、VSCode配置Python开发环境1、软件安装2、安装Python插件3、配置Python环境4、包管理5、调试程序 前言 Visual Studio Code&#xff08;简称VSCode&#xff09;以其强大的功能和灵活的扩展性&#xff0c;成为了许多开发者的首选。本文将详细介绍如何在VSCode中配置…...

linux一些使用技巧

linux一些使用技巧 文件名称和路径的提取切换用户执行当前脚本一行演示单引号与双引号的使用curl命令仅输出响应头信息,不输出body体文件名称和路径的提取 文件路径为 /tmp/tkgup/test.sh 方式获取文件名获取文件路径获取文件全路径方式一basename ${file}dirname ${file}real…...

GPU/CUDA 发展编年史:从 3D 渲染到 AI 大模型时代(上)

目录 文章目录 目录1960s~1999&#xff1a;GPU 的诞生&#xff1a;光栅化&#xff08;Rasterization&#xff09;3D 渲染算法的硬件化实现之路学术界算法研究历程工业界产品研发历程光栅化技术原理光栅化技术的软件实现&#xff1a;OpenGL 3D 渲染管线设计1. 顶点处理&#xff…...

chrome Vue.js devtools 提示不支持该扩展组件,移除

可能是版本不兼容&#xff0c;可以重新安装&#xff0c;推荐网址极简插件官网_Chrome插件下载_Chrome浏览器应用商店 直接搜索vue&#xff0c;下载旧版&#xff0c;vue2、vue3都支持&#xff0c;上面那个最新版本试了下&#xff0c;vue2的肯定是不能用...

大模型工程师学习日记(十):基于 LangChain 构建向量存储和查询 Qdrant

Qdrant介绍 Qdrant&#xff08;读作&#xff1a;quadrant /kwɑdrənt/ n. 象限&#xff1b;象限仪&#xff1b;四分之一圆&#xff09;是一个向量相似度搜索引擎。它提供了一个生产就绪的服务&#xff0c;具有方便的 API 来存储、搜索和管理点 - 带有附加载荷的向量。Qdrant专…...

Spring Boot拦截器(Interceptor)与过滤器(Filter)详细教程

Spring Boot拦截器&#xff08;Interceptor&#xff09;与过滤器&#xff08;Filter&#xff09;详细教程 目录 概述 什么是拦截器&#xff08;Interceptor&#xff09;&#xff1f;什么是过滤器&#xff08;Filter&#xff09;&#xff1f;两者的核心区别 使用场景 拦截器的典…...

ffmpeg源码编译支持cuda

1.安装cuda CUDA Toolkit 11.3 Downloads | NVIDIA Developer 在选择组件的时候&#xff0c;将CUDA中的Nsight VSE和Visual Studio Integration取消勾选 不然会安装失败 2.编译ffmpeg 把cuda编译宏定义开启&#xff0c;再编译avcodec 3.编译livavutil报错struct "Cuda…...

【Linux 系统层面应急响应并分析日志溯源的流程】

Linux 层面响应安全事件并分析日志溯源的流程 一、事件响应核心流程1. 初步隔离与现场保护2. 关键日志收集与备份 二、日志分析工具链与溯源步骤1. 基础日志分析工具2. 高级日志分析框架3. 恶意行为深度检测4. 时间线重构工具 三、关键注意事项1. 日志可信度验证2. 攻击者反取证…...

【笔记ing】python

1 Python基础概念及环境搭建 1.1 python简介及发展史 之父Guido van Rossum。ABC语言的替代品。Python提供了高效的数据结构&#xff0c;还能简单有效地面向对象编程。Python语法和动态类型&#xff0c;以及解释性语言的本质&#xff0c;使之成为多数平台上写脚本和快速开发应…...

QT 作业 day4

作业 代码 Widget.h class Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();private slots:// 槽函数void on_listWidget_itemDoubleClicked(QListWidgetItem *item);private:Ui::Widget *ui; }; #endif Widget.cpp Widget::Widget(QW…...

flink和yarn和mpp架构区别

为了全面理解 Flink 架构、YARN 架构和 MPP 架构的区别&#xff0c;我们从多个维度进行分析。以下是详细的对比&#xff1a; 1. 设计目标 架构设计目标Flink实时数据流处理和批处理&#xff0c;支持低延迟、高吞吐量的实时分析。YARN作为 Hadoop 的资源管理框架&#xff0c;负…...

DeepSeek崛起:如何在云端快速部署你的专属AI助手

在2025年春节的科技盛宴上&#xff0c;DeepSeek因其在AI领域的卓越表现成为焦点&#xff0c;其开源的推理模型DeepSeek-R1擅长处理多种复杂任务&#xff0c;支持多语言处理&#xff0c;并通过搜索引擎获取实时信息。DeepSeek因其先进的自然语言处理技术、广泛的知识库和高性价比…...

高频 SQL 50 题(基础版)_1141. 查询近30天活跃用户数

1141. 查询近30天活跃用户数 select activity_date day,count(distinct user_id) active_users from Activity where (activity_date<2019-07-27 and activity_date>DATE_sub(2019-07-27,INTERVAL 30 DAY)) group by(activity_date)...

DRMPlaneType里有VIG, DMA,和RGB三种类型,这是不是说明DRMPlane就是代表DPU里的Pipeline

DRMPlane 代表了 DPU&#xff08;Display Processing Unit&#xff09; 里的 Pipeline&#xff08;数据通路&#xff09;&#xff0c;不同的 DRMPlaneType 对应 DPU 内部的不同 渲染/合成管线。 &#x1f4cc; DRMPlaneType 与 DPU Pipeline 的关系 在 高通&#xff08;Qualco…...

not support ClassForName

com.alibaba.fastjson2.JSONException: not support ClassForName : java.lang.String, you can config JSONReader.Feature.SupportClassForName 官方说明中提到默认关闭&#xff0c; 可通过配置开启 JSON.config(JSONReader.Feature.SupportClassForName);...

为什么要学习数据结构与算法

今天&#xff0c;我向大家介绍一门非常重要的课程——《数据结构与算法》。这门课不仅是计算机学科的核心&#xff0c;更是每一位开发者从“小白”迈向“高手”的必经之路。 1、为什么要学习数据结构与算法 总的来说&#xff0c;数据结构与算法是&#xff1a; 求职的“敲门砖”…...

从浏览器输入网址,到页面展示都发生了什么?

查询缓存 其实从填写上url按下回车后&#xff0c;我们就进入了第一步就是 DNS 解析过程&#xff0c;首先需要找到这个 url 域名的服务器 ip,为了寻找这个 ip&#xff0c;浏览器首先会寻找缓存&#xff0c;查看缓存中是否有记录缓存的查找记录为&#xff1a;浏览器缓存>系统…...

Octave3D 关卡设计插件

课程参考链接 这位大佬有在视频合集中有详细的讲解&#xff0c;个人体验过&#xff0c;感觉功能很强大 https://www.bilibili.com/video/BV1Kq4y1C72P/?share_sourcecopy_web&vd_source0a41d8122353e3e841ae0a39908c2181 Prefab资源管理 第一步 在场景中创建一个空物体…...

JavaWeb后端基础(4)

这一篇就开始是做一个项目了&#xff0c;在项目里学习&#xff0c;我主要记录在学习过程中遇到的问题&#xff0c;以及一些知识点 Restful风格 一种软件架构风格 在REST风格的URL中&#xff0c;通过四种请求方式&#xff0c;来操作数据的增删改查。 GET &#xff1a; 查询 …...

【计算机网络】IP协议

目录 1. 协议头格式 2. 网段划分 3. 特殊的IP 4. 公网IP && 内网IP 总结 网络层的IP协议主要解决的是什么问题&#xff1f;——将数据包从B主机发送给C主机&#xff1b;传输层协议tcp提供可靠的策略&#xff1b;网络层IP协议提供数据数据传输的能力&#xff1b; 发…...

Libgdx游戏开发系列教程(2)——接水滴游戏实现

目录 游戏玩法 步骤 1.创建项目 2.添加资源文件 3.设置游戏配置 4.加载资源文件 5.播放背景音乐 6.绘制图形 7.雨滴下落实现 8.判断雨滴是否掉落在桶里 9.键盘控制改变桶位置 10.随机雨滴 打包 本文使用Kotlin语言开发 通过本文的学习可以初步了解以下基础知识的…...

【2025rust笔记】超详细,小白,rust基本语法

一、常见cargo命令 查看cargo版本 cargo --version创建cargo项目 create new demo_name构建编译项目 cargo build运行项目 cargo run检查项目代码 cargo check (比cargobuild快)发布构建项目 cargo build --release 电子markdown/pdf格式 二、小demo-----猜数游戏 1、print…...

将 SSH 密钥添加到 macOS 的钥匙串中

git提交代码时&#xff0c;如果SSH密码并未免密&#xff0c;每次拉取&#xff0c;上传操作时都需要密码输入&#xff0c; 可将SSH密钥添加到钥匙串中 git config --global credential.helper store报错&#xff1a; WARNING: The -K and -A flags are deprecated and have bee…...

Gpt翻译完整版

上一篇文章收到了很多小伙伴的反馈&#xff0c;总结了一下主要以下几点&#xff1a; 1. 说不知道怎么调api 2. 目前只是把所有的中文变成了英文&#xff0c;如果想要做多语言还需要把这些关键字提炼出来成放到message_zh.properties和message_en.properties文件中&#xff0c…...

CC++的内存管理

目录 1、C/C内存划分 C语言的动态内存管理 malloc calloc realloc free C的动态内存管理 new和delete operator new函数和operator delete函数 new和delete的原理 new T[N]原理 delete[]的原理 1、C/C内存划分 1、栈&#xff1a;存有非静态局部变量、函数参数、返回…...

HTTP 状态代码 501 502 问题

问题 单个客户端有时会出现 报错 501 或 502 如下&#xff1a; System.Net.Http.HttpRequestException: Response status code does not indicate success: 501 (Not Implemented) 分析 可以排除 服务器无法处理的问题&#xff08;测试发现 一个客户端报错&#xff0c;不会影响…...

virtio_video virtio_snd

在 Qualcomm 平台的 虚拟机&#xff08;VM&#xff09; 环境中&#xff0c;qcom,virtio_snd 是 VirtIO 机制下的 音频 DMA 共享 设备节点&#xff0c;它用于 虚拟机和宿主机&#xff08;Hypervisor&#xff09;之间共享音频数据&#xff0c;类似于标准的 VirtIO 声音设备。 1️…...

【大模型安全】大模型安全概述

【大模型安全】大模型安全概述 1.大模型安全目前的关键挑战技术安全合规安全 2.大语言模型的安全隐患与主要风险点3.大语言模型与国家安全风险4.大语言模型的信息安全原则 1.大模型安全目前的关键挑战 技术安全 1、数据的安全与合理利用 大语言模型通常需要处理大量敏感数据…...

基于 vLLM 部署 LSTM 时序预测模型的“下饭”(智能告警预测与根因分析部署)指南

Alright,各位看官老爷们,准备好迎接史上最爆笑、最通俗易懂的 “基于 vLLM 部署 LSTM 时序预测模型的智能告警预测与根因分析部署指南” 吗? 保证让你笑出猪叫,看完直接变身技术大咖!🚀😂 咱们今天的主题,就像是要打造一个“智能运维小管家”! 这个小管家,不仅能提…...

深入理解三色标记、CMS、G1垃圾回收器

三色标记算法 简介 三色标记算法是一种常见的垃圾收集的标记算法&#xff0c;属于根可达算法的一个分支&#xff0c;垃圾收集器CMS&#xff0c;G1在标记垃圾过程中就使用该算法 三色标记法&#xff08;Tri-color Marking&#xff09;是垃圾回收中用于并发标记存活对象的核心算…...

【车规芯片】如何引导时钟树生长方向

12nm车规DFTAPR项目中&#xff0c;我们可以看到&#xff0c;绝大部分的sink都受控于xxxx_tessent_occ_clk_cpu_inst/tessent_persistent_cell_clock_out_mux/C10_ctmi_1这个mux&#xff0c;这是我们DFT设计结果&#xff1a; 这里我们重新打开place的数据 Anchor&#xff0c;也就…...

基于Spring Boot的企业车辆管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

Spring Boot 中短时间连续请求时出现Cookie获取异常问题

Spring Boot 中短时间连续请求时出现Cookie获取异常问题 一、问题描述&#xff1a;异步线程操作导致请求复用时 Cookie 解析失败1. 场景背景2. 问题根源 二、问题详细分析1. 场景重现2. 问题分析 三、如何避免影响下一次请求&#xff1f;✅方式 1&#xff1a;在主线程提前复制 …...

轮播图案例

&#xff08;1&#xff09;、搭建轮播图的结构 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>轮播图结构</title><!-- <script src"../js/tools.js"></script> --…...

通俗版解释:分布式和微服务就像开餐厅

一、分布式系统&#xff1a;把大厨房拆成多个小厨房 想象你开了一家超火爆的餐厅&#xff0c;但原来的厨房太小了&#xff1a; 问题&#xff1a;一个厨师要同时切菜、炒菜、烤面包&#xff0c;手忙脚乱还容易出错。 解决方案&#xff1a; 拆分成多个小厨房&#xff08;分布式…...

【开源-常用C/C++命令行解析库对比】

以下是几种常用的C/C命令行解析库的对比表格&#xff0c;以及它们的GitHub开源库地址&#xff1a; 库名称语言特点是否支持子命令是否支持配置文件是否支持自动生成帮助信息GitHub地址ClaraC11及以上单一头文件&#xff0c;轻量级&#xff0c;非异常错误处理&#xff0c;自动类…...

JavaEE_多线程(一)

目录 1. 为啥要有线程1.1 线程是什么1.2 进程和线程的区别1.3 Java如何进行多线程编程 2 使用线程2.1 创建线程2.2 Thread类的几个常见方法和属性2.2.1 Thread常见构造方法2.2.2 Thread常见属性2.2.3 常见其他方法 2.3 终止一个线程2.3.1 通过共享的标记位来进行沟通2.3.2 调用…...

table 拖拽移动

表格拖拽 Sortable.js中文网|配置 <!-- 教务处 --><template><div class"but"><el-button click"mergeAndPrintArrays()" type"primary">保存数据</el-button><el-button click"restoration()" t…...