【Rust光年纪】探索Rust游戏开发世界:六款引人注目的游戏引擎与框架
探索Rust游戏开发引擎:选择合适的工具
前言
随着Rust语言的不断发展,越来越多的游戏开发者开始将其视作构建游戏引擎和框架的理想选择。本文将介绍几个用于Rust语言的游戏引擎和框架,分别对其核心功能、使用场景、安装与配置以及API进行概览和比较。
欢迎订阅专栏:Rust光年纪
文章目录
- 探索Rust游戏开发引擎:选择合适的工具
- 前言
- 1. amethyst:一个用于Rust语言的游戏引擎
- 1.1 简介
- 1.1.1 核心功能
- 1.1.2 使用场景
- 1.2 安装与配置
- 1.2.1 安装指南
- 1.2.2 基本配置
- 1.3 API 概览
- 1.3.1 游戏实体管理
- 1.3.2 渲染系统
- 2. bevy:一个用于Rust语言的数据驱动的游戏引擎
- 2.1 简介
- 2.1.1 核心功能
- 2.1.2 使用场景
- 2.2 安装与配置
- 2.2.1 安装指南
- 2.2.2 基本配置
- 2.3 API 概览
- 2.3.1 数据驱动设计
- 2.3.2 实体组件系统
- 3. Piston:一个用于Rust语言的模块化游戏引擎
- 3.1 简介
- 3.1.1 核心功能
- 3.1.2 使用场景
- 3.2 安装与配置
- 3.2.1 安装指南
- 3.2.2 基本配置
- 3.3 API 概览
- 3.3.1 事件处理
- 3.3.2 图形绘制
- 4.2.2 基本配置
- 4.3 API 概览
- 4.3.1 场景管理
- 4.3.2 光照和材质
- 5. ggez:一个用于Rust语言的轻量级游戏框架
- 5.1 简介
- 5.1.1 核心功能
- 5.1.2 使用场景
- 5.2 安装与配置
- 5.2.1 安装指南
- 5.2.2 基本配置
- 5.3 API 概览
- 5.3.1 窗口管理
- 5.3.2 输入处理
- 6. specs:一个用于Rust语言的实体-组件系统
- 6.1 简介
- 6.1.1 核心功能
- 6.1.2 使用场景
- 6.2 安装与配置
- 6.2.1 安装指南
- 6.2.2 基本配置
- 6.3 API 概览
- 6.3.1 实体创建和管理
- 6.3.2 组件添加和处理
- 总结
1. amethyst:一个用于Rust语言的游戏引擎
1.1 简介
Amethyst是一个用于Rust语言的数据驱动游戏引擎,它提供了丰富的工具和功能来开发高性能的游戏。
1.1.1 核心功能
- 强大的实体组件系统
- 灵活的渲染管道
- 内置的2D和3D物理引擎
- 支持多平台部署
1.1.2 使用场景
Amethyst适用于开发各种类型的游戏,包括2D和3D游戏以及虚拟现实应用程序。
1.2 安装与配置
1.2.1 安装指南
首先需要安装Rust编程语言的工具链,然后可以使用Cargo(Rust的包管理器)来创建一个新的Amethyst项目。具体安装步骤可以参考官方安装指南。
1.2.2 基本配置
创建一个新的Amethyst项目后,可以通过Cargo.toml文件添加amethyst依赖:
[dependencies]
amethyst = "0.15"
1.3 API 概览
1.3.1 游戏实体管理
Amethyst的实体组件系统允许开发者轻松地创建和管理游戏实体。以下是一个简单的示例代码:
use amethyst::{ecs::{Component, DenseVecStorage, Entity, World},prelude::*,
};struct Position {x: f32,y: f32,
}impl Component for Position {type Storage = DenseVecStorage<Self>;
}fn main() -> amethyst::Result<()> {let mut world = World::new();let entity = world.create_entity().with(Position { x: 0.0, y: 0.0 }).build();Ok(())
}
1.3.2 渲染系统
Amethyst内置了强大的渲染系统,可以轻松地处理2D和3D渲染。以下是一个简单的2D渲染示例:
use amethyst::{prelude::*,renderer::{RenderingBundle, RenderToWindow, types::DefaultBackend},
};fn main() -> amethyst::Result<()> {amethyst::start_logger(Default::default());let game_data = GameDataBuilder::default();let mut game = Application::build("./", ExampleState)?.build(game_data)?;game.run();Ok(())
}
更多关于Amethyst的API和使用方法,请参阅官方文档。
2. bevy:一个用于Rust语言的数据驱动的游戏引擎
2.1 简介
Bevy 是一个使用 Rust 语言开发的数据驱动游戏引擎,它旨在提供高性能、易用和灵活的游戏开发体验。
2.1.1 核心功能
- 数据驱动设计
- 实体组件系统
- 支持并行处理
- 灵活的插件系统
2.1.2 使用场景
Bevy 适用于开发2D和3D游戏,尤其适合需要高性能和并行处理的游戏项目。
2.2 安装与配置
2.2.1 安装指南
安装 Rust 编程语言的工具链,然后通过 Cargo 包管理器添加 Bevy 依赖即可开始使用 Bevy。
cargo new my_game
cd my_game
编辑 Cargo.toml 文件,并添加 Bevy 依赖:
[dependencies]
bevy = "0.5"
2.2.2 基本配置
在项目根目录创建 main.rs 文件,并编写基本的 Bevy 配置代码:
use bevy::prelude::*;fn main() {App::build().add_plugins(DefaultPlugins).run();
}
2.3 API 概览
2.3.1 数据驱动设计
Bevy 的数据驱动设计使得系统更容易进行并行处理,提高了游戏的性能和扩展性。通过 ECS(Entity Component System)架构,Bevy 可以轻松管理游戏中的实体和组件,使得游戏开发更加灵活。
2.3.2 实体组件系统
Bevy 提供了强大的实体组件系统,通过简单的 Rust 结构体和注解就可以定义游戏中的实体和组件。以下是一个简单的示例:
use bevy::prelude::*;struct Position(Vec2);
struct Velocity(Vec2);fn update_positions(mut query: Query<(&mut Position, &Velocity)>) {for (mut position, velocity) in query.iter_mut() {position.0 += velocity.0;}
}fn main() {App::build().add_system(update_positions.system()).run();
}
以上代码定义了 Position 和 Velocity 两个组件,并编写了一个系统来更新位置信息。完整的示例代码可以在 Bevy 的官方文档中找到:Bevy 示例
3. Piston:一个用于Rust语言的模块化游戏引擎
Piston 是一个适用于 Rust 编程语言的游戏引擎,它提供了丰富的功能和模块化的设计,使得开发者可以灵活地构建游戏和交互式应用程序。
3.1 简介
3.1.1 核心功能
Piston 游戏引擎的核心功能包括:
- 提供 2D 和 3D 图形渲染功能
- 处理用户输入和事件
- 支持音频播放
- 内置游戏物理引擎
- 支持图像处理和纹理管理
- 模块化的设计,便于扩展和定制
3.1.2 使用场景
Piston 游戏引擎适用于开发各种类型的游戏和交互式应用程序,包括但不限于:
- 2D 和 3D 游戏
- 模拟器和仿真应用
- 数据可视化工具
- 创意编程项目
3.2 安装与配置
3.2.1 安装指南
你可以通过 Cargo,在 Rust 的包管理器中,将 Piston 引入到你的项目中。首先,在 Cargo.toml 文件中添加 Piston 的依赖:
[dependencies]
piston = "0.46"
然后在代码中引入 Piston 库:
extern crate piston;
更多关于安装和更新 Piston 的信息,你可以访问 Piston GitHub 页面。
3.2.2 基本配置
在使用 Piston 引擎前,你需要确保 Rust 环境已经配置好。如果你还没有 Rust 开发环境,你可以按照官方文档 Getting Started 来进行安装和配置。
3.3 API 概览
3.3.1 事件处理
Piston 提供了丰富的事件处理机制,可以轻松地管理用户输入和系统事件。下面是一个简单的示例来捕获并处理鼠标点击事件:
extern crate piston_window;use piston_window::*;fn main() {let mut window: PistonWindow = WindowSettings::new("Hello Piston!", [640, 480]).exit_on_esc(true).build().unwrap();while let Some(event) = window.next() {if let Some(Button::Mouse(MouseButton::Left)) = event.press_args() {println!("Left mouse button pressed!");}}
}
上述代码创建了一个窗口,并在其中捕获并处理了鼠标左键的点击事件。更多关于事件处理的信息,你可以查看 Piston Event Loop。
3.3.2 图形绘制
Piston 提供了强大的图形绘制功能,支持2D和3D图形渲染。下面是一个简单的示例来创建一个基本的矩形并绘制到窗口中:
extern crate piston_window;use piston_window::*;fn main() {let mut window: PistonWindow = WindowSettings::new("Hello Piston!", [640, 480]).exit_on_esc(true).build().unwrap();while let Some(event) = window.next() {window.draw_2d(&event, |c, g, _| {clear([1.0; 4], g); // 清空窗口为白色rectangle([1.0, 0.0, 0.0, 1.0], // RGBA颜色[100.0, 100.0, 50.0
## 4. rg3d:一个用于Rust语言的渲染引擎### 4.1 简介
rg3d 是一个基于 Rust 语言的现代化、高性能的渲染引擎,它提供了丰富的功能和灵活的使用场景,适用于游戏开发和实时应用程序的构建。#### 4.1.1 核心功能
- 支持实时渲染和物理模拟
- 多平台支持,可在 Windows、Linux 和 MacOS 上运行
- 内置的编辑器工具
- 高度可定制化的用户界面系统#### 4.1.2 使用场景
rg3d 可以用于开发各种类型的游戏和虚拟现实应用程序,包括动作游戏、模拟器、交互式应用等。### 4.2 安装与配置
#### 4.2.1 安装指南
你可以通过 Cargo,在你的 Cargo.toml 文件中添加以下依赖来安装 rg3d:```toml
[dependencies]
rg3d = "0.21"
更多详细的安装说明,请参考 rg3d 官方文档。
4.2.2 基本配置
在开始使用 rg3d 之前,你需要准备好 Rust 开发环境。同时,确保你的项目可以链接到 OpenGL 和 OpenAL 库。
4.3 API 概览
4.3.1 场景管理
rg3d 提供了强大的场景管理功能,允许你创建和管理游戏中的不同场景。下面是一个简单的例子,演示了如何创建一个场景并向其中添加一个立方体:
use rg3d::engine::framework::{Framework, GameEngine};
use rg3d::engine::resource_manager::ResourceManager;
use rg3d::scene::base::BaseBuilder;fn main() {// 创建游戏引擎let mut engine = GameEngine::new_default("example");// 创建资源管理器let mut resource_manager = ResourceManager::new(engine.resource_manager.clone());// 创建场景let scene = BaseBuilder::new().with_children(&[BaseBuilder::new().build()]).build(&mut engine);// 向场景中添加立方体BaseBuilder::new().with_local_transform(Default::default(),Default::default(),cgmath::Vector3::new(0.0, 0.0, 0.0),).build(&mut engine);// 运行引擎Framework::<()>::new().run(engine);
}
4.3.2 光照和材质
rg3d 支持复杂的光照和材质效果。以下示例演示了如何创建一个带有纹理和法线贴图的材质,并将其应用于立方体:
use rg3d::material::Material;// 创建一个标准材质
let mut material = Material {albedo: Some(resource_manager.request_texture("path_to_albedo_texture.png")),normal: Some(resource_manager.request_texture("path_to_normal_texture.png")),..Default::default()
};// 将材质应用于立方体
cube.set_material(material);
这只是 rg3d 引擎所提供功能的一小部分,更多信息请查阅 rg3d 官方文档。
5. ggez:一个用于Rust语言的轻量级游戏框架
5.1 简介
ggez 是一个基于 Rust 语言的轻量级游戏框架,旨在提供简单易用的方式来创建2D游戏。它封装了许多常见的游戏开发任务,如处理输入、渲染图形和管理资源等。
5.1.1 核心功能
- 提供简洁的 API 接口,方便快速搭建游戏原型
- 支持跨平台开发,可在 Windows、macOS 和 Linux 上运行
- 集成了图形渲染器和事件处理器,降低开发者的工作量
5.1.2 使用场景
ggez 适用于希望使用 Rust 语言开发2D游戏的开发者。由于其简单易用的特点,也可以用于教育和学习目的。
5.2 安装与配置
5.2.1 安装指南
你可以通过 Cargo(Rust 的包管理工具)来安装 ggez。在项目的 Cargo.toml 文件中添加以下依赖:
[dependencies]
ggez = "0.6"
更多安装指南请参考 ggez 官方文档
5.2.2 基本配置
为了开始使用 ggez,你需要创建一个窗口和一个事件循环。下面是一个简单的例子:
use ggez::{event, ContextBuilder, GameResult};
use ggez::graphics;struct MainState {}impl MainState {fn new() -> Self {MainState {}}
}impl event::EventHandler for MainState {fn update(&mut self, _ctx: &mut ggez::Context) -> GameResult<()> {Ok(())}fn draw(&mut self, ctx: &mut ggez::Context) -> GameResult<()> {graphics::clear(ctx, [0.1, 0.2, 0.3, 1.0].into());// 绘制代码graphics::present(ctx)}
}fn main() -> GameResult {let (ctx, event_loop) = ContextBuilder::new("my_game", "author").build()?;let game = MainState::new();event::run(ctx, event_loop, game)
}
5.3 API 概览
5.3.1 窗口管理
ggez 提供了窗口管理相关的功能,包括创建窗口、设置窗口标题和大小等。通过 ContextBuilder 可以对窗口进行配置,例如:
let (ctx, event_loop) = ggez::ContextBuilder::new("my_game", "author").window_setup(ggez::conf::WindowSetup::default().title("My Awesome Game")).window_mode(ggez::conf::WindowMode::default().dimensions(800.0, 600.0)).build()?;
5.3.2 输入处理
ggez 支持处理鼠标、键盘和游戏手柄等输入设备。你可以通过 event::EventHandler trait 来处理输入事件,例如:
impl event::EventHandler for MainState {fn key_down_event(&mut self,ctx: &mut ggez::Context,keycode: KeyCode,_keymods: KeyMods,repeat: bool,) {match keycode {KeyCode::Space => {// 处理空格键按下事件}_ => (),};}
}
更多关于 ggez API 的信息,请查阅 ggez 官方文档。
6. specs:一个用于Rust语言的实体-组件系统
6.1 简介
specs 是一个适用于 Rust 语言的实体-组件系统(Entity-Component System,ECS),它旨在提供高性能和灵活性。通过 specs,开发者可以轻松地构建游戏引擎中的实体和组件,并进行高效的管理。
6.1.1 核心功能
specs 的核心功能包括:
- 实体创建和管理
- 组件添加和处理
- 系统处理
6.1.2 使用场景
specs 可以广泛应用于游戏开发领域,尤其适用于需要大量动态实体和组件交互的场景。此外,specs 还可以用于模拟器、数据驱动的应用程序等领域。
6.2 安装与配置
6.2.1 安装指南
你可以在 Cargo.toml 文件中添加 specs 依赖:
[dependencies]
specs = "0.16"
然后使用 cargo build 命令来安装 specs。
更多安装信息请参考官方文档:specs 安装与配置
6.2.2 基本配置
基本配置部分内容省略。
6.3 API 概览
6.3.1 实体创建和管理
use specs::{World, Entity, Component, VecStorage, ReadStorage, WriteStorage, System, Read};struct Position {x: f32,y: f32,
}impl Component for Position {type Storage = VecStorage<Self>;
}fn main() {let mut world = World::new();world.register::<Position>();let entity = world.create_entity().with(Position { x: 1.0, y: 2.0 }).build();
}
6.3.2 组件添加和处理
struct Velocity {x: f32,y: f32,
}impl Component for Velocity {type Storage = VecStorage<Self>;
}struct MovementSystem;impl<'a> System<'a> for MovementSystem {type SystemData = (ReadStorage<'a, Velocity>,WriteStorage<'a, Position>,);fn run(&mut self, (velocities, mut positions): Self::SystemData) {for (velocity, position) in (&velocities, &mut positions).join() {position.x += velocity.x;position.y += velocity.y;}}
}
更多 API 信息请参考官方文档:specs API
以上是 specs 游戏引擎的简要介绍、安装配置以及 API 概览。希望对你有所帮助!
总结
Rust语言的游戏开发生态正在迅速成长,而amethyst, bevy, Piston, rg3d, ggez和specs等游戏引擎和框架正是这一进程中的重要组成部分。每个工具都有其独特之处,如amethyst强调并行性和数据驱动,bevy采用ECS架构,Piston模块化设计灵活易用,rg3d专注于渲染等。通过对这些工具的深入了解,开发者可以更好地选择适合自己项目需求的工具,加速游戏开发过程,提升开发体验。
相关文章:
【Rust光年纪】探索Rust游戏开发世界:六款引人注目的游戏引擎与框架
探索Rust游戏开发引擎:选择合适的工具 前言 随着Rust语言的不断发展,越来越多的游戏开发者开始将其视作构建游戏引擎和框架的理想选择。本文将介绍几个用于Rust语言的游戏引擎和框架,分别对其核心功能、使用场景、安装与配置以及API进行概览…...
从数据时代到智能时代,星环科技信雅达联合发布金融全栈解决方案
近年来,星环科技与信雅达在金融行业的多个关键领域展开了广泛而深入的合作,推出了一系列面向金融科技领域的联合解决方案。此次合作基于星环科技在大数据、人工智能和云计算领域的先进技术,以及信雅达在金融领域的深厚积累,围绕数…...
自定义维度映射:Kylin Cube设计的高级玩法
自定义维度映射:Kylin Cube设计的高级玩法 在数据仓库领域,Apache Kylin以其高性能的分析能力而闻名。Kylin通过构建多维数据立方体(Cube)来实现对大数据集的快速查询。Cube设计中的维度映射是优化查询性能的关键环节。本文将探讨…...
c17 新特性 字面量,变量,函数,隐藏转换等
导论 c17新特性引入了许多新的语法,这些语法特性更加清晰,不像传统语法,语义飘忽不定,比如‘a’你根本不知道是宽字符还是UTF-8 字符。以及测试i i,最后结果到底是多少。这种问题很大情况是根据编译器的优化进行猜测&a…...
git操作的一些备忘录
1.回退本地合并 git merge --abort 2.撤销上一次的提交 方法一:(已经提交到git线上仓库了,git reset操作,会把之前提交的都删除,感觉有点危险) 想要让Git回退历史,有以下步骤: 使用git log命令,…...
vscode回退不显示了,不方便操作
一、后退前进按钮 顶部显示,方便调试 <—— ——> 文件-> 首选项 -> 设置->commandcenter->勾选 Window: Title Bar Style->custom 将native —>custom...
常见的CSS属性(一)——字体、文本、边框、内边距、外边距、背景、行高、圆角、透明度、颜色值
一、字体 二、文本 三、边框 四、外边距 五、内边距 六、背景 七、行高 八、圆角 九、透明度 九、颜色值 元素的继承性是指给父元素设置了某些属性,子元素或后代元素也会有作用。 一、字体 “font-*”是字体相关的属性,具有继承性。代码如下&a…...
react入门到实战-day2-7.21
昨天晚上刚学完已经一点了,来不及写笔记,主要是想睡觉哈,所以今天补上,我发现效率还挺高的,今天重新做笔记,加固了昨天的知识点,要不以后都这样子哈,学完第二天再写哈,要…...
Springboot集成Elasticsearch High Level REST Client实现增删改查实战
获取源码🚩 需要完整代码资料,请一键三连后评论区留下邮箱,安排发送!!!🤖 什么是High Level REST Client? Elasticsearch 的 High Level REST Client 是一个用于与 Elasticsearch…...
2023河南萌新联赛第(二)场 南阳理工学院
A. 国际旅行Ⅰ 题目: 思路: 因为题意上每个国家可以相互到达,所以只需要排序,输出第k小的值就可以了。 AC代码: #include<bits/stdc.h> #define int long long #define IOS ios::sync_with_stdio(0);cin.tie…...
使用Docker Compose给自己上传的JAR打包成镜像并自动启动容器
Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。通过编写一个docker-compose.yml文件,可以简化Docker容器的管理。本文将介绍如何使用Docker Compose将一个上传的JAR文件打包成Docker镜像,并在容器中自动启动该应用程序。 一、准备工作…...
NET8部署Kestrel服务HTTPS深入解读TLS协议之Certificate证书
Certificate证书 Certificate称为数字证书。数字证书是一种证明身份的电子凭证,它包含一个公钥和一些身份信息,用于验证数字签名和加密通信。数字证书在网络通信、电子签名、认证授权等场景中都有广泛应用。其特征如下: 由权威机构颁发&…...
DML数据库的数据类型
DML 用于改变数据表中的数据的操作语言。 包括INSERT(将数据插入到数据表中),UPDATE(更新表中已经存在的数据),DELETE(删除表中已经存在的数据) INSERT 用法 INSERT INTO 表名(字段1&#x…...
@RequestParam和@PathVariable 处理 HTTP 请求参数的注解
RequestParam 请求参数 可解析前端get请求路径后以问号拼接的参数,查询参数是 URL 后面的问号 (?) 后跟的一系列键值对,RequestParam 可以设置参数是否是必需的(使用 required 属性) GetMapping("/users") public String getUsers(RequestPar…...
《代码大全》读书笔记-第Ⅰ部分 奠定基础
0.欢迎来到软件构建世界 什么是软件构件: 对于非正式及项目,会觉得罗列出来的这些活动太过于繁复。但是这些对于正式项目都是很有必要的(大部分人都没经历过,比如说我)。一般一些小公司主要也就是需求分析、编码、开发人员自测、集成测试这几…...
杰发科技Bootloader(1)—— Keil配置地址
IAP方式 BootLoader方式 UDSBoot方式 AC7801的地址分配 用户空间的的地址从8000000开始分配,大小是64页,即128K。 RAM地址从20000000开始 基于UDSboot调试-Boot 烧录Boot之后,ATClinkTool无法连接 用keil查看内存,地址到8005388…...
338. 比特位计数
338. 比特位计数 题目链接:338. 比特位计数 代码如下: class Solution { public:vector<int> countBits(int n) {vector<int> res(n 1, 0);for (int i 1; i < n; i){if (i % 2 1) { res[i] res[i - 1] 1; }else { res[i] res[i …...
flask后端+vue前端——后端怎么发文件给前端?
首先,前端axios请求的responseType要设置为blob const service axios.create({baseURL: http://127.0.0.1/api,timeout: 5000});//向后端发送数据,后端根据这个数据data生成文件返回send_coordinate(data){return service.post(/,data,{responseType: …...
计算机毕业设计django+hadoop+scrapy租房可视化 租房推荐系统 租房大屏可视化 租房爬虫 spark 58同城租房爬虫 房源推荐系统
python scrapy bootstrap jquery css javascript html 租房信息数据展示 租房地址数量分布 租房类型统计 租房价格统计分析 租房面积分析 房屋朝向分析 房屋户型平均价格统计分析 房屋楼层统计分析 房屋楼层与价格统计分析 房屋地址与价格统计分析 房屋相关信息词云展示 租房…...
【Tomcat】Mac M3 Pro安装Tomcat7
文章目录 下载配置环境变量修改权限启动和关闭 下载 官网:https://tomcat.apache.org/ cd ~/Library tar -zxvf /Users/用户名/Downloads/apache-tomcat-7.0.99.tar.gz mv apache-tomcat-7.0.99 ~/Library/tomcat配置环境变量 vi ~/.bash_profileexport TOMCAT…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...
机器学习的数学基础:线性模型
线性模型 线性模型的基本形式为: f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法,得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...
