Toiminnallisuutta mukaan
Sain ruudulla näkymään sitä ja tätä, mutta millään ei ollut mitään vaikutusta mihinkään. Tämä ei käynyt laatuun, joten seuraavat GameObjectiin lisättävät luokkamuuttujat olivat mm. hitpoints eli osumapisteet. Tungin minä sinne kaikkea muutakin hienoa, kivaa ja tulevaisuudessa oleellistakin, mutta ei niistä ole hirveästi iloa tässä vaiheessa. Kun kerran ollaan jonkunsorttisen Asteroids-viritelmän kanssa tekemisissä (en meinannut jäädä siihen, vaan lisätä jotain todella sekavaa mutta ainakin omasta mielestäni mielenkiintoista), törmäily on kai aika olennaista. Tätä raapustaessani olen tehnyt pohjaa pidemmälle kuin mistä nyt on kertoa.
Törmäilymietteitä
- Murkulat voivat törmäillä pelaajan purtiloon ja päinvastoin
- Murkulat voivat törmäillä toisiinsa
- Nopeuseroilla pitäisi olla merkitystä törmäystilanteessa
- Massaeroilla pitäisi olla merkitystä törmäystilanteessa
- Törmäyskulmakaan ei ole yhdentekevä
Kaksivaiheinen törmäystestaus
Kun kullakin hetkellä listoilla voi olla aika hyvä määrä olioita, ei ole mitään tolkkua käydä kaikkien törmäyksiä läpi supertarkasti, vaan voidaan ensin käydä kaikki läpi ja katsoa edes summittaisesti, josko kolisee ja sitten, tarpeen vaatiessa, tarkemmin. Ykkösvaiheen toteutuksessa käyn kaikki 'roidit ja pelaajan aluksen läpi ja vertaan toisiinsa, josko niiden summittaiset pinta-alat risteävät. Tähän puuhaan pygamen rectangle.colliderect() riittää mukavasti:
def collides_with(self, other):
collides = False
if self and other:
if self.get_rect().colliderect(other.get_rect()):
collides = self.accurate_collision(other)
return collides
def accurate_collision(self, other):
return True
Jälkimmäinen metodi on luonnollisesti stubi, jonka toteutus tulee kohdille kun ehtii. Tämänhetkinen vain toteaa, että "näyttää siltä, että törmäävät ja se kelpaa minulle" ja sen jälkeen molemmille törmääville elementeille heitetään 2d6-vauriot, kunnes toinen tai molemmat tuhoutuvat. Koska murkuloita on neljää kokoluokkaa, isommat hajoavat n kappaleeksi pienempiä, jos sille päälle sattuvat.
Kyllästyin aika pian siihen, että alukseni hajosi aika ripeästi testailun tiimellyksessä, joten lisäsin mukaan automaattisen Megatron-huijauksen. Peli sanoo Afterdeath ja kaikki jatkuu pelaajan kannalta kuin mitään ei olisi tapahtunut.
Yhtenä aamuna juttelin tästä projektinkuvatuksesta yhden työkaverini kanssa (oli huomannut jotain mutinoitani g+:ssa). Muiden seassa esiin nousi kommentti antialiasoinnin puutteesta, olinko miettinyt käyttäväni sitä vai aioinko tehdä tarkoituksella sahalaitaista. Vastasin, että meinasin korjata tilanteen nätimmäksi kun saan oleellisemmat pulmat ratkottua. Siinä samalla katseltiin pikaisesti dokumentaatiota ja hops, jos vaihtaa drawpolygon-metodikutsun aalines-kutsuksi ja muistaa lisätä yhden True-parametrin, muuta ei tarvita. Kokeilin kurillani samana iltana ja näyttäähän se nätimmältä näin, vai mitä?
|
Antialiasoituna |
Törmäyksen jälkeen
Koska olisi aika naurettavaa, että avaruuskivet poikkeuksetta jatkaisivat törmäämisensä jälkeen toistensa sisään syöksymistä, mietin, että seuraavaksi pitäisi toteuttaa deflect-metodi, joka laskisi jotenkin molemmille törmäyksen osapuolille uudet nopeusvektorit. Jos saisin aikaan jotain edes etäisesti biljardipöydän toimia jäljittelevän toteutuksen, olisin onnellinen. Kun tuon yhdistää kriittisiin osumiin (pieni ja nopea kivi voisi sopivasti osuessaan halkaista suunnattoman kiven kahtia), lopputulos voisi olla vänkä. Niin ja ne planeetat ja ties mitkä... ei tässä ole vielä mitään tehtynä!
"Sota. Sota ei koskaan muutu."
Kaikille tätä lässytystä jonkun aikaa seuranneelle lienee kai ihan päivänselvää, että kaiken muun omituisen lisäksi Star Wars ja Battletech ovat minulle isoja juttuja. Vallankin jälkimmäisestä olen miettinyt lähteväni rosmoamaan aseistukseen liittyvää kamaa. Pääideana on, että purkkiinsa saisi valikoida jonkun tai jokusen väkivallan välineen riippuen vähän aluksen sloteista. Ohjuksia/raketteja, kuolemansäteitä (pulssittaisina tai ei), automaattikanuunoita ja taivaansinisiä salamoita yskiviä partikkelikanuunoita. Muahaha! Ja jos kerran aseistusta voi muuttaa, miksei moottoriakin voisi vaihtaa?
Kunhan mietin, myöhemminhän se selviää, mitä hemmettiä oikein haluan.