indledning til quickbox2d: del 2

, indførelse quickbox2d: del 2,,,,, andel,,,,,,,,,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss.,, det er den anden del i tre dele resten serie om quickbox2d. det anbefales, at du læser hver del af denne serie for.så hvis du ikke har læst en del, bør du gøre det nu.du kan se på det her.,,, i denne forelæsning, vil vi se på nogle af de mere mellemniveau elementer af quickbox2d. vi vil se, hvordan man skaber polygon stive lig.vi skal lære at finjustere vores simulering ved brug af yderligere param værdier såsom erstatning, lineardamping og angulardamping.vi taler om en stærkt box2d metoder, der er udsat for quickbox2d, så taler vi om frim (framerate uafhængig bevægelse).,,, en påmindelse: det burde være en selvfølge, men glem ikke at sætte den box2d og quickbox2d biblioteker enten ved siden af din. fia - sag eller i deres classpath.,, resten vil følge dig gennem oprettelse af en mellemstor simulering, der har til formål at røre om specifikke aspekter af quickbox2d og box2d. tjek demo 'en og lindre lidt stress..., trin 1: oprettelse af dit manuskript, åbne flash og pasta følgende kode i aktioner for ramme: [stg (bredde = 800, højde = 600, framerate = 60, backgroundcolor = 0x000000)] import kom. actionsnippet. qbox. * var sim: quickbox2d = nye quickbox2d (det) /* * -----------------------------... indsæt variable definitioner under denne bemærkning ------------------------------ * /////////- than har koden til at bygge stive organer //er, der er indeholdt i denne funktion buildsimulation(), sim. start(), sim. mousedrag(); funktion buildsimulation(): ugyldig (//nogle misligholdelse, farver og skabe fase vægge sim. setdefault ((fillcolor: 0x113366, fillalpha: 0,5, linecolor: 0x3355aa}), sim. createstagewalls(); /* * -----------------------------... indsæt ridgid organ instantiation kode under denne bemærkning ------------------------------ * /}, når du har ovennævnte kode i jeres tidslinje gå videre og undersøge deres film til at sørge for, at alt er sat op.ikke meget, der vil ske, når du løber denne kode, sørg for, at du ikke har nogen fejl, før jeg rejser.de fleste af, hvad du ser i denne kode bør være bekendt.der er imidlertid et par vigtige ting at bemærke.som vi tilføje yderligere kode til denne sag, vi bliver nødt til at definere et par variabler.for organisatoriske formål, du gerne vil tilføje disse variabler under den kommentar, der lyder: /* * -----------------------------... indsæt variable definitioner under denne bemærkning ------------------------------ * /, enkelhed, vi har også skabt en funktion til buildsimulation() at pakke alle vores stive lig instantiation.denne funktion er ringede før start() og mousedrag() metoder til quickbox2d. den indeholder nogle misligholdelse farve indstillinger til vores stive organer såvel som en opfordring til at createstagewalls().de fleste af den kode, vi ser på i denne forelæsning vil blive smurt direkte under den kommentar, der lyder: /* * -----------------------------... indsæt ridgid organ instantiation kode under denne bemærkning ------------------------------ * /,, trin 2: polygoner, og de punkter, param, jeg går ud fra, at du kender forskellen mellem konveks konkave og komplekse polygoner.hvis du ikke kender eller kan ikke huske den forskel, så kan du tage et kig på wikipedia artikel om emnet.,, quickbox2d giver dig mulighed for at definere polygoner på to måder.den første måde bruger automatiske polygon, sporing, som tillader, at de blot definere x - og y - koordinater til omridset af en polygon.der er ingen begrænsning i antallet af punkter i din skygge.pasta følgende kode ind i din buildsimulation() funktion og teste din film: //trekant sim. addpoly ((x - 3, y: 17 punkter: [0,0, 1,1, 0,1 0,0]}); //konkave poly sim. addpoly ((x: 7, y: 17 punkter: [1,0, 2,2, 1,1.2, 0, 2]}), nævnte kode defineres to polys.den første linje defineres en simpel ret trekant, som bliver placeret på (3,17) og den næste linje defineres en konkav polygon, der bliver placeret på (7,17).vi gør brug af en param ringede, og punkter, der er et system af x - og y - koordinater.en dimensionel arrays på xy koordinater kan være besværligt, under grafisk bør gøre det klart, har vi tilføjet: den kode, ved at skabe punkter arrays, du er nødt til at være forsigtige med ikke at have en profil, der overlapper i sig selv, og det vil forvirre triangulering manuskript og forårsage en fejl, du. vil bemærke, at den anden polygonal består af to trekanter.det er quickbox2d er sporing kode på arbejdspladsen, der knuser dit tegn til en flok trekanter.hvis du ikke ønsker at se hver trekant, du kan, trådnet, param.prøv at ændre din konkave poly - kode som følger: //konkave poly sim. addpoly ((x: 7, y: 17, trådnet: falske punkter: [1,0, 2,2, 1,1.2, 0, 2]}), hvis du har brug for at skabe mere komplekse polygoner, du nok bør bygge dig en slags enkelt polygon redaktør.der er et eksempel på en sådan redaktør på actionsnippet.com.vil du se på det for et par minutter før behandling.det skal styrke deres forståelse af den måde, quickbox2d triangulerer polygoner.,, trin 3: polygoner og verts param, der er en anden måde at skabe polygoner ved hjælp af quickbox2d, der er lidt mere indviklet.hvis du er bekymret for udøvelsen af deres simulering, du måske overveje at anvende denne metode i den tidligere drøftet metode.du kan også ønsker at bruge denne metode, hvis du har brug for at skabe en enkel konvekse poly - f.eks. en trapazoid.der tilføjes følgende kode ind i din buildsimulation() funktion:, sim. addpoly ((x - 13, y: 17, verts: [[- 1 - 1, 1 - 1, 2, 1 - 2, 1]]}); denne kodeks indeholder en trapazoid.test din film og se.der er et par differenes mellem det, de grønne, param og punkter, param.en iøjnefaldende forskel er, at verts system er en to - system.hver indlejrede system indeholder en liste over xy koordinater, dette system kan anvendes til at definere op til otte toppunkter.du kan ikke lægge en konkav eller komplekse polygon, ved hjælp af en enkelt indlejrede system.men du skal definere en række konvekse polygoner (igen, hver med en max af otte toppunkter).du bør definere hver konvekse polygon i urets retning for, begyndende med den øverste mest punkt og arbejde tilbage.det kan være svært, men det er nemmere, end det lyder.der tilføjes følgende kode ind i din buildsimulation() funktion og teste din film, sim. addpoly ((x: 18, y: 15, verts: [[0 - 1, 1, 1 - 1,1], [1,1, 2,1.5, 1,2] [1,2, 0,3 - 1,3 - 1,2], [- 1.5,2, - 1,2.5 - 1,3 - 2,3 - 2,2.5]]}); denne kode trækker et par polygoner sammen.resultatet er en lille gruppe af konvekse polys.hvis du vil bruge dette træk, du måske ønsker at tage en pause på dette punkt, og forsøge at skabe noget med det, de grønne, param.det er interessant at se, hvor følsomt dette træk er, vil du blive underligt resultater, hvis de overholder ikke de restriktioner, som nævnt i den foregående præmis,.,, trin 4: tilbagelevering, tilbagelevering er ligesom elasticitet eller bounciness af stive lig.manglende tilbagelevering ligger et sted mellem 0 - 1, men højere værdier er tilladt.lad os se på, hvad der kan gøres med restitution, modtaget følgende kode ind i din buildsimulation() funktion og teste din film: //konstant hoppende bold sim. addcircle ((x - 3, y: 13, radius: 1, restitution: 1}); //fastsat restutution 1,2 til at skabe en foråret bord, sim. addbox ((x, y: 24: 15, bredde: 3, højde: 0, 25, fillcolor: 0xdd0000, linealpha: 0 - 0,1, tilbagelevering: 1.2, massefylde: 0}); //normale cirkel, sim. addcircle ((x: 24, y: 10, radius: 0, 5}), den første ting, vi skaber med denne kodeks er en cirkel, der hopper, for evigt.ved fastsættelsen af, tilbagelevering, param. det vil ikke holde op med at hoppe, så længe det er alene.det næste, vi skaber, er en rød kasse, som er en smule på skift, har en befolkningstæthed på 0 (statisk) og har en tilbagelevering af 1.2.tilbagelevering af 1.2 gør det så ting hoppede ud af det vil opnå noget energi.for at teste det, tilføjer vi en cirkel, direkte over det.hvis du ser denne cirkel omhyggeligt, vil i se, at hver gang det rammer den røde æske det springer en smule højere, indtil den rammer loftet og hopper ud af den røde æske helt.,, tilbagelevering, virkelig er det første skridt til at gøre dit stive organer handler, som de er fremstillet af forskellige materialer.en tilbagelevering af 0 ville være godt for en stiv organ, der skulle være lavet af sten, en erstatning på 0,8 ville være godt for noget af meget blød gummi.,, løntrin 5: vinkel og lineær dæmpning, hvis de ønsker at forhindre, at en stram krop fra oversættelse eller roterende for hurtigt, kan du dæmpe dens lineære og vinkelhastighed.tilføje denne kodeks til din buildsimuation() funktion og teste din film. //green box sim. addbox ((x - 3, y: 5, bredde: 1, højde: 1, angulardamping: 5, fillcolor: 0x22cc00}); //røde kasse sim. addbox ((x: 8. 5. bredde: 1, højde: 1, fillcolor: 0xff0000}); //lille platform, sim. addbox ((x: 6, y: 8, bredde: 10, højde: 0,25, massefylde: 0}), tilføjer vi en grøn æske med en angulardamping værdi af 5.dette vil give gren æske med roterende meget hurtigt, når dens kastet.til sammenligning, tilføjer vi en rød kasse og efterlod sine angulardamping værdi ved misligholdelse på 0.siden simulationen er ved at blive lidt rodet, vi har tilføjet en lille platform under disse to kasser, så det er let at flytte dem rundt og iagttage forskellen mellem dem.,, lineære dæmpning er ligesom angulardamping, men for oversættelse.lad os tilføje angulardamping til den grønne kasse: //green box sim. addbox ((x - 3, y: 5, bredde: 1, højde: 1, angulardamping: 5, lineardamping: 5, fillcolor: 0x22cc00}), hvis du tester din film, vil du se, at den grønne boks falder langsommere, end den røde æske, og hvis man kaster det lidt rundt, så vil du se, at det ser næsten ud til at flyde.prøv at lege med de værdier, en lille smule, før jeg rejser. jeg vil gerne have angulardamping på noget, som jeg ønsker at skifte realistisk, når kastet.ved misligholdelse, når du kaster en boks her, ser du, den roterer omkring mange, mange gange.jeg finder mig selv med lineardamping lidt mindre, men det er godt, hvis du ikke vil have noget at bevæge sig for hurtigt.det er også godt, hvis du vil gøre noget, synes, som om den er ramt af luftmodstanden, såsom en lufttom ballon eller et stykke plastic.,,, det er vigtigt at bemærke, at fastsættelsen af angulardamping eller lineardamping params over 1 dem mere følsomme over for timestep.det betyder måske ikke noget for dig, men vi vil drøfte det yderligere senere i denne forelæsning.,,, trin 6: gnidninger i box2d friktion generelt varierer fra 0 - 1.ved misligholdelse alle quickobjects har friktion på 0,5.hvis vi mindsker denne værdi tingene begynder at se meget glat.tilføje under kode til din buildsimulation() funktion og teste din film: //grå kasse sim. addbox ((x, y: 9: 3: 1, bredde, højde: 1, friktion: 1, fillcolor: 0xcccccc}); //light blue box sim. addbox ((x: 8, y 9: bredde: 1, højde: 1, friktion: 0, fillcolor: 0xccccff, fillalpha: 1}); //lille platform, sim. addbox ((x: 6, y: 12, bredde: 10, højde: 0,25, massefylde: 0}), i ovennævnte kode vi tilføje en grå kasse med en gnidninger med 1, en blå kasse med en friktion mellem 0 og en anden lille platform til at gøre de to kasser let at overholde.vi prøver at skubbe hver rubrik langs platform.vil du se, at den grå kasse ikke slide meget, mens den blå kasse virker meget glat, som en isterning., og legede med gnidninger altid får mig til at tænke på is niveauer fra de gamle nintendo sidescrollers...,, trin 7: isbullet param (kontinuerlig kollision påvisning kka), box2d har noget kaldet kka 'en.det er en mere nøjagtig og cpu 'en intensiv form for kollision påvisning.hvis du ønsker at bruge denne form for ulykke på en stram krop, du er nødt til at gøre brug af den, isbullet, param.som navnet antyder, at du bruger ofte ccd for kugler og andre hurtig stive lig.Copy the below code into your buildSimulation():, var boxes:Array = []; \tboxes[0] = sim.addBox({x:1, y:0, width:2, height:0.25}); \tboxes[1] = sim.addBox({x:1, y:2, width:2, height:0.25}); \tboxes[2] = sim.addBox({x:0, y:1, width:0.25, height:2.25}); \tboxes[3] = sim.addBox({x:2, y:1, width:0.25, height:2.25}); \tsim.addGroup({x:12, y:6, objects:boxes}); \t\t\t\t\t\t\t\t \t//if isBullet is false, circles will fall out of box \tfor (var i:int = 0; i<4; i++){ \t\tsim.addCircle({x:13, y:7, radius:0.2, isBullet:true}); \t}, Here we create a hollow box using a group object. vi har fire små cirkler i tomme kasse og fastsætte deres isbullet ejendom.dette forhindrer små cirkler i at skyde ud af den tomme kasse gruppe protesterer.test ved at kaste den tomme kasse omkring simulering, så hurtigt du kan.vil du se, at alle de kredse, forbliver inden for rammerne af den tomme kasse.prøv nu at isbullet param falske, og gør det samme, næsten øjeblikkeligt, vil du se kredse flyve ud over det hele. det er værd at bemærke, at kka 'en er automatisk anvendes på statisk organer.,, trin 8: fixedrotation param, fixedrotation, param er meget let at forstå.det er en boolean, at hvis der virkelig er til hinder for, at en stram krop af roterende.det er nyttigt for at forhindre karakter i et spil, fra at falde over.tilføje denne kodeks til din buildsimulation() funktion og teste din film, sim. addbox ((x, y: 19: 3, bredde: 1, højde: 2, fillcolor: 0xffffff, fixedrotation: sande}); denne kode skaber en hvid kasse (det er lidt gråt på grund af misligholdelse, alfa - værdi på 0, 8), fixerotation, der passer.hvis du prøver at smide det her vil du se, at det ikke roterer.ret enkel, hva '?,, det er værd at bemærke, at du stadig kan fastsætte, vinkel, param.giv det et forsøg:, sim. addbox ((x, y: 19: 3, bredde: 1, højde: 2, fillcolor: 0xffffff, fixedrotation: det er rigtigt, vinkel: 1}), trin 9: issleeping param, box2d stive lig falder i søvn ved misligholdelse at bevare cpu.denne lov til at falde i søvn, opstår, når en stram krop kommer til at hvile.man ønsker at undgå, at en stram krop for at falde i søvn med allowsleep boolean (ser vi et godt eksempel på det senere i ministeriet).nogle gange vil du starte en stram krop fra i søvn.i disse tilfælde, at du bruger issleeping param.det kan ikke være indlysende, men issleeping kan anvendes til at skabe et skrøbeligt objekter.tilføje denne kodeks til din buildsimulation() funktion og teste din film: /* --------------------------------- - trin 10: allowsleep --------------------------------- * /////////skabe 10 kasser i et kvadratnet formation (i = 0. jeg < 10 - + +) (sim. addbox ((x: 13 + (i% 2) * 0, 5, y: 3 + int (1 /2) * 0, 5, bredde: 0,5, højde: 0,5, linealpha: 0, fillcolor: 0x4444ff, issleeping: sande})} denne kode skaber 10 kasser i et kvadratnet formation, kasser, ikke har et slagtilfælde, og som er farvet med mættede blå.det, issleeping, param er fastsat til automatisk at bokse til at forblive i deres udgangsposition, indtil andet rammer dem og holde dem op.hvis man kaster et stift organ på dette net af kasser, som du vil se, at vi har skabt en illusion om et skrøbeligt stive lig.,, hvis du ikke er bekendt med den teknik, som vi bruger til at arrangere de kasser i nettet, kan du læse denne forelæsning om at arrangere displayobject i kvadratnet formationer i learningactionscript3.com, skridt 10: groupindex param, groupindex param kan bruges til at give dig en bedre kontrol med den måde, kollision er håndteret mellem stive lig.det er et tal, der er enten negative eller positive.hvis to stive organer har de samme negative groupindex værdi, vil de ikke kolliderer med hinanden, hvis de har den samme positive groupindex værdi, vil de støder sammen.tilføje denne kodeks til din buildsimulation() funktion: for (i = 0. jeg < 4 - + +) (sim. addbox ((x: 2 + - y: 2, fillcolor: 0xffff00, bredde: 0,5, højde: 1, 5, groupindex: - 1})} //små platform, sim. addbox ((x: 6, y: 4, bredde: 10, højde: 0,25, massefylde: 0}); denne kode skaber fire gule kvadratisk eller rektangulær form med en, groupindex, værdi af - 1.det skaber også en lille platform til observation af, groupindex, param let.hvis du tester din film, du vil se, at disse områder ikke kolliderer med hinanden.,, jeg finder mig selv med dette, groupindex ganske lidt.det er påkrævet, når der er tale om komplekse simulationer.der er to andre beslægtede params ringede, maskbits, og categorybits,.jeg har ikke brug for meget, men du kan læse mere om dem i box2d manual, hvis du er interesseret.,, trin 11: klar til central kontrol, som er nævnt i del 1 i denne forelæsning.hver oprettelse metode (addbox(), addpoly() osv.), returnerer et quickobject.når du begynder at følge de elementer i en simulering, du skal opbevares quickobject henvisninger i variabler.vi skal begynde at oprette en stiv organ, der skal kontrolleres med pilen nøgler.for at gøre dette er vi nødt til at gøre lidt forberedelse.første, tilføje denne variabel definition til din kode (husk at lægge den under variablen definition bemærkning uden for buildsimulation() funktion), * * -----------------------------... indsæt variable definitioner under denne bemærkning ------------------------------ * /var karakter: quickobject; næste tilføje følgende kode til din buildsimulation() funktion:, var charparta: quickobject = sim -. addbox ((x: 0, y: 0, bredde: 2, højde: 0,8}), var charpartb: quickobject = sim. addbox ((x: 0, y: 0, bredde: 0,8, højde: 2}); karakter = sim. addgroup ({genstande: [charparta, charpartb] x: 8, y: 3, angulardamping: 0,8, lineardamping: 0,8, allowsleep: falske}), skaber dette en lille gruppe objekt er bygget op af to kasser.vi, der er lineær og vinkel dæmpning egenskaber, så det ikke går for hurtigt, når vi begynder at kontrollere det med tastatur.vi bruger også en param ringede, allowsleep, for at sikre, at karakter stive lig ikke falder i søvn (uden at denne centrale kontrol fungerer ikke korrekt).test din film for at sikre, at karakter gruppe objekt er blevet tilføjet til simulering ordentligt.,, advarsel: de næste skridt bliver lidt vanskeligt, så vær opmærksom på hver undervisning.hvis du begynder at blive bekymret over, at du ikke kan følge alle ændringer af koden, efter den vanskelige del er overstået, kan du overveje at downloade hele fia sammenligne.,,, trin 12: tilføjelse af grundlæggende centrale kontrolkode, for visse typer af hovedkontrol bruger bare keyboardevents alene er ikke nok.jeg vil bruge sådan noget, var vigtige: formål = nye object(); stadie. addeventlistener (keyboardevent. key_down, onkeypressed) fase. addeventlistener (keyboardevent.key_up, onkeyreleased); funktion onkeypressed (evt: keyboardevent): ugyldig (centrale [evt. keycode] = sandt.} funktion onkeyreleased (evt: keyboardevent): ugyldig (centrale [evt. keycode] = falske} denne kode skaber et objekt (automatiseret system eller et kort), og som hedder, nøgle.når nøglen er presset for første gang en ejendom er dynamisk, der er skabt på, vigtige objekt, nøgleordet er anvendt til navnet på den ejendom, og eftersom vi er på en key_down, hvis ejendom er sat til.når en key_up sker det nyoprettede ejendom er falske.du skal være en kopi af denne kodeks og pasta, helt nede i bunden af dit manus på dette punkt, hvis du aldrig har set denne teknik, før det kan virke lidt underligt.hvis det er tilfældet, alt hvad du behøver at vide, er, at denne kodeks forhindrer nogle mindre problemer med anvendelsen af keyboardevents alene, og at hvis vi ønsker at reagere på tastaturet input, vi bare kan gøre sådan noget i en sløjfe: hvis (centrale [tastatur.!) (//gøre ham hoppe} nu, ved brug af en sløjfe i forbindelse med quickbox2d du kan lytte til event.enter_frame, hvis du vil, men senere udgaver af quickbox2d har en særlig type begivenhed opfordrede quickbox2d.step.du bør altid anvende quickbox2d.step til fordel for event.enter_frame, kan vi tale lidt mere om det, når vi kommer til frim.i din buildsimulation() funktion, bør du tilføje en til at lytte til denne begivenhed:, sim. addeventlistener (quickbox2d.step, onstep), bliver vi også nødt til at tilføje en til at lytte funktion direkte under vores buildsimulation() funktion:...- ja. addeventlistener (quickbox2d.step, onstep)} //ende af vores buildsimulation() funktion //- kopi af dette punkt.//vores lyttere funktion funktion onstep (evt: begivenhed): ugyldig (//vil vi tilføje nogle centrale kontrol her snart}, okay, vi er næsten klar til at begynde at gøre noget centralt styret bevægelse...,, trin 13: central kontrol, lineære hastighed og kroppen fast ejendom og alle quickobjects har en ejendom, kaldet organ.denne ejendom indeholder en henvisning til en box2d b2body instans.ved at udsætte denne b2body instans, quickbox2d giver dig adgang til en masse box2d metoder.vi skal bruge det getlinearvelocity() og setlinearvelocity().den fuldstændige liste over alle de b2body metoder, se her.,, den lineære hastighed af en stram krop er defineret som et 2d vektor, x - og y - værdier for denne vektor er tilføjet til x - og y - placering af en given stive lig.den lineære hastighed af en stram krop varierer over tid på grund af tyngdekraften, sammenstød med andre genstande, gnidninger osv.box2d har en klasse, der specifikt er konstrueret til at håndtere vektorer ringede b2vec2.den setlinearvelocity() metode kræver en b2vec2 som sin første og eneste argument.vi er nødt til at importere b2vec2, så tilføje denne linje under import redegørelse for quickbox2d: //du allerede har denne import kom. actionsnippet. qbox. * //tilføje dette: import box2d. fælles. matematik. *), b2vec2 er indeholdt i matematik - pakken.lad os tage et kig på setlinearvelocity().vi er nødt til at tilføje en kode i den onstep() lytter funktion: //du allerede burde have denne funktion definition funktion onstep (evt: begivenhed): ugyldig (//tilføje dette betinget hvis (centrale [tastatur. ret]) (art. lig. setlinearveloctiy (nye b2vec2 (10, 0)}}, prøv at teste deres film og rammer den rigtige nøgle.de stive lig vil flyde til højre på skærmen.lad os tilføje kode til venstre, tilføje følgende kode ind i din onstep() funktion: //tilføje dette: hvis (centrale [tastatur. venstre]) (art. lig. setlinearveloctiy (nye b2vec2 (- 10, 0)}, så skulle du prøve at rode rundt med x - og y - værdier for b2vec2 for at få en fornemmelse af, hvordan det virker. det er ret godt, men forslaget er en robot.der er et par ting, vi kan gøre, for at disse centrale kontrol arbejde lidt pænere.den første ting, vi kan gøre, er bare organisatoriske.det er ikke meget belejligt eller fleksible til konstant at skabe nye b2vec2 tilfælde, så lad os tilføje en variabel for arbejdet med karakter er lineær hastighed.tilføje denne variabel definition til din kode: //du allerede har det var karakter: quickobject; //tilføje denne linje var charvel: b2vec2 = nye b2vec2(),, hvis du ikke forbi noget til b2vec2 konstruktøren x - og y - egenskaber default - 0.næste, ændre deres onstep() funktion til at se sådan ud:, funktion onstep (evt: begivenhed): ugyldig (charvel = karakter. lig. getlinearvelocity(); hvis (centrale [tastatur. ret]) (charvel. x + = 0,8; art. lig. setlinearvelocity (charvel)} hvis (nøgle tilbage [tastatur.]) (charvel. x - = 0,8; art. lig. setlinearvelocity (charvel)} hvis (centrale [tastatur.!) (charvel. y = - 10; art. lig. setlinearvelocity (charvel)} hvis (centrale [tastatur.]) (charvel. y = 0,8; karakter. lig. setlinearvelocity (charvel)), hvis du tester dit træk, du vil se, at de centrale kontroller til karakter er blevet forbedret betydeligt. i begyndelsen af onstep() funktion, vi kalder getlinearvelocity() metode.vi gør det her, så vi ikke tvinge den lineære hastighed at ændre brat af genfastsættelse af alle værdier.vi læste den lineære hastighed og ændre i henhold til tastatur input.når vi ønsker at flytte til højre eller venstre vi bare ændre x ejendom, en smule (0,8 m).når vi kommer op, vi har brug for lidt mere kraft på grund af tyngdekraften, så vi ændre y ejendom af charvel i - 10.når vi kommer ned, tyngdekraften fungerer i vores tjeneste, så vi kan bare bruge 0, 8 meter igen. på dette punkt er vi nødt til at udføre en lille kode rydde op.lad os flytte den centrale kontrol kode ind i sin egen funktion:, funktion onstep (evt: begivenhed): ugyldig (charvel = karakter. lig. getlinearvelocity(); keycontrols();} funktion keycontrols(): ugyldig (hvis (centrale [tastatur. ret]) (charvel. x + = 0,8; art. lig. setlinearvelocity (charvel);), hvis centrale [tastatur. venstre]) (charvel. x - = 0,8; art. lig. setlinearvelocity (charvel)} hvis (centrale [tastatur.!) (charvel. y = - 10; art. lig. setlinearvelocity (charvel)} hvis (centrale [tastatur. ned!) (charvel. y = 0,8; art. lig. setlinearvelocity (charvel)), hvis du føler, du kan afslutte den organiserede - 10 og 0,8 værdier til variabler.for forenkling af denne lektion, jeg går ud, men føler mig fri til at gøre det, hvis du vil.som nævnt tidligere, er der en masse andre metoder i b2body klasse.vil du tage et par minutter og lege med nogle af de andre.de er alle ret intuitivt - nogle af dem vil blive dækket i tredje del af denne forelæsning serie.,, punkt 14: quickobject x - og y - egenskaber, er det ret almindeligt at nødvendigheden af at tvinge en stiv organ til at hoppe fra et sted til et andet.du kan gøre dette ved hjælp af de quickobject x - og y - egenskaber.tilføje under teleportcharacter() funktion til din kode, og kalder det kontinuerligt i din onstep() funktion:...teleportcharacter();} //udgangen af onstep() metode fungerer teleportcharacter(): ugyldig (//begrænse karakter bevægelse, hvis (char). < 4 & &, char. y > 12) (char. x = 8, char. y = 3; //- 0 personerne hastighed charvel. setzero(), char. lig. setlinearvelocity (charvel)}} denne kode gør det så når din karakter, flytter til den nedre venstre hjørne af skærmen, teleporterer tilbage til sin oprindelige udgangspunkt (8,3).test din film og arbejde dig vej til den nederste venstre hjørne af skærmen for at se det i praksis. det virker ved den løbende kontrol af x - og y - egenskaber af vores karakter stive lig og nulstilling af dem, hvis den pågældende betingelse er opfyldt.vi opfordrer også den setzero() metode b2vec2 charvel - som navnet antyder dette sæt x - og y - egenskaber af charvel til 0, der forårsager karakter er lineær hastighed skal fastsættes til nul, trin 15: tilføjelse af to platforme, i det næste skridt skal vi bruge x, y og vinkel egenskaber af quickobjects for at skabe en enkelt flydende platforme.den første ting, vi skal gøre, er at tilføje visse variable definitioner: //du allerede har disse...var karakter: quickobject, var charvel: b2vec2 = nye b2vec2(); //tilføje disse 3 nye vars var oscillator: quickobject, var osctheta: antal = 0, var rotator: quickobject;, først skal vi forsyne oscillator variabel med en statisk rektangel krop.tilføje denne kodeks til din buildsimulation() funktion:, oscillatorer = sim. addbox ((x, y: 21: 8, bredde: 2,5, højde: 0, 25, fillcolor: 0x009965, massefylde: 0}), er det ret lige frem.vi ønsker at bringe denne platform op og ned - for, at vi vil bruge matematik. sin().tilføje under runoscillator() funktion til din kode, og kalder det kontinuerligt i din onstep() funktion.test din film,.,...runoscillator();} //udgangen af onstep() funktion funktion runoscillator(): ugyldig (oscillator. y = 8 + 4 * matematik. - (osctheta); osctheta + = 0, 01;} denne kode svinger y ejendom af oscillator stive lig mellem 4 og 16 meter.hvis du ikke er bekendt med sine og cosinus, kan du have lyst til at læse lidt op på nogle grundlæggende trigonometri.det centrale punkt i dette eksempel, er, at vi er i stand til at bruge en simpel ligning til at ændre y ejendom af en stram krop., bagefter skal vi tilføje vores rotator platform.kopi af denne kode ind i din buildsimulation() funktion:, rotator = sim. addbox ((x: 16, y: 8, bredde: 3, højde: 0,3, fillcolor: 0x009965, massefylde: 0}), ikke noget særligt her, vi har placeret denne platform, så det ikke påvirker andre dele vores simulering.nu skal det dreje - vi kan tilføje en funktion til runrotator() til at gøre det:...runrotator();} //udgangen af onstep() funktion funktion runrotator(): ugyldig (rotator.angle + = 0, 02;}, gå videre og teste din film.tag et øjeblik til at flytte stive organer til og fra platformene.og teste de har måske bemærket, at stive organer kan falde gennem oscillerende platform.hvis du ikke har bemærket det, træffe de stive lig med undtagelse af karakter og på de skiftende platform.vil du se, at efter lidt det falder igennem oscillerende platform, som denne:,, det sker, fordi kroppen sidder på oscillerende platformen er faldet i søvn, og box2d har indstillet kontrol for kollisioner på det.den nemme løsning er at fastsætte allowsleep param falske på en stiv organ, der skal sidde på den skiftende platform.det fungerer fint, men som ikke er særlig effektiv.en mere elegant løsning ville være, hvis vi kunne sige, om en ulykke var opstået på oscillerende platform og sørge for, at det er i strid med falder ikke i søvn.det er muligt ved hjælp af noget, der hedder kontaktpunkter.vi dækker kontaktpunkter i del 3 i denne forelæsning, men hvis du vil, kan du se nogle eksempler på dem her, trin 16: userdata ejendom, i box2d, stive organer har en ejendom, kaldet userdata.det er bare en untyped variabel, der er bestemt til brug med toldoplysninger om en given stive lig. quickbox2d befolker den userdata ejendom med en displayobject.så hvis du ønsker at tilføje en mouseevent huden af en quickobject, eller hvis de ønsker at drage nogle yderligere grafiske i en quickobject ved hjælp af den grafiske ejendom, du er nødt til at bruge userdata ejendom.vi vil se, hvordan at gøre begge disse ting i dette skridt.starte med at definere en variabel ringede shootbox med alle dine andre variabler: //du allerede har disse: var osctheta: antal = 0, var rotator: quickobject; //det var shootbox: quickobject. nu skal vi skabe shootbox og tegne et x i den.der tilføjes følgende kode til din buildsimulation() funktion og teste din film, shootbox = sim. addbox ((x, y: 24: 17, bredde: 1.5, højde: 1}); //trække et x i shootbox userdata.graphics shootbox. userdata. grafik. linestyle (0, 0xffffff, 0,5); shootbox. userdata. grafik. til (- 20 - 20); shootbox. userdata. grafik. og gratis linjetil (20, 20); shootbox. userdata. grafik. til (20 - 20); shootbox. userdata. grafik. og gratis linjetil (- 20, 20), vil dette arbejde på samme måde, som hvis du bruger skik skind.,, at mouseevents virker på nøjagtig samme måde.lad os skabe en enkel lytter funktion til brug med en mouseevent, tilføje denne funktion til din kode:, funktion onshootboxclick (evt: mouseevent): ugyldig (var - currlinearvec: b2vec2 = shootbox. lig. getlinearvelocity(); currlinearvec. x - = 15 currlinearvec. y - = 15 shootbox. lig. setlinearvelocity (currlinearvec);), kan vi bruge det til at lytte funktion i forbindelse med shootbox nu tilføje denne kodeks til din buildsimulation() funktion:, shootbox. addeventlistener (mouseevent.click, onshootboxclick), når du teste din film, hvis du klikker på shootbox stive lig er det lineære hastighed justeres, der får det til at skyde op og til venstre.,, skridt 17: vinkelhastighed, kan vi tilføje en sidste kontakt til vores shootbox ved hjælp af vinkelhastighed.vinkelhastighed er hastigheden af en given stive lig rotation.at tilføje en lille tur til shootbox, tilføje denne linje i onshootboxclick() lytter funktion:, shootbox. lig. setangularvelocity (10), gå videre og t

















Previous:
Next Page: