用 Rust 開發遊戲 - 5 移動

在《用 Rust 開發遊戲 - 4 跳躍》部分我們學習瞭如何獲得玩家輸入並將其轉換爲垂直移動。這一次,讓我們利用我們所學到的,將玩家從左向右移動。

移動系統

讓我們先添加一個負責移動玩家的新系統:

fn player_movement(
    keyboard_input: Res<Input<KeyCode>>,
    mut players: Query<(&Player, &mut RigidBodyVelocity)>
) {
    for (player, mut velocity) in players.iter_mut() {
        if keyboard_input.pressed(KeyCode::Left) {
            velocity.linvel = Vec2::new(-player.speed, velocity.linvel.y).into();
        }
        if keyboard_input.pressed(KeyCode::Right) {
            velocity.linvel = Vec2::new(player.speed, velocity.linvel.y).into();
        }
    }
}

這個移動系統監聽我們鍵盤上的左右鍵。當玩家按下其中一個鍵時,我們的系統將設置玩家的線性速度爲 x 軸上 + 或 - 的玩家初始速度屬性,並設置玩家速度的 y 分量爲當前的 y 值。這可以確保按左或按右不會產生停止正在進行的跳躍的效果。

要讓我們的系統運作,我們還需要:

1,註冊:

.add_system(player_movement.system())

2,在 Player 中添加一個 speed 屬性:

struct Player {
    speed: f32
}

3,爲速度設置一個初始值:

.insert(Player { speed: 3.5 })

同時,我將玩家的跳躍初始值降低到 7。

如果你運行遊戲,你應該能夠通過鍵盤上的左鍵或右鍵讓我們的玩家向左或向右移動。

進一步探索

Bevy 支持多種類型的用戶輸入,我們學習了處理鍵盤事件的方法,但同樣的事情也可以用在鼠標、觸屏和 / 或手柄上。

我們還學會了通過查看鍵盤的當前狀態來處理用戶輸入,還有另一種方法: 通過事件。

用攝像機跟蹤玩家

玩家現在可以移動,但如果玩家離開屏幕,攝像機就會失去視野。如果攝像機能夠跟隨玩家的移動就好了。一種方法是將攝像機聲明爲玩家的孩子:

// fn spawn_player
.with_children(|parent| {
    parent.spawn_bundle(new_camera_2d());
})

我們還必須把舊的攝像機從系統中移除。

這種方法是可行的,但有一些注意警告。我們將在後面使用更好的替代方案。

本文翻譯自:

https://dev.to/sbelzile/making-games-in-rust-part-5-movement-4f11

coding 到燈火闌珊 專注於技術分享,包括 Rust、Golang、分佈式架構、雲原生等。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/bjRKFT6wAa7cxLUQEoK93Q