13个版本 (7个破坏性更新)
0.8.0 | 2023年4月8日 |
---|---|
0.7.1 | 2023年3月18日 |
0.6.0 | 2023年3月18日 |
0.5.1 | 2023年3月18日 |
0.1.0 | 2023年3月13日 |
#579 in 图像
每月117次下载
155KB
311 代码行
cargo-devcade
是使用Rust构建和部署devcade游戏的一个辅助工具!
安装
安装很简单
cargo install cargo-devcade
悄悄说! 确保您已经安装并配置好了cross
!
开始使用cargo-devcade
和bevy
!
尽管这不是必需的,但我建议您使用bevy
和devcaders
来将东西显示在屏幕上。
项目设置
一旦安装了cargo-devcade
,我们就可以创建一个新的项目
cargo new ferris-spinner
cd ferris-spinner
现在,让我们添加一些我们需要依赖项
cargo add bevy devcaders
Mary笔记
哦,别忘了图标!icon.png
和banner.png
应位于crate根目录下的store_icons
文件夹中
mkdir store_icons
curl https://placehold.it/800x450.png -Lo store_icons/banner.png
curl https://placehold.it/512x512.png -Lo store_icons/icon.png
构建
在我们做任何其他事情之前,让我们先进行一次测试构建,以确保我们的项目已正确设置
cargo devcade package
这将运行构建,并为生产打包您的应用程序。
如果不起作用,可能是遇到了一个错误... 或者更有可能的是,您设置错了!
现在,写一些代码吧
Bevy非常不错,这里有一个我们可以尝试的小游戏
use bevy::{prelude::*, window::WindowMode};
fn main() {
App::new()
.add_plugins(DefaultPlugins.set(WindowPlugin {
primary_window: Some(Window {
mode: WindowMode::Fullscreen,
..default()
}),
..default()
}))
.add_startup_system(setup_system)
.add_system(hello_world_system)
.run();
}
fn setup_system() {
println!("Welcome to ferris spin!");
}
fn hello_world_system() {
println!("hello world");
}
酷,让我们运行一下
cargo run
它什么也没做!...除了打印很多次“hello world”并创建一个窗口。
这是因为我们还没有画任何东西!
灰色很无聊
让我们从互联网上抓取一些图片来在我们的游戏中使用
mkdir assets
curl https://rustacean.net/assets/rustacean-flat-happy.png -o assets/ferris.png
酷!现在让我们在启动时创建一个相机和一个摩天轮
#[derive(Component)]
struct Ferris {}
fn setup_system(mut commands: Commands, asset_server: Res<AssetServer>) {
println!("Welcome to ferris spin!");
// Add a camera so we can see stuff:
commands.spawn(Camera2dBundle::default());
// Draw a ferris in the middle of the screen
commands.spawn((
Ferris {},
SpriteBundle {
texture: asset_server.load("ferris.png"),
transform: Transform::from_xyz(100., 0., 0.),
..default()
},
));
}
现在
cargo run
你应该在屏幕上看到一个螃蟹。如果你没有,遇到了某种错误... 开一个问题?
这里出现了一种有趣的集群模式,你发现了吗?
标记
在集群中,有时我们会链接一个虚拟组件(在这种情况下为 Ferris
),以便以后可以查找。我们将在下一步看到一些这样的语法。
如果螃蟹实际上……做了些什么呢?
嘿,这很酷,但如果我们能移动螃蟹呢?
fn hello_world_system(mut sprite_position: Query<(&mut Ferris, &mut Transform)>) {
for (_, mut transform) in &mut sprite_position {
transform.translation.x -= 1.0;
}
println!("hello world");
}
但是……如果我们能真正控制它呢?
嗯……怎么实现?也许我们之前添加的 devcaders
库能帮我们……
use devcaders::{DevcadeControls, Player, Button};
fn hello_world_system(
time: Res<Time>,
mut sprite_position: Query<(&mut Ferris, &mut Transform)>,
devcade_controls: DevcadeControls,
) {
for (_, mut transform) in &mut sprite_position {
if devcade_controls.pressed(Player::P1, Button::StickLeft) {
transform.translation.x -= 5.0 * time.delta_seconds();
}
if devcade_controls.pressed(Player::P1, Button::StickRight) {
transform.translation.x += 5.0 * time.delta_seconds();
}
}
println!("hello world");
}
太棒了!现在我们的螃蟹在我们移动摇杆时就会移动。
有关控制和它们含义的完整列表,请查看 devcaders 的 Button
枚举
如果您没有连接控制器,可以使用 V
和 N
键代替!
有关更多信息或了解更多,请访问 bevyengine.org!
还有一件事
所以……我们应该让它能够退出。
向我们的系统添加以下行,以便在按下菜单按钮时退出(任何玩家都可以!)
if devcade_controls.pressed(Player::P1, Button::Menu)
|| devcade_controls.pressed(Player::P2, Button::Menu)
{
std::process::exit(0);
}
发布
将内容发布到 devcade 很简单
- 运行
cargo devcade package
- 将 zip 文件上传到 devcade 上传门户,确保将标题设置为您的 crate 名称
- 盈利?
依赖项
~30–43MB
~542K SLoC