#devcade #packaging #building #tool #cli-tool #game #publish

应用 cargo-devcade

用于构建和打包devcade游戏的命令行工具

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 图像

Download history 1/week @ 2024-03-14 19/week @ 2024-03-28 6/week @ 2024-04-04

每月117次下载

MIT许可证

155KB
311 代码行

cargo-devcade是使用Rust构建和部署devcade游戏的一个辅助工具!

安装

安装很简单

cargo install cargo-devcade

悄悄说! 确保您已经安装并配置好了cross

开始使用cargo-devcadebevy

尽管这不是必需的,但我建议您使用bevydevcaders来将东西显示在屏幕上。

项目设置

一旦安装了cargo-devcade,我们就可以创建一个新的项目

cargo new ferris-spinner
cd ferris-spinner

现在,让我们添加一些我们需要依赖项

cargo add bevy devcaders

Mary笔记

  • Bevy是一个Rust的游戏引擎。
  • devcaders是一个库,可以将Devcade功能添加到您的Bevy游戏中!

哦,别忘了图标!icon.pngbanner.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 枚举

如果您没有连接控制器,可以使用 VN 键代替!

有关更多信息或了解更多,请访问 bevyengine.org

还有一件事

所以……我们应该让它能够退出。

向我们的系统添加以下行,以便在按下菜单按钮时退出(任何玩家都可以!)

if devcade_controls.pressed(Player::P1, Button::Menu)
  || devcade_controls.pressed(Player::P2, Button::Menu)
{
  std::process::exit(0);
}

发布

将内容发布到 devcade 很简单

  1. 运行 cargo devcade package
  2. 将 zip 文件上传到 devcade 上传门户,确保将标题设置为您的 crate 名称
  3. 盈利?

依赖项

~30–43MB
~542K SLoC