Tämä on ihan pässi kysymys mutta miten saan objektin liikkumaan ruudussa puolelta toiselle eli "kimpoaa" seinästä ja jatkaa matkaa kunnes taas tulee seinä vastaan ja kimpoaa takaisin.
Oletan että tarkoitat objektia jota ei itse ohjailla.
Käytä ukon (objektin) x- ja y-suuntaiseen liikuttamiseen jotain muuttujaa, joka säilöö tiedon nopeudesta.
Tässä koodissa esimerkiksi kyseiset muutujat olisivat liikeX ja liikeY. Kun liikeX > 0, ukko liikkuu oikealle. Kun liikeX < 0, vasemmalle. Kun liikeY > 0, ukko liikkuu ylöspäin.
Code: Select all
Translateobject ukko, liikeX, liikeY
Kun ukko osuu seinään, haluamme että se kimpoaa. Tämän saa yksinkertaisesti vaihtamalla liikesuunnan vastakkaiseksi (kohtisuorilla pinnoilla. Muulloin homma menee mutkikkaammaksi). Eli kun ukko osuu ylä- tai alareunaan, vaihdamme liikeY-muuttujan vastakkaiseksi vaikka näin:
Sama juttu liikeX-muuttujalle, jos ukko osuu ruudun sivuihin.
Mistä sitten tiedämme, että ukko osuu seinään? Normaalin ikkunan koko on 400x300, ja ruudun keskusta on 0, 0 (ellei kameraa siirrellä). näin ollen vasen reuna on -200, oikea 200, yläreuna 150 ja alareuna -150. Mutta jos muutamme resoluutiota (SCREEN-komento), nämä mitat muuttuvat ja joudumme tekemään uudet laskutoimitukset. Tämän voi kiertää helposti käyttämällä cb:n funktioita ScreenWidth() ja Screenheight(), jotka palauttavat käytössä olevan resoluution. Tämä resoluutio jaettuna kahdella kertoo kätevästi ruudun reunojen etäisyyden keskustasta.
Seuraava koodinpätkä tarkastaa onko objektin x-koordinaatti ylittänyt ruudun oikean reunan. Jos on, liikeX muutetaan vastakkaiseksi, eli objekti lähtee vastakkaiseen suuntaan (kimpoaa).
Code: Select all
If ObjectX( ukko ) > ScreenWidth() / 2 Then
liikeX = liikeX - 1
EndIf