I den forrige opplæringen av serien lærte du om World and Engine-modulene i Matter.js. Metodene som er tilgjengelige i disse to modulene er ment å kontrollere oppførselen til flere kropper eller hele verden samtidig. Men på et tidspunkt vil det bli nødvendig å ha kontroll over egenskapene til de enkelte kroppene i din verden.
For eksempel vil du kanskje bruke litt kraft på en bestemt gjenstand eller endre friksjonskoeffisienten. I slike tilfeller kan kroppsmodulen i Matter.js være til stor hjelp. Denne modulen inneholder mange metoder og egenskaper som lar deg angi verdier for alle typer fysiske attributter, fra masse til tilbakebetalingskoeffisient. I denne opplæringen lærer du om alle disse metodene og egenskapene og hvordan du bruker dem riktig.
Du kan rotere enhver stiv kropp i Matter.js verden ved å bruke rotere (legeme, rotasjon)
metode. Rotasjonen er i forhold til kroppens nåværende vinkel, og den vil ikke gi noen vinkelhastighet til den. Rotasjonsvinkelen er spesifisert i radianer.
Du kan også skalere en kropp ved å bruke skala (kropps, scaleX, Scaley, [punkt])
metode. Parametrene scaleX
og Scaley
spesifiser mengden av skalering i henholdsvis horisontal og vertikal retning. Husk at en slik skalering også vil oppdatere kroppens fysiske egenskaper som sin masse, areal og tröghet. Den fjerde parameteren angir punktet rundt hvilken skaleringen skjer. Når det ikke er angitt, antas standardverdien av skaleringspunktet å være sentrum av kroppen.
Det er mulig å flytte en kropp med en gitt vektor i forhold til dens nåværende posisjon ved hjelp av sette (body, oversettelse)
metode. Oversetterparameteren angir objektets nye posisjon i forhold til gjeldende posisjon. Her er delen av koden fra demoen som skalerer, roterer og beveger boksen rundt.
var Kropp = Matter. var box = Bodies.rectangle (460, 120, 40, 40); $ ('. skala'). på ('klikk', funksjon () Body.scale (boks, 1,5, 1,2);); $ ('.rotate'). på ('klikk', funksjon () Body.rotate (boks, Math.PI / 6);); $ ('. translate'). på ('klikk', funksjon () Body.translate (boks, x: -10, y: 20););
Du kan også gi lineær hastighet til et objekt ved hjelp av setVelocity (legeme, hastighet)
metode. Ved å bruke en hastighet på denne måten, endres ikke vinkelen, påført kraft eller posisjon av det aktuelle objektet. Posisjonen til objektet eller dens vinkel vil trolig endre seg, men biblioteket spesifiserer dem ikke spesifikt for noen verdi. Deres verdier er bestemt av andre krefter som virker på objektet, som friksjon.
På samme måte som den lineære hastigheten, kan du også endre vinkelhastigheten til et objekt ved hjelp av setAngularVelocity (legeme, hastighet)
metode. I dette tilfellet forblir stillingen, vinkelen og kraften på objektet uendret.
En ting du bør huske på er at hastigheten er en vektor i setVelocity ()
og et nummer inn setAngularVelocity ()
.
$ ('lineær'). på ('klikk', funksjon () Body.setVelocity (boks, x: 10, y: -10);); $ ('.vinkel'). på ('klikk', funksjon () Body.setAngularVelocity (boks, Math.PI / 6););
I tillegg til å gi hastigheter til objekter, kan du også bruke en kraftvektor på dem. De applyForce (kropps, stilling, kraft)
Metode kan brukes til å anvende a makt
vektor på en kropp fra en gitt stilling
. Denne kraften kan eller ikke føre til at dreiemomentet på et gitt legeme påføres.
Følgende kode gjelder en kraft rett i midten av kroppen. Kraftvektoren er x: 0, y: -0.05
. Dette betyr at den påførte kraften vil være rent vertikal og i en oppadgående retning. Du bør huske på at vertikale krefter i en oppadgående retning har et negativt tegn i Matter.js. En annen ting verdt å merke seg er hvor lite tallet som angir vertikal kraft er. Tyngdekraften har en verdi på bare 1 i Matter.js.
Bevegelsen av ballen etter påføring av kreftene virker naturlig så lenge ballen ikke kolliderer med noen av veggene eller gulvet. Normalt, når ting kolliderer med noe, forventer vi at de skal sprette tilbake. Energien som en gjenstand spretter tilbake av, bestemmes av tilbakebetalingskoeffisienten.
I Matter.js er verdien som standard satt til null. Dette betyr at ethvert objekt som har tilbakebetaling satt til null og kolliderer med noe annet, vil ikke hoppe tilbake i det hele tatt. En verdi på 1 vil bety at objektet vil sprette tilbake med kinetisk energi lik det det hadde før kollisjonen. En verdi som 0,5 betyr at objektet vil sprette tilbake bare med 50% av sin tidligere kinetiske energi. Verdien av tilbakebetaling for et objekt kan styres ved hjelp av restitusjon
nøkkel.
I enkelte simuleringer kan det bli nødvendig for deg å endre friksjonen mellom ulike organer. Dette kan oppnås ved å bruke friksjon
, frictionAir
og frictionStatic
nøkler.
friksjon
nøkkel spesifiserer verdien av kinetisk friksjon for en kropp. Det kan ha en verdi mellom 0 og 1. En verdi på 0 innebærer at en kropp kan fortsette å bevege seg på ubestemt tid når den er satt i bevegelse. Den eneste måten å stoppe det på er å bruke annen ekstern styrke. Den endelige verdien av friksjon mellom to objekter bestemmes ved bruk av formelen Math.min (bodyA.friction, bodyB.friction)
. frictionStatic
nøkkel spesifiserer verdien av friksjon når en kropp er i ro. Standardverdien for statisk friksjon er 0,5. En høyere verdi betyr at en større mengde kraft vil være nødvendig for å få kroppen til å bevege seg.frictionAir
nøkkel brukes til å spesifisere verdien av friksjon mellom en kropp og omgivende luft. En høyere verdi betyr at kroppen vil senke veldig raskt når den beveger seg gjennom luften. Effekten av luftfriksjon er ikke-lineær.$ ('.rr-friksjon') på ('klikk', funksjon () circleA.friction = 0.05; circleA.frictionAir = 0.0005; circleA.restitution = 0,9;); $ ('res-friksjon'). på ('klikk', funksjon () circleA.friction = 0,1; circleA.frictionAir = 0.001; circleA.restitution = 0;);
Frem til dette punktet har vi ikke angitt fargen, disposisjonsbredden eller slagstilken som skal brukes når du gjør en kropp. Alle disse egenskapene er nestet inne i gjengi
nøkkel. De fyllstil
Egenskapen aksepterer en streng for å angi fyllestilen som gjengir kroppen. De linje bredde
Egenskapen aksepterer et tall som definerer linjebredden som skal brukes når du oppretter en kropps disposisjon.
En verdi på null betyr at ingen linje blir gjengitt i det hele tatt. De strokeStyle
Egenskapen kan brukes til å spesifisere slagstilken som skal brukes når du gjør kroppsrammen. Du kan forhindre at en kropp gjengis i det hele tatt ved å sette inn synlig
nøkkelen til falsk
. Opaciteten til kroppen som du vil gjengi, kan kontrolleres ved hjelp av opasitet
nøkkel.
Du kan også bruke et bilde i stedet for enkle farger og skisser for å gjengi en kropp. Parametrene for gjengivelse av en kropp ved hjelp av sprites er spesifisert ved hjelp av et annet sett med egenskaper. De tekstur
Egenskapen definerer banen til bildet som skal brukes som en sprite-tekstur.
De xOffset
og yVerdi
Egenskaper kan brukes til å definere offset i respektive akser for sprite. På samme måte kan du bruke XScale
og ySkala
egenskaper for å definere skaleringen i x-aksen og y-aksen for sprite. Her er noen kode som erstatter den lyseblå bakgrunnen til vår ball med en fotballsprite fra Open Game Art-nettsiden.
var ball = Bodies.circle (90, 280, 20, render: sprite: texture: "bane / til / soccer_ball.png", xScale: 0.4, yScale: 0.4);
Du har allerede sett hvordan du spesifiserer friksjonen eller tilbakebetalingskoeffisienten for et objekt i Matter.js. Det finnes mange andre egenskaper hvis verdier kan angis på samme måte. På den annen side er det egenskaper som er skrivebeskyttet og ikke kan endres av deg.
Du kan angi posisjonen til en kropp i verden ved å bruke stilling
nøkkel, som aksepterer en vektor som verdi. Du kan også spesifisere massen av en kropp ved hjelp av masse
eiendom, men da må du også sette en verdi for inverseMass
eiendom, som beregnes ved bruk av 1 / masse
. En bedre måte å kontrollere massen på en kropp er ved hjelp av tetthet
eiendom.
Når du endrer kroppens tetthet, beregnes massen automatisk basert på området. På denne måten kan du også skille mellom ulike objekter basert på deres tetthet. For eksempel bør en kropp som bruker en stein som sprite, ha høyere tetthet enn en kropp av samme størrelse som bruker en fotball som sin sprite.
Noen egenskaper som hastighet
, hastighet
og vinkelhastighet
er skrivebeskyttet, men deres verdier kan settes ved hjelp av egnede metoder som setAngularVelocity ()
og setVelocity ()
. Du kan lese mer om ulike egenskaper til kroppsmodulen i dokumentasjonen.
I denne opplæringen har du lært om alle viktige metoder og egenskaper i kroppsmodulen i Matter.js-biblioteket. Å vite om disse forskjellige egenskapene og hva de gjør kan hjelpe deg med å skape mer realistiske simuleringer av fysikk i virkeligheten. I neste og siste opplæring av serien, vil du lære om komposittmodulen i Matter.js.
Hvis du har noen spørsmål knyttet til denne opplæringen eller noen tips for bruk av biblioteket, vennligst del dem med oss.