#Getting Movement to Work on 2D Character

6 messages · Page 1 of 1 (latest)

brisk nebula
#

I have the following main.rs

mod player;

use bevy::{
    prelude::*,
    window::{CursorGrabMode, CursorOptions, PresentMode, WindowMode},
};
use bevy_aseprite_ultra::prelude::*;

fn main() {
    let mut app = App::new();

    let window = Window {
        title: "Etude".into(),
        resolution: (1920., 1080.).into(),
        present_mode: PresentMode::Mailbox,
        mode: WindowMode::BorderlessFullscreen(MonitorSelection::Index(0)),
        focused: true,
        cursor_options: CursorOptions {
            visible: false,
            grab_mode: CursorGrabMode::Locked,
            hit_test: true,
        },
        ..default()
    };

    app.add_plugins(DefaultPlugins.set(WindowPlugin {
        primary_window: Some(window),
        ..default()
    }))
    .add_plugins(AsepriteUltraPlugin)
    .add_plugins(player::plugin)
    .add_systems(Startup, setup)
    .run();
}

fn setup(mut commands: Commands, server: Res<AssetServer>) {
    commands.spawn(Camera2d);
    commands.spawn((
        AseSpriteAnimation {
            animation: Animation::tag("default"),
            aseprite: server.load(r"cadenza.aseprite"),
        },
        Transform::from_xyz(0., 0., 0.),
    ));
}

and the following player.rs
(posted later to bypass nitro limit)

When I compile and try pressing the relevant keys, ZERO movement is seen in the player character, why is this?

#
use bevy::prelude::*;

#[derive(Component, Reflect)]
struct Player {
    colliding: bool,
}

impl Player {
    fn new() -> Self {
        Self { colliding: false }
    }

    fn colliding(&self) -> bool {
        self.colliding
    }
}

#[derive(Component, Reflect)]
enum Move {
    Left,
    Right,
    Jump,
    NoOp,
}

impl From<KeyCode> for Move {
    fn from(key: KeyCode) -> Self {
        match key {
            KeyCode::KeyA | KeyCode::ArrowLeft => Self::Left,
            KeyCode::KeyD | KeyCode::ArrowRight => Self::Right,
            KeyCode::KeyW | KeyCode::ArrowUp | KeyCode::Space => Self::Jump,
            _ => Self::NoOp,
        }
    }
}

fn setup(mut cmd: Commands) {
    let player = Player::new();
    let transform = Transform::from_xyz(0., 0., 0.);
    cmd.spawn((player, transform));
}

fn update(keys: Res<ButtonInput<KeyCode>>, mut query: Query<(&mut Transform, &mut Player)>) {
    query.iter_mut().for_each(|(mut transform, mut _player)| {
        for key in keys.get_pressed() {
            match Move::from(*key) {
                Move::Left => transform.translation.x -= 1.,
                Move::Right => transform.translation.x += 1.,
                Move::Jump => transform.translation.y += 1.,
                Move::NoOp => (),
            }
        }
    });
}

pub fn plugin(app: &mut App) {
    app.register_type::<Player>();
    app.add_systems(Startup, setup);
    app.add_systems(Update, update);
}
viral lagoon
#

When you say "ZERO movement is seen in the player character", what are you expecting vs what are you seeing?

#

I see that you're spawning a Player with a Transform, but there's no visual elements attached to it

brisk nebula
#

i am going to shoot myself in the foot by the end of this project