Fysiikan ilmiöt¶
Kimmoisuus¶
Oliosta saa kimmoisamman tai vähemmän kimmoisan, jolloin se pomppii herkemmin tai vähemmän herkästi.
Olion kimmoisuuden arvo on välillä 0.0 - 1.0. Arvolla 1.0 olio säilyttää kaiken vauhtinsa törmäyksessä. Mitä pienempi arvo, sitä enemmän olion vauhti hidastuu törmäyksessä. Jos arvo on 0, niin olio ei kimpoa ollenkaan.
Törmäyksessä lasketaan törmänneiden kappaleiden kimmoisuuksien keskiarvo, eli esimerkiksi jos toisen kimmoisuus on 0 ja toisen 1, on lopputulos sama kuin jos molempien kimmoisuus olisi ollut 0.5.
Kitka¶
Kitka vastustaa liikettä, kun kaksi oliota liukuu toisiaan vasten, esimerkiksi laatikko lattiaa pitkin. Liikekitkaa säädetään KineticFriction-ominaisuudella:
Arvo on välillä 0.0 - 1.0. Arvolla 0.0 kitkaa ei ole lainkaan, jolloin olio liukuu kuin jäällä. Mitä suurempi arvo, sitä nopeammin liukuva olio pysähtyy. Kitka vaikuttaa vain kosketuksessa toiseen olioon. Ilmassa lentävää oliota hidastetaan LinearDamping-ominaisuudella (ks. alempana).
Lepokitka StaticFriction on vastaava ominaisuus paikallaan olevalle oliolle: se vastustaa liikkeelle lähtemistä.
Kitka kannattaa asettaa nollaksi esimerkiksi pallolle ja seinille, jos pallon halutaan kimpoilevan menettämättä vauhtiaan tai alkamatta pyöriä.
Massa¶
Kaikilla fysiikkakappaleilla on massa, joka riippuu kappaleen koosta.
Oletuksena kappaleiden massa on sama kuin kappaleen pinta-ala, eli esimerkiksi
muodostaisi neliönmuotoisen kappaleen, jonka massa olisi 2500.
Voit muuttaa kappaleen massaa sen Mass-kentän kautta, esimerkiksi:
On oleellista pitää mielessä, että massa vaikuttaa kaikkeen fysiikkaan.
Jos keilapallo ja koripallo törmäävät, kuinka paljon tämä törmäys muuttaa keilapallon liikettä? Entä jos kaksi keilapalloa törmäävät?
Jos haluat kohdistaa kappaleisiin voiman, tarvittavan voiman suuruus riippuu massasta. Suurempi massa → tarvitaan suurempi voima, jotta saadaan sama efekti kuin kevyemmälle kappaleelle.
Voimien kohdistaminen kappaleisiin¶
Jypelissä on kaksi päätapaa, kuinka kappaleisiin voi kohdistaa voimia: Hit ja Push.
Hit¶
Hit kohdistaa kappaleeseen impulssin (Wikipedia).
Metodille annetaan parametriksi vektori, joka kuvaa impulssin suuntaa ja voimakkuutta.
Esimerkiksi:
saisi kappaleen liikkumaan yläviistoon tällä annetulla nopeudella.
Kappaleen nopeus impulssin jälkeen riippuu siis sen massasta sekä impulssin suuruudesta.
Tässä nyt kerrottiin nopeus pallon massalla, jotta pallo saadaan liikkumaan juuri tuolla nopeudella riippumatta sen massasta.
Push¶
Push kohdistaa kappaleeseen voiman (Wikipedia).
Se siis käyttäytyy melkein samalla tavalla kuin Hit, mutta sille annettavan vektorin suuruus on eri.
Push kohdistaa voiman kappaleeseen yhden pelinpäivityksen ajan (1/60 s).
Esimerkiksi:
ei saisi kappaletta kulkemaan samalla nopeudella kuin Hit, vaan ainoastaan 1/60-osalla siitä.
Pushia on suositeltavaa käyttää, esimerkiksi jos halutaan sulavampi hahmon liikuttelu ylhäältäpäin kuvattuun peliin.
Esimerkiksi:
Keyboard.ListenArrows(ButtonState.Down, LiikutaPelaajaa, "Ohjaa pelaajaa");
// muuta koodia...
private void LiikutaPelaajaa(Vector suunta)
{
double kerroin = 50; // Tämä voi olla myös esimerkiksi attribuuteissa
pelaaja.Push(pelaaja.Mass * suunta * kerroin);
}
Katso myös alempaa LinearDamping pelaajan hidastamiseen, kun näppäimestä päästetään irti.
Katso myös ohjesivu ohjainten asettelusta.
Painovoiman, törmäysten ja muiden fyysisten ominaisuuksien kytkeminen pois¶
Oliosta, joka ei noudata painovoimaa, saadaan helposti esim. leijuva haamu tai taso:
Tällä koodilla olio ei noudata ollenkaan fysiikan lakeja:
Jos halutaan, että olio ei törmäile eli sen läpi voivat muut oliot mennä vapaasti:
Huom! Vaikka IgnoresCollisionResponse asetetaan trueksi, törmäyksestä tulee edelleen tapahtuma, vaikka itse törmäystä ei tapahdukaan.
Jos halutaan, että olio ei törmää joihinkin tiettyihin olioihin, voidaan sille lisätä CollisionIgnoreGroup.
Ne oliot, joilla on sama CollisionIgnoreGroup, eivät törmää keskenään ja törmäyksestä ei tule tapahtumaa.
Näin puolestaan olioon eivät vaikuta räjähdysten paineaallot:
Oliosta voidaan tehdä läpimentävä vain yhdestä suunnasta, esimerkiksi
tekee esteestä läpimentävän, jos törmääjä liikkuu vasemmalta oikealle. Jos sallittua kulkusuuntaa ei anneta, eli pelkästään
on kappale läpikuljettava alhaalta ylöspäin.
Olion liikkeen tai pyörimisliikkeen hidastaminen¶
Oliolla on ominaisuus, joka hidastaa sen vauhtia, vaikka se ei osuisi mihinkään. Vähän kuin väliaineen (esim. ilman tai veden) vastus. Vauhtia ja pyörimisvauhtia voi hidastaa erikseen.
Vauhdin hidastaminen tapahtuu LinearDamping-ominaisuudella:
Pyörimisen hidastaminen tapahtuu AngularDamping-ominaisuudella:
Oletusarvo molemmille on 1.0, jolloin hidastumista ei ole. Mitä pienempi arvo, sitä enemmän kappale hidastuu. Yleensä kannattaa käyttää arvoja, jotka ovat lähellä ykköstä, esimerkiksi 0.95.
Pyöriminen päälle ja pois¶
Fysiikkaoliot voivat pyöriä akselinsa ympäri. Pyörimisnopeuden voi asettaa olion AngularVelocity-ominaisuuden avulla ohjeen mukaisesti.
Joskus ei haluta, että fysiikkaolio lähtee pyörimään törmäyksistä. Tämän voi estää seuraavalla tavalla:
Vastaavasti pyörimisen voi taas mahdollistaa asettamalla CanRotaten arvoksi true: