Rust กับ Game Development: ทำเกม 2D ด้วย Bevy หรือ Macroquad

Sharing is caring!

🎮 Rust กับการพัฒนาเกม

Rust ไม่ได้เป็นเพียงแค่ภาษาสำหรับ system programming หรือ web backend เท่านั้น — แต่ยังถูกใช้ในโลกของเกม 2D และ 3D ได้อย่างมีประสิทธิภาพ โดยเฉพาะเมื่อใช้ร่วมกับ Bevy และ Macroquad ซึ่งเป็น game engine ที่เขียนด้วย Rust ทั้งคู่!

🧩 Bevy vs Macroquad

  • Bevy: ใช้ ECS (Entity Component System) แบบ modern, เหมาะกับโครงสร้างที่ใหญ่และ reusable
  • Macroquad: API ง่าย เล่นได้เร็ว เหมาะสำหรับ rapid prototyping และเกมเล็ก

🚀 เริ่มต้นด้วย Bevy

ติดตั้ง dependency:




[dependencies]

bevy = “0.13”

โค้ดตัวอย่างเกม Hello World:

use bevy::prelude::*;

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_startup_system(hello_world)
        .run();
}

fn hello_world() {
    println!("Hello, Bevy World!");
}
  

🟦 วาด Sprite บนหน้าจอ

fn setup(mut commands: Commands, asset_server: Res<AssetServer>, mut materials: ResMut<Assets<ColorMaterial>>) {
    commands.spawn(Camera2dBundle::default());
    commands.spawn(SpriteBundle {
        texture: asset_server.load("textures/player.png"),
        ..default()
    });
}
  

⚡ Macroquad แบบง่ายสุด ๆ

ติดตั้งด้วย:




[dependencies]

macroquad = “0.4”

ตัวอย่างเกมที่มี sprite เคลื่อนที่:

use macroquad::prelude::*;

#[macroquad::main("Simple Game")]
async fn main() {
    let texture = load_texture("player.png").await.unwrap();
    loop {
        clear_background(BLACK);
        draw_texture(texture, 100.0, 100.0, WHITE);
        next_frame().await;
    }
}
  

🎯 เปรียบเทียบสั้น ๆ

คุณสมบัติBevyMacroquad
ระบบ ECS✅ ใช้ ECS เต็มรูปแบบ❌ ไม่มี ECS
ขนาด Engineใหญ่เล็ก
ความง่ายในการเริ่มปานกลางง่ายมาก
รองรับ Web (WASM)บางส่วน✅ รองรับดี

📚 แหล่งเรียนรู้

💬 สรุป

ถ้าคุณกำลังมองหาวิธีทำเกม 2D ด้วย Rust แบบเร็ว ๆ สนุก ๆ เริ่มจาก Macroquad ก็ได้ แต่ถ้าคุณวางแผนทำเกมแบบโครงสร้างชัดเจน ลองใช้ Bevy จะได้เรียนรู้ ECS ที่ทันสมัยด้วยเช่นกัน Rust ทำให้การพัฒนาเกมกลายเป็นเรื่องสนุก ปลอดภัย และเร็วปานสายฟ้า ⚡


บทความนี้ใช้เวลาอ่านประมาณ 20 นาที โดยทีมงาน poolsawat.com

Leave a Reply

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *