Rustでゲームを作る - パート5 - 動き
5364 ワード
ジャンプについてでした.そこでは、プレイヤーの入力を取得して垂直方向の動きに変換する方法を学びました.今回は、学んだことを活用して、プレーヤーを左から右に動かしてみましょう.
プレーヤーの移動を担当する新しいシステムを追加することから始めましょう.
このシステムは、キーボードの左右のキーをリッスンします.これらのキーのいずれかが押されると、システムはプレーヤーの線形速度を x 軸のプレーヤー速度プロパティ + または - に設定し、プレーヤーの速度の y コンポーネントを現在の y 速度に設定します.これにより、左または右を押しても、進行中のジャンプが停止することはありません.
システムが機能するには、次のものが必要です.
登録するには:
プレーヤーの速度を設定するには:
一方、プレーヤーの
ゲームを実行すると、キーボードの左または右のキーを押すことで、プレーヤーを左または右から移動させることができるはずです.
Bevy は、複数のタイプのユーザー入力方法をサポートしています.キーボード イベントを処理する 1 つの方法を学びましたが、マウス、タッチスクリーン、および/またはゲームパッドでも同じことができます.
また、キーボードの現在の状態を見て、ユーザー入力を処理することも学びました.これを行う別の方法があります: イベント経由です.一部のタイプの入力はイベントとしてのみ提供されることに注意してください.
Bevy's unofficial cheat book を読んで、サポートされている入力方法とそれらの処理方法について詳しく知ることができます.
プレイヤーは移動できるようになりましたが、プレイヤーが画面外に出るとカメラが見えなくなります.プレーヤーの動きに合わせてカメラが追従してくれるとよいでしょう.これを行う 1 つの方法は、カメラをプレーヤーの子として宣言することです.
また、
このアプローチは機能しますが、いくつかの注意点があります.このチュートリアルのパート 10 で、より良い代替手段について学びます.
最終的なコードは here です.
ムーブメントシステム
プレーヤーの移動を担当する新しいシステムを追加することから始めましょう.
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 速度に設定します.これにより、左または右を押しても、進行中のジャンプが停止することはありません.
システムが機能するには、次のものが必要です.
.add_system(player_movement.system())
speed
プロパティをプレーヤーのコンポーネントに追加するには:struct Player {
speed: f32
}
.insert(Player { speed: 3.5 })
一方、プレーヤーの
jump_impulse
を 7 に下げました.ゲームを実行すると、キーボードの左または右のキーを押すことで、プレーヤーを左または右から移動させることができるはずです.
もっと遠く行く
Bevy は、複数のタイプのユーザー入力方法をサポートしています.キーボード イベントを処理する 1 つの方法を学びましたが、マウス、タッチスクリーン、および/またはゲームパッドでも同じことができます.
また、キーボードの現在の状態を見て、ユーザー入力を処理することも学びました.これを行う別の方法があります: イベント経由です.一部のタイプの入力はイベントとしてのみ提供されることに注意してください.
Bevy's unofficial cheat book を読んで、サポートされている入力方法とそれらの処理方法について詳しく知ることができます.
カメラでプレーヤーを追跡する
プレイヤーは移動できるようになりましたが、プレイヤーが画面外に出るとカメラが見えなくなります.プレーヤーの動きに合わせてカメラが追従してくれるとよいでしょう.これを行う 1 つの方法は、カメラをプレーヤーの子として宣言することです.
.with_children(|parent| {
parent.spawn_bundle(new_camera_2d());
})
また、
setup
システムから古いカメラを削除し、setup
システムが空になったので削除する必要があります.このアプローチは機能しますが、いくつかの注意点があります.このチュートリアルのパート 10 で、より良い代替手段について学びます.
最終的なコードは here です.
Reference
この問題について(Rustでゲームを作る - パート5 - 動き), 我々は、より多くの情報をここで見つけました https://dev.to/sbelzile/making-games-in-rust-part-5-movement-4f11テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol