Ku ciyaarista Rust gudaha 24 saacadood: waayo-aragnimada horumarinta shakhsi ahaaneed

Ku ciyaarista Rust gudaha 24 saacadood: waayo-aragnimada horumarinta shakhsi ahaaneed

Maqaalkan waxaan ka hadli doonaa waayo-aragnimadayda shakhsi ahaaneed ee horumarinta ciyaarta yar ee Rust. Waxay qaadatay ilaa 24 saacadood in la abuuro nooca shaqada (badanaa waxaan shaqayn jiray fiidkii ama maalmaha fasaxa ah). Ciyaartu way ka fog tahay in la dhammeeyo, laakiin waxaan filayaa in khibraddu ay noqon doonto mid faa'iido leh. Waxaan la wadaagi doonaa wixii aan bartay iyo indha-indhayn aan sameeyay markii aan ciyaarta ka soo dhisayay meel eber ah.

Skillbox waxay ku talinaysaa: Koorso wax ku ool ah oo laba sano ah "Waxaan ahay horumariye mareegaha PRO".

Waxaan xusuusineynaa: dhammaan akhristayaasha "Habr" - qiimo dhimis ah 10 rubles marka la qorayo koorso kasta oo Skillbox ah iyadoo la adeegsanayo koodhka xayeysiinta "Habr".

Waa maxay sababta miridhku?

Waxaan u doortay luqaddan sababtoo ah waxaan ka maqlay waxyaabo badan oo wanaagsan oo ku saabsan waxaanan u arkaa inay aad iyo aad ugu sii badanayso horumarinta ciyaaraha. Kahor intaanan qorin ciyaarta, waxaan lahaa khibrad yar oo ku saabsan horumarinta codsiyada fudud ee Rust. Tani waxay igu filan tahay inay i siiso dareen xoriyad ah marka aan qorayo ciyaarta.

Waa maxay sababta ciyaarta iyo nooca ciyaarta?

Samaynta ciyaaraha waa madadaalo! Waxaan jeclaan lahaa inay jiraan sababo badan, laakiin mashaariicda "guriga" waxaan dooranayaa mawduucyo aan aad ugu dhowayn shaqadayda caadiga ah. Waa maxay ciyaartani? Waxaan rabay inaan sameeyo wax la mid ah jilitaanka tennis-ka oo isku daraya Cities Skylines, Zoo Tycoon, Prison Architect iyo tennis lafteeda. Guud ahaan, waxay noqotay ciyaar ku saabsan akadeemiyadda tennis-ka oo ay dadku u yimaadaan inay ciyaaraan.

Tababar farsamo

Waxaan rabay inaan isticmaalo Rust, laakiin maan garanayn inta ay le'eg tahay shaqada aasaasiga ah ee ay qaadanayso bilawga. Ma aanan rabin in aan qoro shader pixels oo aan isticmaalo jiid-n-Drop, markaa waxaan raadinayay xalalka ugu dabacsan.

Waxaan helay ilo waxtar leh oo aan kula wadaagayo:

Waxaan sahamiyay dhowr matoorro ciyaarta Rust ah, ugu dambeyntii waxaan doortay Piston iyo ggez. Waxaan la kulmay iyaga oo ka shaqeynaya mashruuc hore. Dhammaadkii, waxaan doortay ggez sababtoo ah waxay u muuqatay mid ku habboon hirgelinta ciyaar yar oo 2D ah. Qaab dhismeedka qaabdhismeedka Piston aad ayuu u adag yahay horumariyaha cusub (ama qof la shaqeynaya Rust markii ugu horeysay).

Qaab dhismeedka ciyaarta

Waxa aan wakhti ku qaatay in aan ka fikiro qaab dhismeedka mashruuca. Talaabada ugu horeysa waa in la sameeyo "dhul", dad iyo garoon tennis. Dadku waa inay ku wareegaan maxkamadaha oo ay sugaan. Ciyaartoyda waa in ay lahaadaan xirfado horumaraya waqti ka dib. Intaa waxaa dheer, waa inuu jiraa tifaftire kuu oggolaanaya inaad ku darto dad cusub iyo maxkamado, laakiin tani hadda bilaash maaha.

Markii aan wax walba ka fikiray, waxaan shaqo galay.

Ciyaar abuur

Bilawga: Goobo-wareegyo iyo Qoraallo

Waxaan tusaale ka soo qaatay ggez oo waxaan ka helay goobaabin shaashadda. Cajiib! Hadda qaar ka mid ah qoraallada. Waxaan u maleeyay inay fiicnaan lahayd in laga fogaado fikradda shay ciyaarta. Shay kasta waa in la sameeyaa oo la cusboonaysiiyaa sida halkan lagu sheegay:

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

Qaybtan koodka ah ayaa i siisay liis wanaagsan oo walxood oo aan dib u cusbooneysiin karo oo aan ku bixin karo si siman oo fiican.

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 waa lagama maarmaan sababtoo ah waxay ka kooban tahay dhammaan khadadka koodka. Waxaan ku qaatay waqti yar kala saarista faylasha iyo hagaajinta qaab dhismeedka hagaha. Tani waa sida ay u ekaatay intaas ka dib:
kheyraadka -> tani waa meesha dhammaan hantida ay taal (sawiro)
src
- hay'adaha
- game_object.rs
- goobaab.rs
- main.rs -> loop ugu weyn

Dadka, sagxadaha iyo sawirada

Talaabada xigta waa in la abuuro shayga ciyaarta qofka oo la raro sawiro. Wax walba waa in lagu dhisaa iyadoo lagu salaynayo 32*32 tiles.

Ku ciyaarista Rust gudaha 24 saacadood: waayo-aragnimada horumarinta shakhsi ahaaneed

Maxkamadaha Tennis

Ka dib markii aan bartay sida ay u egyihiin maxkamadaha teniska, waxaan go'aansaday inaan ka sameeyo 4 * 2 tiles. Markii hore, waxaa suurtagal ah in la sameeyo sawirka cabbirkan, ama in la isku daro 8 tiles oo kala duwan. Laakin markaas waxaan gartay in loo baahan yahay labo talefoon oo gaar ah, waana tan sababta.

Guud ahaan waxaan haynaa laba tiles sida: 1 iyo 2.

Qayb kasta oo ka mid ah maxkamada waxay ka kooban tahay tile 1 ama foorno 2. Waxay u goglan karaan si caadi ah ama loo rogi karaa 180 darajo.

Ku ciyaarista Rust gudaha 24 saacadood: waayo-aragnimada horumarinta shakhsi ahaaneed

Habka dhismaha aasaasiga ah (ururka).

Ka dib markii aan ku guuleystey in aan gaaro samaynta goobaha, dadka iyo khariidadaha, waxaan xaqiiqsaday in habka aasaasiga ah ee shirarka loo baahan yahay. Waxaan u hirgeliyey sidan: marka badhanka la riixo, shayga ayaa la doortaa, gujiskuna wuxuu dhigayaa meesha la rabo. Markaa, badhanka 1 wuxuu kuu ogolaanayaa inaad doorato maxkamad, badhanka 2 wuxuu kuu ogolaanayaa inaad doorato ciyaaryahan.

Laakin wali waxaan u baahanahay inaan xasuusanno macnaha 1 iyo 2, sidaa darteed waxaan ku daray fiilo-frame si aan u caddeeyo shayga la doortay. Tani waa sida ay u egtahay.

Ku ciyaarista Rust gudaha 24 saacadood: waayo-aragnimada horumarinta shakhsi ahaaneed

Qaab dhismeedka iyo su'aalaha dib u habeynta

Hadda waxaan haystaa dhowr walxood oo ugaadha ah: dad, maxkamado iyo dabaqyo. Laakin si ay fiilooyinku u shaqeeyaan, shay kastaa waxa uu u baahan yahay in loo sheego in shayada laftoodu ay ku jiraan qaabka bandhiga, ama in firam si fudud loo sawiray. Tani maaha mid aad u habboon.

Waxay iila muuqatay in qaab-dhismeedku uu u baahan yahay in dib loogu fakaro si loo muujiyo xaddidaadyo:

  • Lahaanshaha koox wax soo saarta oo dib u cusbooneysiisa lafteeda waa dhibaato sababtoo ah kooxdaasi ma awoodi doonto inay "ogto" waxa ay tahay inay bixiso - sawir iyo xargo;
  • la'aanta qalab lagu isweydaarsado hantida iyo habdhaqanka ka dhexeeya hay'adaha gaarka ah (tusaale ahaan, is_build_mode hantida ama samaynta habdhaqanka). Waa suurtagal in la isticmaalo dhaxalka, inkastoo aysan jirin hab ku habboon oo lagu hirgeliyo Rust. Waxa aan runtii u baahnaa waxay ahayd qaabka;
  • qalab loogu talagalay isdhexgalka ka dhexeeya hay'adaha ayaa loo baahan yahay si dadka loogu meeleeyo maxkamadaha;
  • Hay’adaha laftoodu waxay ahaayeen xog iyo caqli-gal isku-dhaf ah oo markiiba faraha ka baxay.

Waxaan sameeyay cilmi-baaris dheeraad ah oo aan helay dhismaha ECS - Nidaamka Qaybaha Hay'adda, kaas oo inta badan loo isticmaalo ciyaaraha. Waa kuwan faa'iidooyinka ECS:

  • xogta waxaa laga soocay macquulka;
  • halabuurka halkii dhaxal;
  • qaab-dhismeedka xogta-centric.

ECS waxaa lagu gartaa saddex fikradood oo aasaasi ah:

  • hay'ado - nooca shayga uu tilmaamuhu tilmaamayo (waxay noqon kartaa ciyaaryahan, kubad, ama wax kale);
  • qaybaha - hay'aduhu waxay ka kooban yihiin iyaga. Tusaale ahaan - qaybta samaynta, goobaha iyo kuwa kale. Kuwani waa bakhaarrada xogta;
  • Nidaamyada - waxay isticmaalaan walxaha iyo qaybaha labadaba, oo lagu daray dabeecad iyo caqli-gal ku salaysan xogtan. Tusaaluhu waa habka wax-is-beddelka kaas oo ku celceliya dhammaan hay'adaha leh qaybaha samaynta oo sameeya samaynta.

Ka dib markii ay daraasad ku samaysay, waxaa caddaatay in ECS ay xalliso dhibaatooyinka soo socda:

  • iyada oo la adeegsanayo qaabaynta beddelka dhaxalka si loo habeeyo hay'adaha si nidaamsan;
  • ka takhalusida koodhka koodka iyada oo loo marayo hababka xakamaynta;
  • iyadoo la adeegsanayo hababka sida is_build_mode si loo ilaaliyo caqliga fiilo-frame isla meel - nidaamka wax-bixinta.

Tani waa waxa dhacay ka dib hirgelinta ECS.

kheyraadka -> tani waa meesha dhammaan hantida ay taal (sawiro)
src
- qaybaha
- booska.rs
- qof.rs
- tennis_court.rs
- dabaqa.rs
- wireframe.rs
- mouse_tracked.rs
- khayraadka
-jiirka.rs
- nidaamyada
- samaynta.rs
- joogto ah.rs
- utils.rs
- world_factory.rs -> shaqada warshada aduunka
- main.rs -> loop ugu weyn

Waxaan dadka u xilsaarnaa maxkamadaha

ECS ayaa nolosha ka dhigtay mid fudud. Hadda waxaan haystay hab habaysan oo aan xogta ugu daro hay'adaha oo aan ugu daro caqli-gal ku salaysan xogtaas. Taasina, waxay suurtagelisay in la abaabulo qaybinta dadka ee maxkamadaha.

Maxaan sameeyay:

  • xogta lagu daray ee ku saabsan maxkamadaha loo xilsaaray Qofka;
  • xogta lagu daray dadka loo qaybiyey TennisCourt;
  • ku daray CourtChoosingSystem, kaas oo kuu ogolaanaya inaad falanqeyso dadka iyo maxkamadaha, ogaatid maxkamadaha la heli karo oo aad u qaybiso ciyaartoyda;
  • waxaa lagu daray PersonMovementSystem, kaas oo raadiya dadka loo xilsaaray maxkamadaha, haddii aysan halkaas joogin, u dirta dadka halka ay u baahan yihiin.

Ku ciyaarista Rust gudaha 24 saacadood: waayo-aragnimada horumarinta shakhsi ahaaneed

Soo koobid

Runtii aad ayaan ugu riyaaqay ka shaqaynta ciyaartan fudud. Intaa waxaa dheer, waan ku faraxsanahay inaan u adeegsaday Rust si aan u qoro, sababtoo ah:

  • Daxalku wuxuu ku siinayaa waxaad u baahan tahay;
  • Waxay leedahay dukumeenti aad u fiican, miridhku waa mid qurux badan;
  • joogteynta waa qabow;
  • Uma baahnid inaad miciin bido cloning, koobiyeynta ama falalka kale ee la midka ah, kuwaas oo aan inta badan ku sameeyay C ++;
  • Ikhtiyaarada aad bay u fududahay in la isticmaalo oo si fiican loo xalliyo khaladaadka;
  • Haddii mashruuca la awoodi karo in la soo ururiyo, ka dibna 99% wakhtiga uu shaqeeyo, iyo sida saxda ah. Waxaan u maleynayaa in fariimaha qaladka isku-darka ay yihiin kuwa ugu wanaagsan ee aan arkay.

Horumarinta ciyaarta ee Rust ayaa hadda bilaabanaysa. Laakin waxaa horeyba u jirtay bulsho degan oo cadaalad ah oo ka shaqaynaysa inay qof walba u furto miridhku. Sidaa darteed, waxaan mustaqbalka afka ku eegayaa rajo wanaagsan, anigoo rajaynaya natiijada shaqadayada guud.

Skillbox waxay ku talinaysaa:

Source: www.habr.com

Add a comment