Skip to content

Instantly share code, notes, and snippets.

@amirrajan
Created April 23, 2026 16:04
Show Gist options
  • Select an option

  • Save amirrajan/0b2af8b0da5da90162d19c2f15673636 to your computer and use it in GitHub Desktop.

Select an option

Save amirrajan/0b2af8b0da5da90162d19c2f15673636 to your computer and use it in GitHub Desktop.
DragonRuby Game Toolkit vs Bevy sample app
class Game
attr_dr
def initialize
@player = { x: 640 - 50,
y: 360 - 50,
w: 100,
h: 100,
path: "sprites/square/blue.png" }
@boundary_left = 300
@boundary_right = 900
end
def tick
@player.x += inputs.left_right * 10
@player.x = @player.x.clamp(@boundary_left, @boundary_right)
outputs.primitives << @player
end
end
module Main
def boot args
@game = Game.new
end
def tick args
@game.args = args
@game.tick
end
end
//! Renders a 2D scene containing a single, moving sprite.
use bevy::prelude::*;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_systems(Startup, setup)
.add_systems(Update, sprite_movement)
.run();
}
#[derive(Component)]
enum Direction {
Left,
Right,
}
fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
commands.spawn(Camera2d);
commands.spawn((
Sprite::from_image(asset_server.load("branding/icon.png")),
Transform::from_xyz(0., 0., 0.),
Direction::Right,
));
}
/// The sprite is animated by changing its translation depending on the time that has passed since
/// the last frame.
fn sprite_movement(time: Res<Time>, mut sprite_position: Query<(&mut Direction, &mut Transform)>) {
for (mut logo, mut transform) in &mut sprite_position {
match *logo {
Direction::Right => transform.translation.x += 150. * time.delta_secs(),
Direction::Left => transform.translation.x -= 150. * time.delta_secs(),
}
if transform.translation.x > 200. {
*logo = Direction::Left;
} else if transform.translation.x < -200. {
*logo = Direction::Right;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment