欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > Rust入门实战 编写Minecraft启动器#2建立资源模型

Rust入门实战 编写Minecraft启动器#2建立资源模型

2025/2/23 14:19:26 来源:https://blog.csdn.net/Enaium/article/details/140242878  浏览:    关键词:Rust入门实战 编写Minecraft启动器#2建立资源模型

首发于Enaium的个人博客


我们需要声明几个结构体来存储游戏的资源信息,之后我们需要将json文件解析成这几个结构体,所以我们需要添加serde依赖。

serde = { version = "1.0", features = ["derive"] }

资源相关asset.rs

use serde::Deserialize;
use std::collections::HashMap;#[derive(Deserialize)]
pub struct AssetIndex {pub id: String,pub sha1: String,pub size: u32,#[serde(alias = "totalSize")]pub total_size: u32,pub url: String,
}#[derive(Deserialize)]
pub struct Index {pub objects: HashMap<String, Object>,
}#[derive(Deserialize)]
pub struct Object {pub hash: String,pub size: u32,
}

游戏本体version.rs

use serde::Deserialize;use crate::{asset::AssetIndex, library::Library};pub type Libraries = Vec<Library>;#[derive(Deserialize)]
pub struct Version {#[serde(alias = "assetIndex")]pub asset_index: AssetIndex,pub downloads: Download,pub id: String,pub libraries: Libraries,#[serde(alias = "mainClass")]pub main_class: String,#[serde(alias = "releaseTime")]pub release_time: String,pub time: String,#[serde(alias = "type")]pub type_: String,
}#[derive(Deserialize)]
pub struct Download {pub client: Client,
}#[derive(Deserialize)]
pub struct Client {pub sha1: String,pub size: u32,pub url: String,
}

游戏依赖库library.rs

use serde::Deserialize;#[derive(Deserialize)]
pub struct Library {pub downloads: Download,pub name: String,pub rules: Option<Vec<Rule>>,
}#[derive(Deserialize)]
pub struct Rule {pub action: String,pub os: Os,
}#[derive(Deserialize)]
pub struct Os {pub name: String,
}#[derive(Deserialize)]
pub struct Download {pub artifact: Artifact,
}#[derive(Deserialize)]
pub struct Artifact {pub path: String,pub sha1: String,pub size: i32,pub url: String,
}

还有版本清单version_manifest.rs

use serde::Deserialize;#[derive(Deserialize)]
pub struct VersionManifest {pub latest: Latest,pub versions: Vec<Version>,
}#[derive(Deserialize)]
pub struct Latest {pub release: String,pub snapshot: String,
}#[derive(Deserialize)]
pub struct Version {pub id: String,#[serde(alias = "type")]pub type_: String,pub url: String,pub time: String,#[serde(alias = "releaseTime")]pub release_time: String,
}

最后我们把这几个模块导入到lib.rs中。

pub mod asset;
pub mod library;
pub mod version;
pub mod version_manifest;

项目地址

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词