Te purei Rust i roto i nga haora 24: wheako whanaketanga whaiaro

Te purei Rust i roto i nga haora 24: wheako whanaketanga whaiaro

I roto i tenei tuhinga ka korero ahau mo taku wheako whaiaro mo te whakawhanake i tetahi keemu iti i Rust. Tata ki te 24 haora te roa ki te hanga i tetahi putanga mahi (i te nuinga o nga mahi i nga ahiahi, i nga mutunga wiki ranei). Kei tawhiti te keemu kua oti, engari ki taku whakaaro ka whai hua te wheako. Ka tohatohahia e au nga mea i akohia e au me etahi kitenga i mahia e au i te wa e hanga ana te keemu mai i te wahanga.

Ka tūtohu a Skillbox: E rua tau te akoranga mahi "He kaiwhakawhanake paetukutuku PRO ahau".

Ka whakamahara matou: mo nga kaipānui katoa o "Habr" - he utu mo te 10 rubles i te wa e whakauru ana ki tetahi akoranga Skillbox ma te whakamahi i te waehere whakatairanga "Habr".

He aha te waikura?

I whiriwhiria e au tenei reo na te mea kua rongo au i nga mea pai e pa ana ki a ia, ka kite au kua kaha haere te rongonui i roto i te whanaketanga keemu. I mua i te tuhi i te keemu, he iti noa oku wheako ki te whakawhanake i nga tono ngawari i roto i te Rust. He nui noa iho tenei ki te whai waahi ki ahau i te wa e tuhi ana i te keemu.

He aha te keemu me te aha te momo keemu?

He ngahau te hanga keemu! Ko taku hiahia he maha ake nga take, engari mo nga kaupapa "whare" ka whiriwhiria e au nga kaupapa kaore i tino tata ki aku mahi o ia ra. He aha tenei keemu? I pirangi ahau ki te hanga i tetahi mea penei i te simulator tennis e whakakotahi ana i nga Cities Skylines, Zoo Tycoon, Prison Architect me te tennis ano. I te nuinga o te waa, he keemu e pa ana ki tetahi whare wananga tenehi ka tae mai nga tangata ki te takaro.

Whakangungu hangarau

I pirangi au ki te whakamahi i te Rust, engari kaore au i te tino mohio ki te nui o nga mahi hei timata. Kaore au i te hiahia ki te tuhi i nga karumaru pika me te whakamahi drag-n-drop, no reira i rapu au i nga otinga tino ngawari.

I kitea e au nga rauemi whai hua ka tohatoha ahau ki a koe:

I tirotirohia e au etahi miihini keemu Rust, i te mutunga ka kowhiri i te Piston me te ggez. I tutaki ahau ki a raatau i te wa e mahi ana i tetahi kaupapa o mua. I te mutunga, i whiriwhiria e au te ggez na te mea he pai ake mo te whakatinana i tetahi keemu 2D iti. He uaua rawa te hanganga o te Piston mo te kaiwhakawhanake tauhou (tetahi ranei e mahi tahi ana me Rust mo te wa tuatahi).

Hanganga keemu

He wa roa ahau ki te whakaaro mo te hoahoanga o te kaupapa. Ko te mahi tuatahi ko te hanga "whenua", tangata me nga papa tennis. Me huri haere nga tangata i nga kooti me te tatari. Me whai pukenga nga kaitakaro kia pai ake i te waa. I tua atu, me noho he etita e taea ai e koe te taapiri i nga tangata hou me nga kooti, ​​engari kua kore he utu.

Ka whakaaro ahau ki nga mea katoa, ka mahi ahau.

Te hanga keemu

Tīmatanga: Porowhita me te tangohanga

I tangohia e ahau he tauira mai i a ggez ka whiwhi porowhita ki te mata. Mīharo! Inaianei etahi tangohanga. I whakaaro ahau he pai ki te wehe atu i te whakaaro o tetahi mea keemu. Ko ia ahanoa me whakaputa me te whakahou kia rite ki te korero i konei:

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

I homai e tenei waahanga waehere he rarangi pai o nga taonga ka taea e au te whakahou me te whakaputa i roto i te kohanga pai.

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 he mea tika na te mea kei roto katoa nga rarangi waehere. He iti nei taku wa ki te wehe i nga konae me te arotau i te hanganga whaiaronga. Ko te ahua tenei i muri i tera:
rauemi -> kei konei nga rawa katoa (whakaahua)
src
- hinonga
— game_object.rs
— porowhita.rs
— main.rs -> koropiko matua

Tangata, papa me nga whakaahua

Ko te mahi e whai ake nei ko te hanga i tetahi mea keemu Tangata me te uta whakaahua. Me hanga nga mea katoa i runga i te kaupapa 32 * 32 taera.

Te purei Rust i roto i nga haora 24: wheako whanaketanga whaiaro

Ko nga koikoi Teneti

Whai muri i taku ako he aha te ahua o nga kooti tennis, ka whakatau ahau ki te hanga mai i nga taera 4*2. I te timatanga, i taea te hanga i tetahi ahua penei te rahi, te whakakotahi ranei i nga taera motuhake e 8. Engari ka mohio ahau e rua noa nga taera ahurei e hiahiatia ana, koinei te take.

I te katoa, e rua nga taera penei: 1 me te 2.

Ko ia waahanga o te kooti he taera 1, he taera 2 ranei. Ka taea te whakatakoto kia rite ki te tikanga, ka huri ranei kia 180 nga nekehanga.

Te purei Rust i roto i nga haora 24: wheako whanaketanga whaiaro

Aratau hanga taketake (huihui).

I muri i taku whakahaerenga ki te whakatutuki i te whakaputanga o nga waahi, nga tangata me nga mapi, ka mohio ahau me hiahia ano te aratau huihuinga taketake. I whakatinanahia e ahau penei: ka pehia te paatene, ka tohua te ahanoa, ka waiho ma te panui ki te waahi e hiahiatia ana. Na, ko te paatene 1 ka taea e koe te kowhiri i tetahi kooti, ​​ko te paatene 2 ka taea e koe te kowhiri i tetahi kaitakaro.

Engari me maumahara tonu tatou he aha te tikanga o te 1 me te 2, no reira ka tapirihia e ahau he anga waea kia marama ai ko tehea mea i tohua. Ko te ahua tenei.

Te purei Rust i roto i nga haora 24: wheako whanaketanga whaiaro

Te hoahoanga me nga paatai

Inaianei he maha aku taonga keemu: nga tangata, nga kooti me nga papa. Engari kia mahi ai nga anga waea, me korero ki ia hinonga ahanoa mehemea kei te aratau whakaaturanga nga taonga, he mea tuhi noa ranei tetahi anga. Ehara tenei i te tino watea.

Ko te ahua ki ahau me whakaaro ano te hoahoanga i runga i te huarahi e whakaatu ana etahi here:

  • He raruraru te whai hinonga ka huri me te whakahou ake i a ia ano na te mea kare e taea e taua hinonga te "mohio" he aha te mea ka tukuna - he ahua me te anga waea;
  • te kore o te taputapu mo te whakawhiti taonga me te whanonga i waenga i nga hinonga takitahi (hei tauira, te taonga is_build_mode, te whakaatu whanonga ranei). Ka taea te whakamahi i nga taonga tuku iho, ahakoa kaore he huarahi tika ki te whakatinana i roto i te Rust. Ko te mea i tino hiahiatia e au ko te whakatakotoranga;
  • i hiahiatia he taputapu mo te taunekeneke i waenga i nga hinonga hei toha tangata ki nga kooti;
  • ko nga hinonga ano he ranunga o nga raraunga me nga arorau i tere kore ai te mana.

I rangahau ano ahau ka kitea te hoahoanga ECS - Pūnaha Waahanga Hinonga, e whakamahia nuitia ana i roto i nga keemu. Anei nga painga o te ECS:

  • kua wehea te raraunga mai i te arorau;
  • titonga hei utu mo te tuku iho;
  • hoahoanga-raraunga.

Ko te ECS e tohuhia ana e nga kaupapa matua e toru:

  • hinonga - te momo ahanoa e tohuhia ana e te kaitautuhi (he kaitakaro, he poi, he aha atu ranei);
  • nga waahanga - he mea hanga nga hinonga. Tauira - te whakaatu i te waahanga, nga waahi me etahi atu. He whare putunga raraunga enei;
  • Pūnaha - ka whakamahia e ratou nga taonga me nga waahanga, me nga whanonga me nga arorau e pa ana ki enei raraunga. He tauira he punaha whakaputa e huri haere ana i roto i nga hinonga katoa me nga waahanga whakaputa me te mahi i te whakaputa.

I muri i te ako, ka marama kua whakatauhia e ECS nga raru e whai ake nei:

  • te whakamahi tahora hei utu tuku iho ki te whakarite i nga hinonga nahanaha;
  • te whakakore i te whakahiato waehere ma nga punaha whakahaere;
  • te whakamahi tikanga penei i te is_build_mode ki te pupuri i te arorau anga waea ki te waahi kotahi - i roto i te punaha whakaputa.

Koinei te mea i tupu i muri i te whakatinanatanga o te ECS.

rauemi -> kei konei nga rawa katoa (whakaahua)
src
- nga waahanga
—turanga.rs
— tangata.rs
— tennis_court.rs
— papa.rs
- anga waea.rs
— kiore_tracked.rs
- rauemi
—kiore.rs
- nga punaha
— rendering.rs
— tamau.rs
— utils.rs
— world_factory.rs -> nga mahi wheketere o te ao
— main.rs -> koropiko matua

Ka tohua e matou nga tangata ki nga kooti

Ko te ECS kua ngawari ake te oranga. Inaianei he huarahi nahanaha ahau ki te taapiri raraunga ki nga hinonga me te taapiri i te arorau i runga i taua raraunga. Na tenei, na tenei i taea ai te whakarite i te tohatoha tangata ki waenga i nga kooti.

He aha aku mahi:

  • he raraunga taapiri mo nga kooti kua tohua ki te Tangata;
  • he raraunga taapiri mo nga tangata kua tohatohahia ki TennisCourt;
  • tāpirihia te CourtChoosingSystem, ka taea e koe te tātari i nga tangata me nga kooti, ​​ka kitea nga kooti e waatea ana me te tohatoha i nga kaitakaro ki a raatau;
  • i tapirihia he PersonMovementSystem, e rapu ana i nga tangata kua tohua ki nga kooti, ​​a ki te kore ratou i reira, ka tukuna nga tangata ki te waahi e tika ana kia noho.

Te purei Rust i roto i nga haora 24: wheako whanaketanga whaiaro

Kohia ana

I tino harikoa ahau ki te mahi i tenei keemu ngawari. I tua atu, kei te koa ahau i whakamahia e ahau a Rust ki te tuhi, na te mea:

  • Ka hoatu e te waikura nga mea e hiahiatia ana e koe;
  • he pai nga tuhinga, he tino huatau te waikura;
  • he hauhautanga te rite;
  • e kore koe e whai ki te tahuri ki te cloning, tārua me etahi atu mahi rite, e ahau maha i roto i C ++;
  • He tino ngawari nga whiringa ki te whakamahi me te hapai pai i nga hapa;
  • Mena i taea te whakahiato te kaupapa, ka 99% o te wa e mahi ana, me te rite tonu. Ki taku whakaaro ko nga karere hapa kaikoipi te mea pai kua kite ahau.

Ko te whakawhanaketanga keemu i roto i te Rust ka timata noa. Engari tera ano tetahi hapori pumau me te tino nui e mahi ana ki te whakatuwhera i te Waikura ki te katoa. No reira, ka titiro whakamua ahau ki te reo kei te heke mai, me te titiro whakamua ki nga hua o a tatou mahi tahi.

Ka tūtohu a Skillbox:

Source: will.com

Tāpiri i te kōrero