αα
αααα»αα’αααααααααααα»αααΉααα·ααΆαα’αααΈαααα·αααααααααΆαααααα½ααααααααα»ααααα»αααΆαα’αα·ααααααα ααααααΌα
αα½ααα
αααα»α Rust α ααΆααααΌαα
αααΆαααααααα αα 24 ααααααΎααααΈαααααΎαααααααααΎααΆα (ααΆαα
αααΎααααα»αααααΎααΆααα
αααααααΆα
α¬ααααα
α»ααααααΆα α)α α αααααααααΊαα
ααααΆαααΈααΆααααα
αα ααα»αααααααα»ααα·αααΆαααα·αααααααΉαααααααααααΆααα αααα»αααΉαα
αααααααααΌαα’αααΈααααααα»αααΆαααα αα·αααΆααααααααα½αα
ααα½αααααααα»αααΆαααααΎαα
ααααααααΎαα ααααααΆααααΈααααΌαα
Skillbox ααααΆαα αααααα·ααααΆααΆαααααααααααααααΈαααααΆα
"αααα»αααΆα’ααααααααΎαααα ααααα PRO" .ααΎαααααΉαα αααααΆααα’αααα’αΆαααΆααα’αααα "Habr" - ααΆααααα α»αααααα 10 rubles αα αααα α»αααααααααα»ααααααα·ααααΆ Skillbox ααΆαα½ααααααααΎαααααΌαααααααααααΆα "Habr" α
α ααα»α’αααΈααΆαααΆα αααα?
αααα»αααΆαααααΎαααΎαααΆααΆααα αααααΆααααα»αααΆαααΊααΏαααα’αααΆα αααΎαα’αααΈααΆ α αΎααααα»αααΎαααΆααΆααΆααααααΆααααααΆαααα·αααΆααα αααα»αααΆαα’αα·ααααααα ααααα αα»αααααααααα αααα αααα»αααΆααααα·ααααααα·α αα½α αααα»αααΆαα’αα·αααααααααααα·ααΈααΆαααααα αααα»α Rust α αααααΊαααααααααΆααααΎααααΈαααααα±αααααα»αααΌαα’αΆααααααααααααΈααΆααα ααααααααα ααααα
α ααα»α’αααΈααΆαααΆα αααα αα·αααααααα ααααα’αααΈ?
ααΆααααααΎαα ααααααΊαααααΆα! αααα»αααααΆααααΆααΆααΆαα ααα»ααα αααΎαααα ααα»αααααααααΆαααααααα "αααα" αααα»αααααΎαααΎααααααΆαααααααα·αααΆαααααα·ααααα·ααααααααΆαα½αααΆαααΆαααααααΆαααααααα»αα ααΎαααααΆα ααααα’αααΈ? αααα»αβα ααβαααααΎαβα’αααΈβαα½αβααΌα βααΆβαααΆαααΈαβαααααβααααΎβααΈα‘αΆβααΆαβααΌαβααΆααβαααβαα½αβαααα αΌαβααΆαα Cities Skylines, Zoo Tycoon, Prison Architect αα·αβααΈα‘αΆβααΆαβααΌαααΆααβαααα½αβα―αα ααΆααΌαα ααΆβααΆαβααααΆαβααΆβα ααααβα’αααΈβααΆααΆβααΆαβααΌαβααΆααβαααβααΆαβααα»αααβααβαααα
ααΆαααααα»ααααααΆααα αα ααααα
αααα»αβα ααβααααΎ Rust ααα»ααααβαααα»αβαα·αβααΉαβα αααΆααβααΆβααΎβααΆβααααΌαβα αααΆαβαααβααα»ααααΆαβααΎααααΈβα αΆααβααααΎαα αααα»ααα·αα ααααααα pixel shaders αα·αααααΎ drag-n-drop αα ααΌα αααααααα»ααααα»αααααααααααααααααΆααααα’αΆα ααααααααΆααααα»αα
αααα»αααΆαααααΎαααααΆαααΆααααααααα ααααααα»αα αααααααααΆαα½αα’αααα
ααΎααΎααααα»αααααα α‘αΎα - αααααΈααααΆαα» Rust αααααααΌαααΆααααααΆααααΆαα’αα·ααααααα αααααα αααα Rust dev subreddit; αα·ααααααΈααααα₯ααα·αααααα
αααα»αααΆααα»ααααααΆαααΈαα αααα Rust ααΆα αααΎα ααΈαααα»αααααΎαααΎα Piston αα·α ggezα αααα»αααΆααα½ααα½αααααααααα»αααααΎααΆαααΎαααααααα»αα αα ααΈαααα αα αααα»αααΆαααααΎαααΎα ggez αααααααΆα αΆααααΌα ααΆααααααααΆααααααΆααααΆαα’αα»ααααα αααα 2D ααΌα αα½αα αα ααΆαααααααααααΌαα»ααααα Piston ααΊαααα»αααααΆαααααααααΆααα’αααα’αα·ααααααααααΈααααα (α¬α’ααααααααααΎααΆαααΆαα½α Rust ααΆααΎαααααΌα) α
αα ααΆααααααααα αααα
αααα»αααΆαα αααΆαααααααααα·αα’αααΈααααΆααααααααααααααααα ααα αΆαααααΌαααΊααααΎα±αα "ααΈ" αααααΆαααα·αααΈααΆαααΆαααΌαααΆααα αααααΆααααααΌαααΎαα»ααα·ααα»ααΆααΆα α αΎααααα αΆαα α’ααααααααααΌαααααΆαααααΆαααααααααΎαα‘αΎαααΆααααααααΆα ααΎαααΈααα ααΆαα½αααααΆααααααα·ααΈαα·αααααααα’αα»ααααΆαα±ααα’αααααααααααα»αααααααΈ αα·ααα»ααΆααΆα ααα»ααααααΆαα·ααα·ααααααααααα
αααααΆααα·αααααααααΆα αααα»αααΆααα ααααΎααΆαα
ααΆααααααΎαα αααα
ααΆαα αΆααααααΎαα αααααα αα·αα’ααΌααΈ
αααα»αααΆαααα§ααΆα αααααΈ ggez α αΎαααα½αααΆααααααααα½ααα ααΎα’ααααααα α’ααα αΆαααααα! α₯α‘αΌααααα’ααΌααΈαα½αα ααα½αα αααα»αβαα·αβααΆβααΆβααΆβααΆαβααα’βαααα»αβααΆαβααβαααα½αβα ααβααΈβαααα·αβααβααααα»βα ααααα ααααα»ααΈαα½ααααααΌααααααα αΆα αα·αααααΎαα αα α»ααααααααΆαααΌα αααααΆααααααΆαααα ααΈαααα
// the game object trait
trait GameObject {
fn update(&mut self, _ctx: &mut Context) -> GameResult<()>;
fn draw(&mut self, ctx: &mut Context) -> GameResult<()>;
}
// a specific game object - Circle
struct Circle {
position: Point2,
}
impl Circle {
fn new(position: Point2) -> Circle {
Circle { position }
}
}
impl GameObject for Circle {
fn update(&mut self, _ctx: &mut Context) -> GameResult<()> {
Ok(())
}
fn draw(&mut self, ctx: &mut Context) -> GameResult<()> {
let circle =
graphics::Mesh::new_circle(ctx, graphics::DrawMode::Fill, self.position, 100.0, 2.0)?;
graphics::draw(ctx, &circle, na::Point2::new(0.0, 0.0), 0.0)?;
Ok(())
}
}
αααααααααΌααααααΆααααααα±αααααα»αααΌααααααΈααααα»αααααααααα’αΆαααααααα»αα’αΆα ααααΎαα αα α»ααααααααΆα αα·ααααα αΆααα αααα»αααααα·ααα»ααααααααααα’αΆαααΌα ααααΆα
mpl event::EventHandler for MainState {
fn update(&mut self, context: &mut Context) -> GameResult<()> {
// Update all objects
for object in self.objects.iter_mut() {
object.update(context)?;
}
Ok(())
}
fn draw(&mut self, context: &mut Context) -> GameResult<()> {
graphics::clear(context);
// Draw all objects
for object in self.objects.iter_mut() {
object.draw(context)?;
}
graphics::present(context);
Ok(())
}
}
main.rs ααΊα
αΆαααΆα
ααααααααΆααΆαααααααααααΆααααααΌαα αααα»αααΆαα
αααΆααααααααα·α
ααΎααααΈαααααα―αααΆα αα·ααααααΎαααααα·αααααΆααα
ααΆααααααααααα αααααΆα’αααΈαααααΎααα
αααααΆααααΈαααα
ααααΆα -> αααααΊααΆααααααααααααααααααααααα·ααΆααα’αααααα·ααα
(ααΌαααΆα)
src
- α’αααααΆα
- game_object.rs
β αααααα.rs
- main.rs -> ααααα·ααα»ααα
ααα»ααα ααΆαα αα·αααΌαααΆα
ααα αΆααααααΆααααΊαααααΎαααααα»α αααααα»αααα α αΎααααα»αααΌαααΆαα α’αααΈααααααααΆααα½αααααααΌαααΆαααΆαααααα ααΎααΌαααααΆααα 32 * 32 ααααΏαα
αα»ααΆααΆαααΈα‘αΆααΆαααΌαααΆαα
αααααΆααβααΈβααΆαβαα·ααααΆβααΈβα’αααΈβαααβααΈααΆαβααΆαβααΌαβααΆααβααΎαβαα βααΌα βααΆ αααα»αβααΆαβαααααα βα α·αααβααααΎβααΆβααΈβααααΏα 4*2α ααααΌαβααβα’αΆα βααααΎβααΆβααΌαβααα αβαααβααΆα α¬βα’αΆα βααΆααβαααα‘αΆβα ααα½α 8 ααΆα αβααΈβααααΆα ααα»αααααααααΆαααααααα»αααΆαααΉαααΆααΆαααααααΏαααΈαααα»ααααααααααααΌαααΆα α αΎααααααΆααΌαα ααα»α
ααα»αααααΎαααΆααααα‘αΆααΈαααααααα α‘ αα·α α’α
αααααααΈαα½αααααα»ααΆααΆαααΆααααα‘αΆααααΏα 1 α¬ ααααΏα 2 α αα½αααΆα’αΆα ααααΌαααΆαααΆααα ααααΆααααααΆ α¬αααα‘αα 180 ααΊααααα
ααααααΆααααααΌαααααΆα (ααΆααα½αααααα»αααααΆ)
αααααΆααβααΈβαααα»αβα’αΆα βαααααα βααΆαβααΆαβαααα αΆαβααα ααααα ααα»ααα αα·αβαααααΈ αααα»αβααΆαβααΉαβααΆβααααβααα‘αΎαβααΌαααααΆαβααβααααΌαβααΆαβαααα αααα»αααΆαα’αα»ααααααΆααΌα αααα αα αααα α»α αααΌαα»α ααααα»ααααΌαααΆαααααΎαααΎα α αΎαααΆαα α»α ααΆααααΆαα αααααααααα ααααΆαα ααΌα αααα αααΌαα»α 1 α’αα»ααααΆαα±ααα’αααααααΎαααΎααα»ααΆααΆα α αΎααααΌαα»α 2 α’αα»ααααΆαα±ααα’αααααααΎαααΎαα’ααααααα
ααα»ααααααΎααα ααααααΌαα αΆαααΆ 1 αα·α 2 ααΆαααααααΆαααΆ ααΌα αααααααα»αααΆααααααα wireframe ααΎααααΈα±ααααΆα αααΆααααΆααΎααααα»αα½αααΆααααΌαααΆαααααΎαααΎαα αααααΆα’αααΈαααααΆααΎααα α
αααα½αααααΆαααααααα αα·αααΆααααααα’
α₯α‘αΌαααααααα»αααΆαααααα»α ααααααΆα αααΎαα ααα»ααα αα»ααΆααΆα αα·αααΆααα ααα»ααααααΎααααΈα±αα wireframes ααααΎαααΆα α’αααααΆαααααα»ααΈαα½ααα αΆαααΆα αααααΌαααααΆααααΆααΎααααα»αααα½αα―ααααα·ααα αααα»ααααααααα αΆα α¬ααΆααΎααα»αααααΌαααΆαααΌααααΆαααΆααααα ααααα·αααΆααααα½αααα
ααΆα αΆααααΌα ααΆαααα»αααΆ ααααΆααααααααα αΆαααΆα αααααΌααα·αα‘αΎααα·αααΆαααααααααααα αΆαααΈαααααααααα½αα ααα½αα
- ααΆαααΆαα’αααααΆαααααααα αΆα αα·αα’αΆααααααααα½αα―αααΊααΆαααα αΆαα½α ααΈαααααα’αααααΆααααααΉααα·αα’αΆα "ααΉα" ααΌαα’αααΈαααααΆααααΌαααΆαααααααααΆααααΌααααα αΆα - ααΌαααΆα αα·αααα»αααααα
- αααααα§ααααααααααΆααααααΆααααααΌααααααααααααααα· αα·αα’αΆαααααα·αα·ααΆαααΆαα’αααααΆαααΈαα½αα (α§ααΆα ααα αααααααααααααα· is_build_mode α¬ααΆααααα αΆαα’αΆαααααα·αα·ααΆ)α ααΆααΉαα’αΆα ααααΎααααααΆα αααααΈααΆαα·αααΆααα·ααΈααααΉαααααΌαααΎααααΈα’αα»ααααααΆαα αααα»α Rust αααααα α’αααΈααααααα»αααααΌαααΆαααΊαααααα
- α§ααααααααααΆααα’αααααααααααΆαα’αααααΆαααΊα αΆαααΆα αααΎααααΈα αΆααααΆααααα»ααααα αα»ααΆααΆαα
- α’αααααΆααααα½αααααΊααΆααααΆααααα·αααααα αα·ααααααα·ααααΆαααα ααααΈααΆαααααααααααααΆαααΆαααα ααα
αααα»αβααΆαβααααΎβααΆαβααααΆαβααααΆαβαα½αβα ααα½αβααααααβααα α αΎαβααΆαβααβααΎαβααααΆαααααααα
ECS - αααααααααααΆαααΆαα’αααααΆα αααααααΌαααΆαααααΎααααΆααααΆααΌαα αα αααα»αα ααααα αααααΊααΆα’ααααααααααααααα ECSα
- αα·ααααααααααΌαααΆααααααα ααααΈαααααα·ααααΆ;
- αααΆαααΆααααα½αα±αααααα;
- ααααΆααααααααααααααααααΎαα·ααααααα
ECS ααααΌαααΆαααααααααααααααααααααα·αααΆααΌαααααΆαα ααα½αααΈα
- α’αααααΆα - ααααααααααααα»αααα’ααααααααα’ααααααααΆααααα αα ααΎ (ααΆα’αΆα ααΆα’αααααα ααΆαα α¬α’αααΈαααααααα);
- αααΆαααΆαα» - α’αααααΆαααααΌαααΆααααααΎαα‘αΎαααΈαα½αααα α§ααΆα ααα - αααα αΆααααΆαααΆα ααΈααΆαα αα·ααααααααααα ααΆαααααααΊααΆααααΆαααα·αααααα;
- αααααααα - αα½αααααααΎααΆααααααα» αα·ααααΆαααΆαα» ααΌααα½αααΆααα₯αα·ααΆαα αα·ααααααα·ααααΆαααααα’ααααΎαα·αααααααααα α§ααΆα αααβαα½αβααΊβααΆβααααααααβαααα αΆαβαααβααααΎβα‘αΎαβαα·αβααΆαβαααααβα’αααααΆαβααΆααα’ααβαααβααΆαβαααΆαααΆαα»βαααα αΆαβ α αΎαβααααΎβααΆαβαααα αΆαα
αααααΆααααΈαα·ααααΆααΆα αααΆααααΆ ECS αααααααΆααααα αΆααΌα ααΆααααααα
- ααΆαααααΎααααΆααααααααααα½αα±ααααααααΎααααΈαααα αα’αααααΆαααΆααααααααα
- αααα αΆααααΆαα ααααΌαα αααααααΆααααααααααααααααααααα;
- αααααααΎαα·ααΈααΆαααααααΌα ααΆ is_build_mode ααΎααααΈαααααΆαααααα·ααααΆ wireframe αα αααααααααα - αα αααα»ααααααααααααα αΆαα
αααααΆα’αααΈαααααΆαααΎαα‘αΎααααααΆααααΈα’αα»αααα ECS α
ααααΆα -> αααααΊααΆααααααααααααααααααααααα·ααΆααα’αααααα·ααα
(ααΌαααΆα)
src
- αααΆαααΆαα»
β position.rs
β person.rs
β tennis_court.rs
β floor.rs
- wireframe.rs
- mouse_tracked.rs
- ααααΆα
- mouse.rs
- αααααααα
β rendering.rs
- constants.rs
β utils.rs
β world_factory.rs -> αα»αααΆααααα
ααααα·ααααα
- main.rs -> ααααα·ααα»ααα
ααΎαβα αΆααβααα»αααβαα βαα»ααΆααΆα
ECS ααΆαααααΎα±ααααΈαα·αααΆααααααΆααααα½αα α₯α‘αΌαααααααα»αααΆααα·ααΈααΆααααααααααΎααααΈαααααααα·αααααααα α’αααααΆα αα·ααααααααααααα·ααααΆαααααα’ααααΎαα·αααααααααα α αΎαααα, αα αααα»αααα, ααααΎα±ααααΆα’αΆα ααααΎαα ααΆαααΎααααΈαααα αααΆαα ααα αΆααααααΆαααααα»αα αααααα»ααΆααΆαα
ααΎαααα»αααΆαααααΎα’αααΈααααα
- αααααααα·ααααααα’αααΈαα»ααΆααΆααααααΆαααααααα αα»αααα;
- ααΆααααααααα·ααααααα’αααΈααα»ααααααααΆαα ααα αΆααα TennisCourt;
- ααΆααααααααααααααα CourtChoosingSystem αααα’αα»ααααΆαα±ααα’ααααα·ααΆαααα»ααα αα·ααα»ααΆααΆα ααααΎααα»ααΆααΆααααααΆα αα·αα ααα αΆαα’ααααααα±αααα½αααα
- ααΆααααααααααααααα PersonMovementSystem ααααααααααααα»ααααααααααΌαααΆαααααααα±αααα»ααΆααΆα α αΎαααααα·αααΎαα½ααααα·ααα ααΈααα ααααααααΌαααα»ααααα ααααααααααα½αααααααΌαααΆαα
αααααα
αααα»ααα·αααΆααΈαααΆααααα»αααΆαααααΎααΆαααΎα ααααααααΆαααααααα ααΎαααΈααααα ααα αααα»αααΈαααΆαααααααα»αααΆαααααΎ Rust ααΎααααΈαααααααΆ ααΈαααααα
- α αααααααααα±ααα’αααααΌαα’αααΈαααα’αααααααΌαααΆα;
- ααΆβααΆαβα―αααΆαβααα’βα₯αβααα αα, Rust ααΊβααΆβαααααβααα’αΆαβααΆαα;
- ααΆααααα·ααααααααΊαααααΆαα;
- α’ααααα·αα αΆαααΆα αααΆααα ααααΆαααααΌα ααΆαα αααα α¬αααααααΆαααααααααααΆαααααααα ααααααα»αααΆαααααΎααΆααΉαααΆαααα αααα»α C++ α
- αααααΎαααΊααΆααααα½αααααΎ αα·ααααααααΆαααα α»αααΆααααΆαααα’α
- ααααα·αααΎααααααα’αΆα α αααααααΆα ααα 99% αααααααααΆαααααΆααααΎαααΆα α αΎααα·αααΆααΌα αααααΆαα½αααα αααα»ααα·αααΆααΆαααα α»αα’αααα αααααααΊααα’αααα»αααααααα»αααΆαααΎαα
ααΆαα’αα·ααααααα αααααα αααα»α Rust ααΎαααα αΆααααααΎαα ααα»ααααβααΆαβαα ααααβααβααβαα½αβαααβααΆαβαααα·αααΆα αα·αβαα»αααα·αααβαααα»αβααααΎβααΆαβααΎααααΈβααΎα Rust αααβα’αααβααΆααβααααΆα ααΌα ααααα αΎα αααα»αααΎααα α’ααΆααααααΆααΆααααα»αα·αααα·αα·αα ααααααααΉααααα αΆαααααααααααΆαααΆααα½αααααααΎαα
Skillbox ααααΆαα
- αααααα·ααααΆααΆαα’ααΈαααΊαα·α
"α’αααα’αα·αααααααα»αααααΆα" .- αααααα·ααααΆααΆααααααα
"α’αααα’αα·ααααααα ααα PRO" .- αααααα·ααααΆααΆαααααααααααΆα
"α’αααα’αα·αααααα PHP ααΈ 0 ααα PRO" .
ααααα: www.habr.com