那今天继续来讲昨天的 Bevy 专案
而进度是创建可以控制的角色
先讲昨天没讲到的部份
pub struct ArrowsPlugin;
impl Plugin for ArrowsPlugin {
fn build(&self, app: &mut AppBuilder) {
app.init_resource::<ArrowMaterial>()
.insert_resource(SpawnTimer(Timer::from_seconds(1.5, true)))
.add_system(spawn_arrow_up.system())
.add_system(spawn_arrow_down.system())
.add_system(spawn_arrow_left.system())
.add_system(spawn_arrow_right.system())
.add_system(up_arrows.system())
.add_system(down_arrows.system())
.add_system(left_arrows.system())
.add_system(right_arrows.system())
}
}
这是昨天增加上下左右後的 Plugin
也就是说他可以去将 system 整合起来
那可以看到上面的部份 insert_resource 这个基本上就是初始化某个物件的值
好 OK 接下来就继续前面的内容
首先一如往常的还是要先定义出 角色的结构体
pub struct Main;
pub struct MainMaterial {
main: Handle<ColorMaterial>,
}
然後引入模型
impl FromWorld for MainMaterial {
fn from_world(world: &mut World) -> Self {
let world = world.cell();
let mut material = world.get_resource_mut::<Assets<ColorMaterial>>().unwrap();
let asset_server = world.get_resource::<AssetServer>().unwrap();
let character = asset_server.load("./main.png");
MainMaterial {
main: material.add(character.into()),
}
}
}
这边应该都是昨天就学会的操作了
那麽这边我们先生成我们主要的角色
fn spawn_main(mut command: Commands, material: ResMut<MainMaterial>) {
command
.spawn_bundle(SpriteBundle {
material: material.main.clone(),
sprite: Sprite::new(Vec2::new(100., 100.)),
..Default::default()
})
.insert(Main);
}
至於位置是正中央所以就不设定
那麽接下来这边是今天的关键
fn movement(key_input: Res<Input<KeyCode>>, mut positions: Query<&mut Transform, With<Main>>) {
for mut transform in positions.iter_mut() {
if key_input.just_pressed(KeyCode::W) {
transform.rotation = Quat::from_rotation_z(0.5 * PI);
}
else if key_input.just_pressed(KeyCode::A) {
transform.rotation = Quat::from_rotation_z(1. * PI);
}
else if key_input.just_pressed(KeyCode::S) {
transform.rotation = Quat::from_rotation_z(1.5 * PI);
}
else if key_input.just_pressed(KeyCode::D) {
transform.rotation = Quat::from_rotation_z(0. * PI);
}
}
}
重点是引入的部份 这边的引入就是
Query<&mut Transform, With>
那 With 会绑定该物件
而 Transform 是他的各种数值 像是座标之类的
那这边我使用 PI 来转向
那麽 key_input 就是让他即时去抓他的 Input
pub struct CharacterPlugin;
impl Plugin for CharacterPlugin {
fn build(&self, app: &mut AppBuilder) {
app.init_resource::<MainMaterial>()
.add_startup_stage("game_setup", SystemStage::single(spawn_main.system()))
.add_system(movement.system());
}
}
那麽要注意的地方是 要使用 startup 来弄出 main 这个物件 因为他要作为预设去生成
那麽 明天来讲消失的部份 可能记分板也会讲吧
<<: Day 17 Dockerfile 和 Docker-Compose 的差异
完赛了,下次再出现决定要写进阶/实务上的内容,再分享给各位 :) 刚刚看完後觉得文章内容还可以再补...
根据 MDN,目前 CSS 的伪类选取器有以下这些: 今天要介绍到的是关於点击超连结後会经历的五种伪...
问题描述: 使用Visual Studio连线MySQL出现报错 错误讯息如下 「System.IO...
ChatOps with Mattermost chatops好处 成本低 互动性佳 即时反应提高效...
今天上班看一下github的纪录,发现最近只有commit没push,所以都没上到github上,现...