Hauv tsab xov xwm no kuv yuav tham txog kuv tus kheej kev paub txog kev tsim ib qho kev ua si me me hauv Rust. Nws siv sijhawm li 24 teev los tsim cov haujlwm ua haujlwm (Kuv feem ntau ua haujlwm yav tsaus ntuj lossis hnub so). Qhov kev ua si nyob deb ntawm kev ua tiav, tab sis kuv xav tias qhov kev paub yuav tau txais txiaj ntsig. Kuv mam li qhia qhov kuv tau kawm thiab qee qhov kev soj ntsuam uas kuv tau ua thaum tsim qhov kev ua si los ntawm kos.
Kuv xaiv hom lus no vim tias kuv tau hnov ntau yam zoo txog nws thiab kuv pom tias nws tau dhau los ua neeg nyiam hauv kev txhim kho kev ua si. Ua ntej sau qhov kev ua si, kuv muaj kev paub me ntsis los tsim cov ntawv thov yooj yim hauv Rust. Qhov no tsuas yog txaus los muab kev ywj pheej rau kuv thaum sau qhov kev ua si.
Vim li cas qhov kev ua si thiab hom kev ua si?
Kev ua si yog lom zem! Kuv xav tias muaj ntau qhov laj thawj, tab sis rau cov haujlwm "tsev" kuv xaiv cov ntsiab lus uas tsis cuam tshuam nrog kuv txoj haujlwm tsis tu ncua. Qhov no yog dab tsi game? Kuv xav ua ib yam dab tsi zoo li kev sib tw ntaus pob tesniv uas ua ke nrog Cities Skylines, Zoo Tycoon, Tus Kws Lij Choj Hauv Tsev Loj thiab ntaus pob tesniv nws tus kheej. Feem ntau, nws tau dhau los ua ib qho kev ua si hais txog lub tsev kawm ntaus pob tesniv uas tib neeg tuaj ua si.
Kev cob qhia txuj ci
Kuv xav siv Rust, tab sis kuv tsis paub meej npaum li cas nws yuav siv los pib. Kuv tsis xav sau pixel shaders thiab siv luag-n-poob, yog li kuv tab tom nrhiav cov kev daws teeb meem yooj yim tshaj plaws.
Kuv tshawb nrhiav ntau lub tshuab ua si Rust, thaum kawg xaiv Piston thiab ggez. Kuv tau hla lawv thaum ua haujlwm ntawm qhov project dhau los. Thaum kawg, kuv xaiv ggez vim nws zoo nkaus li tsim nyog rau kev ua si 2D me me. Piston's modular qauv yog qhov nyuaj heev rau tus tsim tawm tshiab (lossis ib tus neeg ua haujlwm nrog Rust thawj zaug).
Game qauv
Kuv tau siv qee lub sij hawm xav txog cov architecture ntawm qhov project. Thawj kauj ruam yog ua "av", tib neeg thiab tennis lub tsev hais plaub. Cov neeg yuav tsum tsiv mus nyob ib ncig ntawm lub tsev hais plaub thiab tos. Cov neeg ua si yuav tsum muaj kev txawj ntse uas txhim kho lub sijhawm. Ntxiv rau, yuav tsum muaj tus editor uas tso cai rau koj ntxiv cov neeg tshiab thiab cov tsev hais plaub, tab sis qhov no tsis pub dawb lawm.
Tau xav txog txhua yam dhau los, kuv tau mus ua haujlwm.
Kev ua si tsim
Pib: Vajvoog thiab Abstractions
Kuv coj ib qho piv txwv los ntawm ggez thiab tau txais ib lub voj voog ntawm qhov screen. Zoo kawg! Tam sim no ib co abstractions. Kuv xav tias nws yuav zoo rau abstract deb ntawm lub tswv yim ntawm cov khoom ua si. Txhua yam khoom yuav tsum tau muab thiab kho tshiab raws li tau teev tseg ntawm no:
// 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(())
}
}
Cov lej no tau muab rau kuv ib daim ntawv teev cov khoom zoo uas kuv tuaj yeem hloov kho thiab ua rau hauv ib lub voj zoo sib npaug.
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 yog qhov tsim nyog vim nws muaj tag nrho cov kab ntawm cov cai. Kuv siv sij hawm me ntsis cais cov ntaub ntawv thiab optimizing cov qauv directory. Nov yog qhov nws zoo li tom qab ntawd: Resources -> qhov no yog qhov twg tag nrho cov cuab tam yog (duab)
Src
- cov koom haum
— game_object.rs
— circle.rs
— main.rs —> lub ntsiab voj
Cov neeg, pem teb thiab cov duab
Cov kauj ruam tom ntej yog los tsim tus neeg ua si khoom thiab thauj cov duab. Txhua yam yuav tsum tau ua los ntawm 32 * 32 vuas.
Ntaus pob tesniv
Tom qab kawm seb lub tsev hais plaub ntaus pob tesniv zoo li cas, kuv txiav txim siab ua lawv los ntawm 4 * 2 vuas. Thaum xub thawj, nws muaj peev xwm ua tau ib daim duab ntawm qhov loj me, los yog muab tso ua ke 8 cais cov vuas. Tab sis tom qab ntawd kuv pom tau hais tias tsuas yog ob lub pob zeb tshwj xeeb xav tau, thiab ntawm no yog vim li cas.
Nyob rau hauv tag nrho peb muaj ob cov vuas xws li: 1 thiab 2.
Txhua ntu ntawm lub tsev hais plaub muaj cov pobzeb 1 lossis pobzeb 2. Lawv tuaj yeem muab tso rau hauv qhov qub lossis flipped 180 degrees.
Kev tsim kho yooj yim (kev sib dhos) hom
Tom qab kuv tau tswj hwm kom ua tiav cov chaw, cov neeg thiab cov duab qhia chaw, kuv pom tau tias yuav tsum muaj hom kev sib dhos yooj yim. Kuv tau siv nws zoo li no: thaum nias lub pob, cov khoom raug xaiv, thiab nias qhov chaw nyob rau hauv qhov chaw xav tau. Yog li, khawm 1 tso cai rau koj xaiv lub tsev hais plaub, thiab khawm 2 tso cai rau koj xaiv tus neeg ua si.
Tab sis peb tseem yuav tsum nco ntsoov tias 1 thiab 2 txhais li cas, yog li kuv ntxiv ib lub wireframe kom paub meej tias yam khoom twg raug xaiv. Qhov no yog qhov nws zoo li.
Architecture thiab refactoring cov lus nug
Tam sim no kuv muaj ob peb yam khoom ua si: neeg, tsev hais plaub thiab hauv pem teb. Tab sis txhawm rau kom wireframes ua haujlwm, txhua qhov khoom lag luam yuav tsum tau qhia seb cov khoom lawv tus kheej puas nyob hauv kev ua qauv qhia, lossis seb lub thav duab tsuas yog kos. Qhov no tsis yooj yim heev.
Nws zoo nkaus li rau kuv tias architecture yuav tsum tau rov xav dua hauv txoj hauv kev uas qhia qee qhov kev txwv:
Muaj ib lub koom haum uas renders thiab hloov kho nws tus kheej yog ib qho teeb meem vim hais tias lub koom haum yuav tsis muaj peev xwm "paub" dab tsi nws yuav tsum render - ib tug duab thiab ib tug wireframe;
tsis muaj lub cuab yeej rau kev sib pauv khoom thiab kev coj tus cwj pwm ntawm ib tus neeg (piv txwv li, cov cuab yeej is_build_mode lossis kev coj cwj pwm). Nws yuav muaj peev xwm siv tau qub txeeg qub teg, txawm hais tias tsis muaj txoj hauv kev los siv nws hauv Rust. Qhov kuv xav tau tiag tiag yog qhov layout;