首页 > 其他分享 >使用 Rust 开发原生 iOS 游戏

使用 Rust 开发原生 iOS 游戏

时间:2022-09-02 10:23:29浏览次数:110  
标签:原生 Bevy iOS ios 别名 使用 Rust

使用 Rust 开发原生 iOS 游戏

我记录了使用纯 Rust 探索跨平台游戏开发的旅程。

严重地。我不解决。 100% 生锈或破产!

为什么我选择 Rust

当谈到性能和模块化设计时,Rust 是一个热门的讨论话题,但这并不是我选择这种语言的原因。我选择 Rust 是因为我想要一种跨平台的系统编程语言。

事后诸葛亮:我喜欢 Rust 的地方

在研究了几个星期的 Rust 之后,我发现一些最可怕的功能变得令人愉快。尽管有一个学习曲线,但事后看来,我真的很欣赏 Rust 的以下特性。

无面向对象

模块化代码

文档生态系统

构建系统

包管理

我探索 Rust 的目标

我的目标是找到一种语言,它允许我编写跨平台代码而无需跳过一堆障碍。作为一个业余爱好者,我没有太多时间去学习新的语言或挖掘一周的框架。

为了让我的探索取得成功,我将继续进行 Rust 开发,直到我在 App Store 上发布一个应用程序。为什么?因为 Swift/Obj-C 是我最害怕的语言,但我可以容忍 Java。因

0.项目环境设置

进入这个项目,我知道我会经常修改环境变量和构建脚本。所以在我开始使用 Rust 之前,我会在我的 .bashrc 这使得更换我的开发环境的大更改变得容易。

以下脚本允许我扩展我的 .bashrc 从我的任何项目目录 〜/代码 向上遍历文件夹,直到找到一个名为 .devenv .从那里我可以获取每个项目的 bash 脚本。

 # 向上遍历时从`find`中获取第一个匹配  
 函数 find_above {  
 old_pwd="$PWD"  
 而 [[ "$PWD" == $HOME/code/* ]] ;做  
 new_pwd=`find "$PWD"/-maxdepth 1 "[[email protected]](/cdn-cgi/l/email-protection)"`  
  
 如果 [[ "$new_pwd" ]];然后  
 休息  
 菲  
  
 光盘..  
 完毕  
  
 回声“$new_pwd”  
 cd "$old_pwd"  
 old_pwd=""  
 新密码=“”  
 }

这是我使用该方法获取本地的部分 .bashrc .每次切换项目时,我都必须重新获取环境资源,但这不是问题。

 # 见上面的代码  
  
 ENVDIR=$(find_above -type d -name ".devenv")  
 如果 [[ "$ENVDIR" ]];然后  
 源“$ENVDIR/.bashrc”  
 菲

创建别名

现在我的机器可以处理每个项目的 bash 环境,我设置了一些命令,以便我可以快速浏览我的代码。

 # ~/code/tictactoe/.devenv/.bashrc  
 echo "检测到本地环境:$PWD"  
  
 # src 目录  
 导出 SRCDIR=$(find_above -name "src")  
  
 # 根目录  
 导出 ROOTDIR=$(目录名 $SRCDIR)  
  
 # 构建目录  
 出口 BUILDDIR="$ROOTDIR/目标"  
 mkdir -p "$BUILDDIR"  
  
 # 库目录  
 导出 LIBDIR="$ROOTDIR/src"  
 mkdir -p "$LIBDIR"  
  
 # bin 目录  
 出口 BINDIR="$ROOTDIR/.devenv/bin"  
 mkdir -p "$BINDIR"  
 导出 PATH="$BINDIR:$PATH"  
  
 导出 RUST_LOG="警告,手工制作=调试"  
 导出 RUST_BACKTRACE=1  
  
 # 别名  
 别名 c="货物构建"  
 别名干净=“干净”  
 别名 s="源 $HOME/.zshrc"  
 别名 root="cd $ROOTDIR"  
 别名 r="货运运行"  
 别名 t="货物测试"  
 别名 i="run-ios-sim.sh"  
 别名 cr="c && r"

1.Hello World Rust/Bevy

当我几周前第一次开始探索时,我想从尽可能低的水平开始。我想编写自己的图形渲染和游戏引擎。然而,在大约 3 天的零进度之后,我放弃了这个梦想,寻找了一个 Rust 游戏引擎。

安装贝维

当然,我下载了我能找到的第一个游戏引擎。结果证明这是一个非常好的框架。 Bevy 是一个游戏引擎,它是围绕应用程序设计的,应该是高度模块化的。我已经使用图书馆几个星期了,我仍然喜欢它!

 货物添加bevy

使用 Bevy 的范式编写代码

这是在 Mac OS 上使用 Bevy 的 Hello world:

 使用 bevy::prelude::*;  
  
 fn 主要() {  
 应用程序::new()  
 .add_system(hello_world_system)  
 。跑();  
 }  
  
 fn hello_world_system() {  
 println!("Hello Rust");  
 }

注意我没有直接打电话 打印 .这是因为 Bevy 提供了一个与路由系统非常相似的框架。 ExpressJS .在更大的项目中,您可以提取模块/插件中的功能,并且每个插件都可以访问上下文以注册更多系统。

运行 Bevy Hello World

 充电运行

图形用户界面在哪里?

Bevy 将它的所有组件都隔离到插件中,所以如果你想放弃整个“游戏引擎”的东西,你可以这样做!您还可以在无头模式下运行 Bevy!尽管为了本教程的目的,您需要启用默认插件。

 使用 bevy::prelude::*; fn 主要() {  
 应用程序::new()  
 .add_plugins(默认插件)  
 // ...  
 。跑();  
 } // ...

2. 为 iOS 构建(跨平台前期)

我想立即尝试编译 你好世界 对于 iOS。这为我节省了很多前期时间,因为如果我不能让 iOS 与 Rust 一起工作,那么这个项目就是失败的。此外,没有什么比编写一个项目然后在事后尝试将其移植到另一个系统更困难的了。

事后诸葛亮:警告导致发现

我承认成功编译所花的时间比我愿意承认的要长得多。最初,我认为我需要使用 _外部“C”_ , 但事实并非如此。事实上,您甚至不需要触摸 XCode!

捆绑

有一个用于 cargo 的构建工具,可以让您为 iOS 编译和捆绑,而无需跳过任何环节。首先安装构建工具:

 货物安装货物捆绑

添加编译目标

然后你需要列出 Rust 支持的所有可能的构建目标。由于我的目标是 iOS,所以我运行了以下命令:

 rustup 目标列表 | grep ios

如果您缺少 iOS 作为目标,则需要根据您的环境添加它们。

 # 用于生产  
 rustup 目标添加 aarch64-apple-ios  
  
 # 用于开发  
 rustup 目标添加 aarch64-apple-ios-sim

iOS 模拟器的打包

一旦您的系统上有可用的编译目标 你在 Mac 上 ,您可以使用我编写的脚本或复制并粘贴以下命令将您的应用程序注入模拟器。大多数命令都随 XCode 一起提供。

下面的脚本使用 达塞尔 因此它可以从项目中查询名称和包标识符 货运.toml 文件。

 冲泡安装dasel

然后我使用 XCode 提供的一系列命令来配合 iPhone 模拟器工作。有关此脚本中的命令如何工作的更多信息,可以使用此找到 备忘单 .

 #/usr/bin/env bash  
  
 APP_NAME="$(cat Cargo.toml | dasel -r toml '.package.name')"  
 BUNDLE_ID="$(cat Cargo.toml | dasel -r toml '.package.metadata.bundle.identifier')"  
  
 货物捆绑--target aarch64-apple-ios-sim  
 xcrun simctl 启动“iPhone 12 mini”  
 打开 /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app  
 xcrun simctl install booted "target/aarch64-apple-ios-sim/debug/bundle/ios/$APP_NAME.app"  
 xcrun simctl launch --console booted "$BUNDLE_ID"

3. 项目成功!

如果一切正常,你应该会留下一个 iOS 应用程序,它会向你的终端发送垃圾邮件“Hello Rust”并满足以下条件:

  • 完全用 Rust 编写
  • 没有桥接代码
  • 没有 XCode
  • 模块化设计
  • 灵活的开发环境

未完待续

如果您想将项目的其余部分作为一个系列记录或分享源代码,请关注、鼓掌和评论!它帮助我保持动力

结论

完全用 Rust 编写游戏并在没有 XCode 的情况下本地编译到 iOS 是可能的。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/11130/11520210

标签:原生,Bevy,iOS,ios,别名,使用,Rust
From: https://www.cnblogs.com/amboke/p/16648876.html

相关文章

  • android原生观察者和被观察者模式java.util.Observable
    项目中用到这个,所以记录一下https://blog.csdn.net/iteye_5649/article/details/82636534?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidula......
  • opensergo 阿里开源的语言无关的云原生服务治理指南
    opensergo是阿里巴巴开源提供的语言无关的云原生服务治理指南,包含了不少子项目(指南,golang,java,协议)概览  说明opensergo还是很完备的,很值得学习参考,后续仔细研究......
  • 2022-09-01 第二小组 张晟源(ajax,axios)
    JavaWeb一,AJAX异步刷新(局部刷新),前端技术,可以给后台发请求异步:整个页面不会全部刷新,只有某个局部刷新  验证用户名存在 使用ajax发送请求,页面不可以通过后台跳转......
  • ios越狱
    1.越狱软件下载unc0verhttps://unc0ver.dev/(这个网站下载即可)2.重新签名安装包,安装到手机上最重要的就是这一步,至于重签名的方法网上有很多种,可以找一下,有种简单的方法......
  • 性能提升1倍,成本直降50%!基于龙蜥指令加速的下一代云原生网关
    简介: 什么是下一代网关?文/IntelArchSIG技术背景网络信息传输的可靠性、机密性和完整性要求日渐提升,HTTPS协议已经广泛应用。HTTPS的SSL/TLS协议涉......
  • Rust 从入门到精通06-语句和表达式
    1、语句和表达式语句和表达式是Rust语言实现逻辑控制的基本单元。在Rust程序里面,语句(Statement)是执行一些操作但不返回的指令,表达式(Expressions)计算并产生一个值。表......
  • 【iOS自动化测试】第一章:方案调研
    背景目前Android端已完成了相应的框架搭建,并实际落地产出了,由于Android使用的是Unittest+HtmlTestRunner产出报告,需要增加新功能的话需要改动到底层框架,所以目前在负责的i......
  • iOS 自动化测试踩坑(一): 技术方案、环境配置与落地实践
    ⬇️点击“下方链接”,提升测试核心竞争力!>>更多技术文章分享和免费资料领取移动端的自动化测试,最常见的是Android自动化测试,我个人觉得Android的测试优先级会更高,也......
  • iOS自动化真机测试验证环境过程中常见问题解析
    ⬇️点击“下方链接”,提升测试核心竞争力!>>更多技术文章分享和免费资料领取本章节主要讲解iOS自动化真机配置以及在iOS真机执行自动化时常见问题与解决方法。真机使......
  • app自动化测试(iOS)元素定位(新手篇)
    ⬇️点击“下方链接”,提升测试核心竞争力!>>更多技术文章分享和免费资料领取除了通用定位方式外,iOS还有其他特殊的定位方式,本章节仅介绍iOS特有定位。PredicateString......