Ta'alo Rust i le 24 itula: poto masani o le atina'eina o le tagata lava ia

Ta'alo Rust i le 24 itula: poto masani o le atina'eina o le tagata lava ia

I lenei tusiga o le a ou talanoa e uiga i loʻu poto masani i le atinaʻeina o se tamaʻi taʻaloga i Rust. E tusa ma le 24 itula e fai ai se lomiga galue (E tele lava ina ou galue i afiafi po o faaiuga o vaiaso). O le taaloga e mamao mai le maeʻa, ae ou te manatu o le a tauia le poto masani. O le a ou faʻasoa mea na ou aʻoaʻoina ma nisi o faʻamatalaga na ou faia aʻo fausia le taaloga mai le amataga.

Ua fautuaina e Skillbox: Lua tausaga a'oa'oga "O aʻu o le PRO web developer".

Matou te faʻamanatu atu ia te oe: mo tagata faitau uma o le "Habr" - o se faʻaitiitiga o 10 rubles pe a lesitala i soʻo se vasega Skillbox e faʻaaoga ai le code promotional "Habr".

Aisea e 'ele ai?

Na ou filifilia lenei gagana ona ua ou faalogo i le tele o mea lelei e uiga i ai ma ua ou vaaia ua atili ai ona lauiloa i le atinaeina o taaloga. Aʻo leʻi tusia le taʻaloga, e itiiti soʻu poto masani ile atinaʻeina o talosaga faigofie ile Rust. Ua lava lea e aumai ai ia te au se lagona o le saolotoga ao tusia le taaloga.

Aisea le taaloga ma o le a le ituaiga taaloga?

O le faia o taaloga e malie! Maimau pe ana i ai nisi mafuaaga, ae mo galuega faatino "fale" ou te filifilia autu e le vavalalata tele i laʻu galuega masani. O le a lenei taaloga? Na ou manaʻo e fai se mea e pei o se simulator tenisi e tuʻufaʻatasia Cities Skylines, Zoo Tycoon, Prison Architect ma tenisi lava ia. I se tulaga lautele, na avea ma se taaloga e uiga i se aʻoga tenisi lea e o mai ai tagata e taaalo.

Toleniga faʻapitoa

Na ou manaʻo e faʻaaoga Rust, ae ou te leʻi iloa tonu le tele o le eleele e manaʻomia e amata ai. Ou te leʻi manaʻo e tusi pixel shaders ma faʻaoga drag-n-drop, o lea na ou suʻeina ai ni fofo sili ona faigofie.

Na ou mauaina ni punaoa aoga ou te faasoa atu ia te oe:

Na ou suʻesuʻeina le tele o masini taʻaloga Rust, mulimuli ane filifili Piston ma ggez. Na ou tau atu ia i latou a o galue i se galuega faatino muamua. I le faaiuga, na ou filifilia ggez aua e foliga mai e sili atu ona talafeagai mo le faʻatinoina o se taʻaloga 2D laʻititi. O le fausaga faʻapipiʻi a Piston e faigata tele mo se tagata faʻavae fou (poʻo se tasi o loʻo galulue ma Rust mo le taimi muamua).

Fausaga o taʻaloga

Sa ou faʻaaluina sina taimi e mafaufau ai i le fausaga o le poloketi. O le laasaga muamua o le faia o "fanua", tagata ma malae tenisi. E tatau ona feoai solo tagata i le faamasinoga ma faatali. E tatau i tagata taaalo ona i ai tomai e faʻaleleia atili i le taimi. E le gata i lea, e tatau ona i ai se faatonu e faʻatagaina oe e faʻaopoopo tagata fou ma faamasinoga, ae e le o toe maua fua.

Ina ua uma ona ou mafaufau i mea uma, sa ou galue.

Faia o taaloga

Amata: Li'o ma Aveese

Na ou ave se faʻataʻitaʻiga mai ggez ma maua se liʻo i luga o le lau. Ofoofogia! O lea la, o nisi fa'amatalaga. Na ou manatu o le a manaia le vavae ese mai le manatu o se mea taʻaloga. O mea ta'itasi e tatau ona tu'uina atu ma fa'afouina e pei ona ta'ua iinei:

// 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(())
    }
}

O lenei fasi tulafono na tuʻuina mai ia te aʻu se lisi manaia o mea faitino e mafai ona ou faʻafouina ma tuʻuina atu i se matasele tutusa lelei.

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 e tatau ona o loʻo i ai laina uma o le code. Sa ou faʻaaluina sina taimi e vavae ese ai faila ma faʻamalieina le fausaga o le lisi. O le mea lea na foliga mai ina ua mavae lena:
punaoa -> o le mea lea o loʻo iai uma aseta (ata)
src
- fa'alapotopotoga
— game_object.rs
— li'o.rs
— main.rs -> matasele autu

Tagata, fola ma ata

O le isi laasaga o le fatuina lea o se mea ta'aloga Tagata ma uta ata. E tatau ona fausia mea uma i luga o le faʻavae o 32 * 32 tiles.

Ta'alo Rust i le 24 itula: poto masani o le atina'eina o le tagata lava ia

Taleni tenisi

Ina ua uma ona ou suʻesuʻeina foliga o malae tenisi, na ou filifili e fai mai taʻaloga 4 * 2. I le taimi muamua, na mafai ona faia se ata o lenei tele, poʻo le tuʻufaʻatasia o 8 taʻavale eseese. Ae na ou iloaina e na o le lua maa tulaga ese e manaomia, ma o le mafuaaga lea.

I le aofaʻi e lua a matou taʻaloga: 1 ma le 2.

O vaega taʻitasi o le faʻamasinoga e aofia ai le taʻavale 1 poʻo le taʻaloga 2. E mafai ona faʻataʻatia e pei o le masani pe faʻafefe 180 tikeri.

Ta'alo Rust i le 24 itula: poto masani o le atina'eina o le tagata lava ia

Faiga fa'avae (fa'apotopotoga).

Ina ua uma ona ou ausia le faʻaliliuina o nofoaga, tagata ma faʻafanua, na ou iloa ai e manaʻomia foʻi se faiga faʻapitoa faʻapotopotoga. Na ou faʻatinoina e pei o lenei: pe a oomi le ki, ua filifilia le mea, ma o le kiliki e tuʻu i le mea e manaʻomia. O lea la, o le faamau 1 e mafai ai ona e filifilia se faamasinoga, ma le faamau 2 e mafai ai ona e filifilia se tagata taalo.

Ae e manaʻomia pea ona tatou manatua le uiga o le 1 ma le 2, o lea na ou faʻaopoopoina ai se uaea faʻapipiʻi e faʻamalamalama ai po o fea mea na filifilia. O le foliga lea.

Ta'alo Rust i le 24 itula: poto masani o le atina'eina o le tagata lava ia

Fausia ma toe fa'afoliga fesili

O lea ua tele a'u mea ta'aloga: tagata, malae ma fola. Ae ina ia mafai ona galue uaea, e tatau ona taʻu atu i meafaitino taʻitasi pe o mea lava ia o loʻo i le faʻataʻitaʻiga faʻataʻitaʻiga, pe o se faʻavaa e naʻo le tusia. E le faigofie tele lenei mea.

Na foliga mai ia te aʻu e manaʻomia le toe mafaufauina o le fausaga i se auala e faʻaalia ai ni tapulaʻa:

  • O le i ai o se fa'alapotopotoga e fa'aliliu ma fa'afou ia lava ose fa'afitauli ona o le a le mafai e lena fa'alapotopotoga ona "iloa" le mea e tatau ona fa'aalia - o se ata ma se uaea;
  • leai se mea faigaluega e fesuiai ai meatotino ma amioga i le va o tagata ta'ito'atasi (mo se fa'ata'ita'iga, le is_build_mode meatotino po'o le fa'aalia o amioga). E mafai ona faʻaaogaina le tofi, e ui lava e leai se auala talafeagai e faʻatino ai i Rust. O le mea na ou matua manaʻomia o le faʻatulagaina;
  • sa mana'omia se meafaigaluega mo fegalegaleaiga i le va o faalapotopotoga e tofia ai tagata i faamasinoga;
  • o fa'alapotopotoga lava ia o se fa'afefiloi o fa'amaumauga ma fa'amatalaga na vave ona le toe pulea.

Sa ou faia nisi suʻesuʻega ma maua ai le fausaga ECS - Fa'alapotopotoga Fa'alapotopotoga, lea e masani ona faʻaaogaina i taʻaloga. O fa'amanuiaga nei ole ECS:

  • o faʻamatalaga e tuʻueseese mai le faʻatatau;
  • fatuga nai lo le tofi;
  • fa'ata'otoga fa'amaumauga.

O le ECS o loʻo faʻaalia i ni manatu faavae se tolu:

  • fa'aletino - o le ituaiga o mea o lo'o fa'asino i ai le fa'asinomaga (e mafai ona ta'alo, polo, po'o se isi mea);
  • vaega - o fa'alapotopotoga o lo'o faia i latou. Fa'ata'ita'iga - fa'aliliuina vaega, nofoaga ma isi. O faleteuoloa ia;
  • faiga - latou te fa'aogaina mea uma ma vaega, fa'atasi ai ma amioga ma fa'atatau e fa'atatau i nei fa'amaumauga. O se faʻataʻitaʻiga o se faiga faʻaliliuga e faʻasolosolo i totonu o faʻalapotopotoga uma o loʻo i ai vaega faʻaliliu ma faia le faʻaaliga.

Ina ua uma ona suʻesuʻeina, na manino mai o le ECS e foia faafitauli nei:

  • fa'aogaina le fa'atulagaina nai lo le tofi e fa'atulaga ai fa'alapotopotoga;
  • fa'ate'aina le fa'aogaina o tulafono e ala i faiga fa'atonutonu;
  • fa'aoga metotia pei o le is_build_mode e fa'amautu ai le fa'aupuga o le wireframe i le nofoaga e tasi - i le faiga fa'aliliuga.

O le mea lea na tupu ina ua uma ona faʻatinoina le ECS.

punaoa -> o le mea lea o loʻo iai uma aseta (ata)
src
- vaega
—tulaga.rs
— tagata.rs
— tennis_court.rs
— fola.rs
- wireframe.rs
— mouse_tracked.rs
- punaoa
— isumu.rs
- faiga
- rendering.rs
— constants.rs
- utils.rs
— world_factory.rs -> galuega falegaosimea a le lalolagi
— main.rs -> matasele autu

Matou te tofia tagata i le faamasinoga

ECS ua faafaigofieina le olaga. O lea ua ou maua se auala faʻapitoa e faʻapipiʻi ai faʻamatalaga i faʻalapotopotoga ma faʻaopoopo faʻamatalaga e faʻavae i luga o lena faʻamatalaga. Ma o lenei, i le isi itu, ua mafai ai ona faatulaga le tufatufaina o tagata i totonu o faamasinoga.

O le a le mea ua ou faia:

  • fa'aopoopo fa'amatalaga e uiga i fa'amasinoga tu'uina atu i Tagata;
  • fa'aopoopo fa'amatalaga e uiga i tagata tufatufaina i le TennisCourt;
  • faʻaopoopo le CourtChoosingSystem, lea e mafai ai ona e suʻesuʻeina tagata ma faamasinoga, iloa avanoa avanoa ma tufatufa atu taʻaloga ia i latou;
  • fa'aopoopoina le PersonMovementSystem, lea e va'ava'ai mo tagata ua tofia i le fa'amasinoga, ma afai latou te le oi ai, ona auina atu lea o tagata i le mea e tatau ona i ai.

Ta'alo Rust i le 24 itula: poto masani o le atina'eina o le tagata lava ia

Faʻaopoopo i luga

Sa ou fiafia tele e galue i lenei taaloga faigofie. E le gata i lea, ou te fiafia na ou faʻaaogaina Rust e tusi ai, aua:

  • E maua e le ele mea e te mana'omia;
  • o lo'o i ai fa'amaumauga sili ona lelei, E fai si aulelei le ele;
  • e malu lelei le tumau;
  • e te le manaʻomia le faʻaogaina, kopiina poʻo isi gaioiga tutusa, lea e masani ona ou faia i le C ++;
  • O filifiliga e matua faigofie lava ona fa'aoga ma taulima lelei mea sese;
  • afai na mafai ona tuufaatasia le poloketi, ona 99% o le taimi e galue ai, ma e pei lava ona tatau ai. Ou te manatu o feʻau sese o le tuʻufaʻatasiga e sili ona lelei ua ou vaʻaia.

O le atinaʻeina o taʻaloga i Rust o loʻo amata. Ae o loʻo i ai se faʻalapotopotoga mautu ma fai si tele o loʻo galulue e tatala Rust i tagata uma. O le mea lea, ou te tilotilo i le lumanaʻi o le gagana ma le faʻamoemoe, ma tulimatai atu i taunuuga o a tatou galuega masani.

Ua fautuaina e Skillbox:

puna: www.habr.com

Faaopoopo i ai se faamatalaga