box2d for flash - og as3: bygning

, box2d for flash - og as3: bygning,,,,, andel,,,,,,,, 11,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss., i de første to dele af denne serie, skabte vi to simple typer objekt, som ved hjælp af flash er display - liste.i denne del, kan vi se, hvordan at udvide dette til lad os skabe så mange forskellige typer af mål, som vi ønsker, uden vores kodeks bliver viklet ind.,,, jeg anbefaler, at man læser denne serie fra starten, men hvis du vil begynde her, så tag denne zip fil. den indeholder en kildekode fra slutningen af den anden del.(, downloade, knap ovenfor indeholder kildekode fra slutningen af det, en del.), trin 1: nye bolde, tak. lad os se, hvor vi slap:,, en flok hjul og kasser som hopper rundt.hjulene ikke alle har de samme egenskaber; hvert hjul er en tilfældig størrelse, tilbagelevering, friktion, og tæthed.det samme gælder for de kasser. det er fint til prøvning, men lad os gøre det lidt mindre tilfældigt.vi skal starte med at udskifte hjulene med tennis bolde, der alle har samme egenskaber. først udarbejde en tennisbold (eller få et billede af en).her er min:,, at gøre din i overensstemmelse med min, sikre, at det kaldes tennisball.png,, at du gemmer det i \\ l \\,, at det er 35x35px, og at det har en gennemsigtig baggrund.(du kan ændre nogen af disse punkter, hvis du vil, men du bliver nødt til at finde ud af, hvordan til at ændre deres kode i overensstemmelse hermed.), omfatter de i main.as, men heller ikke dér er menneskene sikre din fil, ligesom vi har gjort før: [omfatter (kilde: "... /l /tennisball. men heller ikke dér er menneskene sikre)] offentlige var tennisball: klasse; nu skabe to systemer: en til din tennis bold box2d genstande, og én for de tilsvarende billeder: offentlige var tennisballarray: system; offentlige var tennisballimages: array, tennisballarray = nye array(); tennisballimages = nye array(); (det er den samme, som vi gjorde i anden del af denne serie, så tage endnu et kig på det, hvis du har brug for en opfrisker.), nu har vi brug for en funktion til at skabe en fælles tennis bold.her er, hvad vi har brug for at skabe en enkelt hjul:, privat funktion createwheel (mradius: antal, pxstartx: antal, pxstarty: antal, mvelocityx: antal, mvelocityy: antal) ugyldig (var - wheelbodydef: b2bodydef = nye b2bodydef(); wheelbodydef.type = b2body.b2_dynamicbody; wheelbodydef. holdning. der pxstartx * pxtom, pxstarty * pxtom) var wheelbody: b2body = verden. createbody (wheelbodydef) var circleshape: b2circleshape = nye b2circleshape (mradius) var wheelfixturedef: b2fixturedef = nye b2fixturedef(); wheelfixturedef.shape = circleshape; wheelfixturedef.restitution = (matematik. random() * 0, 5) + 0, 5; wheelfixturedef.friction = (matematik. random() * 1, 0); wheelfixturedef.density = matematik. random() * 20 var wheelfixture: b2fixture = wheelbody. createfixture (wheelfixturedef) var startingvelocity: b2vec2 = nye b2vec2 (mvelocityx, mvelocityy); wheelbody. setlinearvelocity (startingvelocity); wheelarray. tryk (wheelbody) var wheelimage: bitmap = nye simplewheel(); wheelimage.width = mradius * 2 * mtopx; wheelimage.height = mradius * 2 * mtopx, var wheelsprite: sprite = nye sprite(); wheelsprite. addchild (wheelimage); wheelsprite. x = pxstartx; wheelsprite. y = pxstarty; wheelimages. tryk (wheelsprite). addchild (wheelsprite); wheelsprite. addeventlistener (mouseevent.click, onclickwheelimage)}, vi kan kopiere det og ændre det til vores behov.da alle tennisbolde vil have samme egenskaber (størrelse, tilbagelevering, friktion, og tæthed), har vi ikke brug for den, mradius argument, og vi behøver ikke at bruge tilfældige tal, hvor som helst.det er svært at gætte, hvad værdier for tilbagelevering osv. vil være korrekt, så jeg har en nu. - vi kan altid rette dem senere. her er mit, createtennisball(), funktion:, privat funktion createtennisball (pxstartx: antal, pxstarty: antal, mvelocityx: antal, mvelocityy: antal) ugyldig (var - tennisballbodydef - b2bodydef = nye b2bodydef(); tennisballbodydef.type = b2body.b2_dynamicbody; tennisballbodydef. holdning. der pxstartx * pxtom, pxstarty * pxtom) var tennisballbody: b2body = verden. createbody (tennisballbodydef) var circleshape: b2circleshape = nye b2circleshape (35 *. * pxtom) var tennisballfixturedef: b2fixturedef = nye b2fixturedef(); tennisballfixturedef.shape = circleshape tennisballfixturedef.restitution = 0, 8; tenni;sballfixturedef.friction = 0, 75, tennisballfixturedef.density = 1, 0; var tennisballfixture: b2fixture = tennisballbody. createfixture (tennisballfixturedef) var startingvelocity: b2vec2 = nye b2vec2 (mvelocityx, mvelocityy); tennisballbody. setlinearvelocity (startingvelocity); tennisballarray. tryk (tennisballbody) var tennisballimage: bitmap = nye tennisball(), var tennisballsprite: sprite = nye sprite(); tennisballsprite. addchild (tennisballimage); tennisballsprite. x = pxstartx; tennisballsprite. y = pxstarty; tennisballimages. tryk (tennisballsprite). addchild (tennisballsprite); //tennisballsprite. addeventlistener (mouseevent.click, onclickwheelimage)}, et par ting at bemærke:,,, b2circleshape(), opbyggeeller forventer at modtage radius af en tennisbold i meter, og jeg ønsker ikke at knuse eller udvide det billede, jeg har lavet.jeg tror, jeg kan se den radius af en rigtig tennis bold, træder denne værdi i her, og ændre den, pxtom, skalafaktor gøre alt passer, men jeg har lige fortalt konstruktøren til at konvertere pixel radius af mit tennis bold image at meter., restituion er bounciness af genstanden, på en skala fra 0 til 1; tennisbolde er ret elastisk, så jeg har sat meget højt. forholdet er mellem 0 og 1, tennisbolde er meget hårdt, så jeg satte denne temmelig høj., massefylde, er ikke begrænset til et bestemt område; tennisbolde er for det meste luft, så jeg satte denne til samme værdi som mine kasser (som jeg antager er tomme). i modsætning til, createwheel(), er der ingen grund til at resize billedet (som nævnt ovenfor), så jeg har slettet de lines. jeg har kommenteret det, onclickwheelimage, begivenhed lytter til nu, så det er ikke relevant, forsøge at samle og omvendt.det bør arbejde, hvis det ikke, du gik glip af noget - - men da vi ikke er ringe, createtennisball(), alle steder fra, vil der ikke være forskellige.,, trin 2: at skabe tennisbolde, lad os bare fjerne hjul med det samme, og erstatte dem med tennisbolde.Change this code, in ,getStarted(),:, for (var i:int = 0; i < 20; i++) { \tcreateWheel( \t\tMath.random() * 0.5, \t\tMath.random() * (stage.stageWidth - 20) + 10, \t\tMath.random() * (stage.stageHeight - 20) + 10, \t\t(Math.random() * 100) - 50, \t\t0 \t); \tcreateCrate( \t\tMath.random() * 1.5, \t\tMath.random() * (stage.stageWidth - 20) + 10, \t\tMath.random() * (stage.stageHeight - 20) + 10, \t\t(Math.random() * 100) - 50, \t\t0 \t) },...to this:, for (var i:int = 0; i < 20; i++) { \tcreateTennisBall( \t\tMath.random() * (stage.stageWidth - 20) + 10, \t\tMath.random() * (stage.stageHeight - 20) + 10, \t\t(Math.random() * 100) - 50, \t\t0 \t); \tcreateCrate( \t\tMath.random() * 1.5, \t\tMath.random() * (stage.stageWidth - 20) + 10, \t\tMath.random() * (stage.stageheight - 20) + 10 (matematik. random() * 100) - 50, 0), konstaterer, at den første argument er blevet slettet, da vi ikke manuelt fastsatte størrelse mere, men alle andre argumenter, forbliver de samme.prøv det,...ikke helt rigtigt.- ja, selvfølgelig gjorde vi ikke tilføje en kode for at gøre tennisbolde.vi vil gøre det næste gang.ændringer, ontick(), fra denne:, privat funktion ontick (a_event: timerevent): ugyldig (verden. skridt (0, 025, 10, 10). drawdebugdata(), var wheelimage: sprite; for hver (var - wheelbody: b2body i wheelarray) (wheelimage = wheelimages [wheelarray. indexof (wheelbody)]; wheelimage. x = (wheelbody. getposition(). x * mtopx) - (wheelimage.width * 0, 5); wheelimage. y = (wheelbody. getposition(). y * mtopx) - (wheelimage.height * 0, 5)} var crateimage: sprite; for hver (var - cratebody: b2body i cratearray) (crateimage = crateimages [cratearray. indexof (cratebody)); crateimage. x = (cratebody. getposition(). x * mtopx); //- (crateimage.width * 0, 5); crateimage. y = (cratebody. getposition(). y * mtopx); //- (crateimage.height* 0, 5); crateimage.rotation = cratebody. getangle() * radtodeg;}}, til dette:, privat funktion ontick (a_event: timerevent): ugyldig (verden. skridt (0, 025, 10, 10). drawdebugdata(), var tennisballimage: sprite; for hver (var - tennisballbody: b2body i tennisballarray) (tennisballimage = tennisballimages [tennisballarray. indexof (tennisballbody)]; tennisballimage. x = (tennisballbody. getposition(). x * mtopx) - (tennisballimage.width * 0, 5); tennisballimage. y = (tennisballbody. getposition(). y * mtopx) - (tennisballimage.height * 0, 5)} var crateimage: sprite; for hver (var - cratebody: b2body i cratearray) (crateimage = crateimages [cratearray. indexof (cratebody)]; crateimage. x = (cratebody. getposition(). x * mtopx); //- (crateimage.width * 0, 5); crateimage. y = (cratebody. getposition(). y * mtopx); //- (crateimage.height * 0, 5); crateimage.rotation = cratebody. getangle() * radtodeg;}}, det er bare et tilfælde af en finde og erstatte, - "hjul" til "tennisball.") prøve omvendt:,, bedre, men vi har ikke nogen rotation (, vi ikke har brug for det, fordi de hjul, var alle rotationally symmetrisk).tilføje, at nu:, var tennisballimage: sprite; for hver (var - tennisballbody: b2body i tennisballarray) (tennisballimage = tennisballimages [tennisballarray. indexof (tennisballbody)]; tennisballimage. x = (tennisballbody. getposition(). x * mtopx) - (tennisballimage.width * 0, 5); tennisballimage. y = (tennisballbody. getposition(). y * mtopx) - (tennisballimage.height * 0, 5); tennisballimage.rotation = tennisballbody. getangle() * radtodeg;}, ja.kan du huske, da vi havde dette problem med de kasser?kan du huske, hvordan vi løste det?se lige det samme her, på din egen.min løsning er nedenunder, hvis du vil se:, privat funktion createtennisball (pxstartx: antal, pxstarty: antal, mvelocityx: antal, mvelocityy: antal) ugyldig (var - tennisballbodydef: b2bodydef = nye b2bodydef(); tennisballbodydef.type = b2body.b2_dynamicbody; tennisballbodydef. holdning. der pxstartx * pxtom, pxstarty * pxtom) var tennisballbody: b2body = verden. createbody (tennisballbodydef) var circleshape: b2circleshape = nye b2circleshape (35 *. * pxtom) var tennisballfixturedef: b2fixturedef = nye b2fixturedef(); tennisballfixturedef.shape = circleshape; tennisballfixturedef.restitution = 0, 8; tennisballfixturedef.friction = 0, 75, tennisballfixturedef.density = 1, 0; var tennisballfixture: b2fixture = tennisballbody. 'atefixture (tennisballfixturedef) var startingvelocity: b2vec2 = nye b2vec2 (mvelocityx, mvelocityy); tennisballbody. setlinearvelocity (startingvelocity); tennisballarray. tryk (tennisballbody) var tennisballimage: bitmap = nye tennisball(), var tennisballsprite: sprite = nye sprite(); tennisballsprite. addchild (tennisballimage); tennisballimage. x - = tennisballimage.width /2; tennisballimage. y - = tennisballimage.height /2; tennisballsprite. x = pxstartx; tennisballsprite. y = pxstarty; tennisballimages. tryk (tennisballsprite). addchild (tennisballsprite); //tennisballsprite. addeventlistener (mouseevent.click, onclickwheelimage)} //...privat funktion ontick (a_event: timerevent): ugyldig (verden. skridt (0, 025, 10, 10). drawdebugdata(), var tennisballimage: sprite; for hver (var - tennisballbody: b2body i tennisballarray) (tennisballimage = tennisballimages [tennisballarray. indexof (tennisballbody)]; tennisballimage. x = (tennisballbody. getposition()). * mtopx); //- (tennisballimage.width * 0, 5); tennisballimage. y = (tennisballbody. getposition(). y * mtopx); //- (tennisballimage.height * 0, 5); tennisballimage.rotation = tennisballbody. getangle() * radtodeg;} var crateimage: sprite; for hver (var - cratebody: b2body i cratearray) (crateimage = crateimages [cratearray. indexof (cratebody)]; crateimage. x = (cratebody. getposition(). x * mtopx) /- (crateimage.width * 0, 5); crateimage. y = (cratebody. getposition(). y * mtopx); //- (crateimage.height * 0, 5); crateimage.rotation = cratebody. getangle() * radtodeg;}}, teste det:,,.,, trin 3: at skabe bowlingkugler, vil jeg gerne tilføje tre typer af ball: en bowlingkugle, basketball, og en gummi kugle.som du kan se fra ovennævnte, det er en smerte til at gøre det samme igen og igen.vi kan tilføje en bowlingkugle næste og forsøge at forenkle processen, så vi ikke er nødt til at holde denne lille irriterende ændringer. her er min bowlingkugle image.igen, det er gratis at benytte deres egne, men prøv at gøre det 60x60px med navnet bowlingball. men heller ikke dér er menneskene sikre:,, integrere image og tilføje de nødvendige systemer: [omfatter (kilde: "... /l /bowlingball. men heller ikke dér er menneskene sikre)] offentlige var bowlingball: klasse; //...offentlige var bowlingballarray: system; offentlige var bowlingballimages: system; //...bowlingballarray = nye array(); bowlingballimages = nye array();, skriver, createbowlingball(), funktion:, privat funktion createbowlingball (pxstartx: antal, pxstarty: antal, mvelocityx: antal, mvelocityy: antal) ugyldig (var - bowlingballbodydef: b2bodydef = nye b2bodydef(); bowlingballbodydef.type = b2body.b2_dynamicbody; bowlingballbodydef. holdning. der pxstartx * pxtom, pxstarty * pxtom) var bowlingballbody: b2body = verden. createbody (bowlingballbodydef) var circleshape: b2circleshape = nye b2circleshape (60 *. * pxtom) var bowlingballfixturedef: b2fixturedef = nye b2fixturedef(); bowlingballfixturedef.shape = circleshape; bowlingballfixturedef.restitution = 0, 0; //ikke hoppe bowlingballfixturedef.friction = 0, 0; //megetglat bowlingballfixturedef.density = 20,0; //meget tunge var bowlingballfixture: b2fixture = bowlingballbody. createfixture (bowlingballfixturedef) var startingvelocity: b2vec2 = nye b2vec2 (mvelocityx, mvelocityy); bowlingballbody. setlinearvelocity (startingvelocity); bowlingballarray. tryk (bowlingballbody) var bowlingballimage: bitmap = nye bowlingball(), var bowlingballsprite: sprite = nye sprite(); bowlingballsprite. addchild (bowlingballimage); bowlingballimage. x - = bowlingballimage.width /2; bowlingballimage. y - = bowlingballimage.height /2; bowlingballsprite. x = pxstartx; bowlingballsprite. y = pxstarty; bowlingballimages. tryk (bowlingballsprite). addchild (bowlingballsprite); //bowlingballsprite.addeventlistener (mouseevent.click, onclickwheelimage)},... og skabe den faktiske genstande: for (var - jeg: int = 0. jeg < 20; jeg + +) (createtennisball (matematik. random() * (stage.stagewidth - 20) + 10, matematik. random() * (stage.stageheight - 20) + 10 (matematik. random() * 100) - 50, 0); createbowlingball (matematik. random() * (stage.stagewidth - 20) + 10, matematik. random() * (stage.stageheight - 20) + 10 (matematik. random() * 100) - 50, 0); createcrate (matematik. random() * 1,5, matematik. random() * (stage.stagewidth - 20) + 10, matematik. random() * (stage.stageheight - 20) + 10 (matematik. random() * 100) - 50, 0), pyha.okay, nu for at gøre.lad os kigge på vores at kode hidtil:, privat funktion ontick (a_event: timerevent): ugyldig (verden. skridt (0, 025, 10, 10). drawdebugdata(), var tennisballimage: sprite; for hver (var - tennisballbody: b2body i tennisballarray) (tennisballimage = tennisballimages [tennisballarray. indexof (tennisballbody)); tennisballimage. x = (tennisballbody. getposition(). x * mtopx); //- (tennisballimage.width * 0, 5); tennisballimage. y = (tennisballbody. getposition(). y * mtopx); //- (tennisballimage.height * 0, 5); tennisballimage.rotation = tennisballbody. getangle() * radtodeg;} var crateimage: sprite. hver (var - cratebody: b2body i cratearray) (crateimage = crateimages [cratearray. indexof (cratebody)];crateimage. x = (cratebody. getposition(). x * mtopx); //- (crateimage.width * 0, 5); crateimage. y = (cratebody. getposition(). y * mtopx); //- (crateimage.height * 0, 5); crateimage.rotation = cratebody. getangle() * radtodeg;}}, mærke noget?takket være den forandring, som vi har gjort i de sidste skridt - at fastsætte rotation problem - de to fremhævet sektioner er næsten identiske, bare udskifter ordet "tennisball" til "kasse" i hvert enkelt tilfælde, og de er et perfekt match. tyder dette på, at vi kan samle dem i et enkelt loop, som kunne anvendes for at sikre, at alle genstande.på den måde, vi ikke har brug for at skabe en ny loop at gøre bowling kugler.lad os se det næste,.,, trin 4: at gøre i en enkelt loop, til at gøre det, vi har brug for at kombinere, tennisballarray, og cratearray, i et enkelt system.det er lettere, hvis jeg viser dig:, privat funktion ontick (a_event: timerevent): ugyldig (verden. skridt (0, 025, 10, 10). drawdebugdata(), var generalb2bodyarray: array = nye array(); generalb2bodyarray = generalb2bodyarray. concat (tennisballarray, cratearray) var generalimages: array = nye array(); generalimages = generalimages. concat (tennisballimages, crateimages) var generalimage: sprite; for hver (var - a: b2body i generalb2bodyarray) (generalimage = generalimages [generalb2bodyarray. indexof (a)] generalimage. x = (a. getposition(). x * mtopx); generalimage. y = (a. getposition(). y * mtopx); generalimage.rotation = a. getangle() * radtodeg;}}, se hvordan det virker?i linje 6 - 10, skaber vi et par nye systemer: en indeholder alle de bolde og kasse b2body genstande, og det andet indeholder alle de bolde og kasse nisser.det vigtigste er, at de indeholder dem i samme rækkefølge, hvis den 17. element, generalimages [], er en tennisbold, så den 17. eleemnt, generalb2bodyarray [], er den samme, tennis bold er b2body.,,, loop - og gør nøjagtigt det samme som de to før den gjorde. er bare mere almindelige.prøv det:,, bowlingkugle billeder, rør dig ikke, men se, hvor let det er at føje dem til renderer:, privat funktion ontick (a_event: timerevent): ugyldig (verden. skridt (0, 025, 10, 10). drawdebugdata(), var generalb2bodyarray: array = nye array(); generalb2bodyarray = generalb2bodyarray. concat (tennisballarray, cratearray, bowlingballarray) var generalimages: array = nye array(); generalimages = generalimages. concat (tennisballimages, crateimages, bowlingballimages) var generalimage: sprite; for hver (var - a: b2body i generalb2bodyarray) (generalimage = generalimages [generalb2bodyarray. indexof (a)] generalimage. x = (a. getposition(). x * mtopx); generalimage. y = (a.getposition(). y * mtopx); generalimage.rotation = a. getangle() * radtodeg;}}, det er alt.tjek det ud, er det begyndt at løbe lidt langsomt på min telefonsvarer, så jeg vil reducere antallet af genstande fra 60 til 30: for (var - jeg: int = 0. jeg < 10 - + +) (createtennisball (matematik. random() * (stage.stagewidth - 20) + 10, matematik. random() * (stage.stageheight - 20) + 10 (matematik. random() * 100) - 50, 0); createbowlingball (matematik. random() * (stage.stagewidth - 20) + 10, matematik. random() * (stage.stageheight - 20) + 10 (matematik. random() * 100) - 50, 0); createcrate (matematik. random() * 1,5, matematik. random() * (stage.stagewidth - 20) + 10, matematik. random() * (stage.stageheight - 20) + 10 (matematik. random() * 100) - 50, 0), der er mere plads til dem nu, for:,, trin 5.: at skabe basketbolde, basketballs, næste.mit billede er 75x75px og ringede til basketball. men heller ikke dér er menneskene sikre:,, som sædvanlig, som omfatter de image som en klasse: [omfatter (kilde: "... /l /basketball. men heller ikke dér er menneskene sikre)] offentlige var basketball: klasse, nu kan vi tilføje to systemer for basketball b2body genstande og nisser.bortset fra...vent.hvorfor har vi brug for et separat system for disse?vi kan faktisk ikke!ikke mere.lad os forene alle vores b2body genstande i et system, og alle vores ånder ind i en anden.ændring: offentlige var cratearray: system; offentlige var crateimages: system; offentlige var tennisballarray: system; offentlige var tennisballimages: system; offentlige var bowlingballarray: system; offentlige var bowlingballimages: system;, - - til denne: offentlige var generalb2bodyarray: system; offentlige var generalimages: array, ændre det, wheelarray: = nye array(); wheelimages = nye array(); cratearray = nye array(); crateimages = nye array(); tennisballarray = nye array(); tennisballimages = nye array(); bowlingballarray = nye array(); bowlingballimages = nye array();, - - til denne:, generalb2bodyarray = nye array(); generalimages = nye array(); i alle skabe «, hvad », funktion, svarer til det, tennisballarray. tryk (tennisballbody).... til dette:, generalb2bodyarray. tryk (tennisballbody) og /eller. - (cratebody), eller hvad det nu er, - - og det, tennisballimages. tryk (tennisballsprite), at denne:, generalimages. tryk (tennisballsprite) og /eller. - (cratesprite), eller hvad, vi kan gøre, onclickwheelimage(), der gælder for alle typer af genstande, som er meget let nu, bare at ændre denne linje:, privat funktion onclickwheelimage (ref.: mouseevent): ugyldig (var - spritethatwasclicked: sprite = event.target som sprite, var relatedbody: b2body = wheelarray [wheelimages. indexof (spritethatwasclicked)] var centerx: antal = spritethatwasclicked. x + (spritethatwasclicked.width /2), var centery: antal = spritethatwasclicked. y + (spritethatwasclicked.height /2), var xdistance: antal = centerx- event.stagex, var ydistance: antal = centery - event.stagey, var ximpulse: antal = 60 * xdistance * pxtom; //valgte jeg 60, blot fordi var yimpulse: antal = 60 * ydistance * pxtom; //det føltes ret "til mig relatedbody. applyimpulse (nye b2vec2 (ximpulse, yimpulse), relatedbody. getposition())},... som så:, privat funktion onclickwheelimage (ref.: mouseevent): ugyldig (var - spritethatwasclicked: sprite = event.target som sprite, var relatedbody: b2body = generalb2bodyarray [generalimages. indexof (spritethatwasclicked)] var centerx: antal = spritethatwasclicked. x + (spritethatwasclicked.width /2), var centery: = spritethatwasclicked. y + (spritethatwasclicked.height /2), var xdistance: antal = centerx - begivenhed.tagex, var ydistance: antal = centery - event.stagey, var ximpulse: antal = 60 * xdistance * pxtom; //valgte jeg 60, blot fordi var yimpulse: antal = 60 * ydistance * pxtom; //det føltes ret "til mig relatedbody. applyimpulse (nye b2vec2 (ximpulse, yimpulse), getposition() relatedbody.)), og endelig i, ontick(), kan vi slette linjer fremhævet nedenfor:, privat funktion ontick (a_event: timerevent): ugyldig (verden. skridt (0, 025, 10, 10). drawdebugdata(), var generalb2bodyarray: array = nye array(); generalb2bodyarray = generalb2bodyarray. concat (tennisballarray, cratearray, bowlingballarray) var generalimages: array = nye array(); generalimages = generalimages. concat (tennisballimages, crateimages, bowlingballimagikere) var generalimage: sprite; for hver (var - a: b2body i generalb2bodyarray) (generalimage = generalimages [generalb2bodyarray. indexof (a)] generalimage. x = (a. getposition(). x * mtopx); generalimage. y = (a. getposition(). y * mtopx); generalimage.rotation = a. getangle() * radtodeg;}}, samle deres stg for at sikre, at det fungerer:,, hvis det ikke er det, sandsynligvis på grund af en savnet array - et eller andet sted, bare se din fejlmeddelelser og prøv igen. det tog lidt tid, men det gør det meget lettere at tilføje nye objekter.vi er gradvis at strømline hele processen. der er en forenkling, vi kan give til disse systemer, men...,, trin 6:, der forbinder billeder til b2body objekter, hvorfor har vi den, generalimages [] vifte?det er bare, så vi kan knytte en b2body for de tilknyttede image, og omvendt.men der er en bedre måde at gøre dette på, hver b2body har en intern "bruger data" objekt - det kan fastsættes, at enhver genstand, du kan lide, og kan hentes fra andre steder.- kan vi sætte dette punkt på b2body objekt er sprite. det er let at gøre; i hver, skabe «, hvad » (), funktion, ændre svarende til denne linje:, generalimages. tryk (tennisballsprite), til et beløb af det, tennisballbody. setuserdata (tennisballsprite), så i, ontick(), i stedet for at finde billedet fra et system, vi kan finde den ved hjælp af brugerens data:, privat funktion ontick (a_event: timerevent): ugyldig (verden. skridt (0, 025, 10, 10). drawdebugdata(), var generalimage: sprite; for hver (var b2body a: i generalb2bodyarray) (generalimage = a. getuserdata() som sprite. generalimage. x = (a. getposition(). x * mtopx); generalimage. y = (a. getposition(). y * mtopx); generalimage.rotation = a. getangle() * radtodeg;}}, hvis du ville, kunne du erstatte bruger data med en sprite status og anvendelse blitting til at gøre de ting her.det er ganske enkelt at gøre det med denne struktur.), kan du fjerne, generalimages [] array - alt i alt nu.bortset fra én ting: det er stadig anvendes i onclickwheelimage(), for at få en henvisning fra billedet til b2body. kan vi bare bemærkning, onclickwheelimage(),, fordi vi bruger den ikke lige nu, men det ville være doven.og det er en god pointe, men vi er nødt til at være i stand til at finde nogen image er forbundet b2body.desværre, vi bruger den sprite klasse, og det har ikke indbygget "bruger data" - men vi kunne give det en., skabe en ny klasse, der hedder, b2sprite, udvidelse, sprite, i din mappe. src),:, pakke (import flash.display.sprite; offentlige klasse b2sprite udvider sprite {offentlige funktion b2sprite() {}}}, jeg har brugt en kapital b at skelne det fra den officielle box2d klasser.), skabe en, b2body, ejendomsret, pakke (import box2d.dynamics.b2body; import flash.display.sprite; offentlige klasse b2sprite udvider sprite {offentlige var organ: b2body; offentlig funktion b2sprite() (}), fordi dette omfatter sprite, vil det være nøjagtigt de samme som en sprite, bortset fradet ekstra ejendomme, som vi har brug for. nu, i alle skabe «, hvad » (), funktion, ændre den tilsvarende i denne kode:, var tennisballsprite: sprite = nye sprite();, - - til denne:, var tennisballsprite: b2sprite = nye b2sprite(); også, hvor end du har, hvad der svarer til denne linje:, tennisballbody. setuserdata (tennisballsprite), tilføje en anden linje under den, til at skabe en forbindelse fra den b2sprite til b2body:, tennisballbody. setuserdata (tennisballsprite); tennisballsprite.body = tennisballbody, så du kan ændre, onclickwheelimage(), som så:, privat funktion onclickwheelimage (ref.: mouseevent): ugyldig (hvis (event.target er b2sprite) (var - spritethatwasclicked: b2sprite = event.target som b2sprite, var relatedbody: b2body =spritethatwasclicked.body, var centerx: antal = spritethatwasclicked. x + (spritethatwasclicked.width /2), var centery: antal = spritethatwasclicked. y + (spritethatwasclicked.height /2), var xdistance: antal = centerx - event.stagex, var ydistance: antal = centery - event.stagey, var ximpulse: antal = 60 * xdistance * pxtom; //- valgte 60, blot fordi var yimpulse: antal = 60 * ydistance * pxtom; //det føltes ret "til mig relatedbody. applyimpulse (nye b2vec2 (ximpulse, yimpulse), relatedbody. getposition())}}, nu har du gjort alt det, du kan uncomment linjerne at tilføje begivenhed lyttere for, onclickwheelimage() (i tennis bold og bowlingkugle oprettelse funktioner) og afprøve din swf:,, klik en tennisbold eller bowlingkugle at se effekten. omdøber, onclickwheelimage(), funktion, onclickclickableimage(),.hvis du vil, kan du få kasserne clickable også!,, trin 7: at skabe basketbolde (stadig), hey, var vi ikke tilføje basketbolde.lad os komme tilbage til det. så har vi fjernet det image, system, hvilket betyder, at vi var ved at skrive, createbasketball(), funktion.men, vent...kan ikke hjælpe, men jeg spørger mig selv, om vi har brug for, generalb2bodyarray []. det viser sig, at vi ikke gør det, b2world, indeholder en liste over alle b2body objekter derinde, så systemet er unødvendig.vi laver bare et hurtigt ændre - jeg lover - - og så kan vi tilføje basketball. denne liste er ikke et mønster.det fungerer sådan her:,,, du beder om, verden. getbodylist(), og det giver dig den første b2body objekt i den liste. med denne krop, du ringer. getnext(), efter den næste b2body objekt i den liste, hvis. getnext(), afkast, nul, du har nået slutningen på listen.,, at kunne komme til at skrive det, ontick(), at koden til at bruge denne liste i stedet for den, generalb2bodyarray [].her er min løsning, hvis man ønsker at kontrollere:, privat funktion ontick (a_event: timerevent): ugyldig (verden. skridt (0, 025, 10, 10). drawdebugdata(), var currentbody: b2body = verden. getbodylist(), var currentimage: b2sprite; mens (currentbody!= null) (hvis (currentbody. getuserdata() er b2sprite) //vigtigt, da grænserne ikke har forbundet billeder (currentimage = currentbody. getuserdata() som b2sprite; currentimage. x = (currentbody. getposition(). x * mtopx); currentimage. y = (currentbody. getposition(). y * mtopx); currentimage.rotation = currentbody. getangle() * radtodeg;} currentbody = currentbody. getnext();}}, jeg har benyttet lejligheden til at tilføje nogle yderligere kontrol og ændre navnet på visse variabler, du behøver ikke at gøre dette, men det er nemmere, hvis du gør, for at holde vores kode konsekvent.), nu kan du fjerne alle henvisninger til generalb2bodyarray [].sørg for at teste din stg til at tjekke det stadig løber fint:,, at basketball er nu ret simpelt.første, skrive, createbasketball():, privat funktion createbasketball (pxstartx: antal, pxstarty: antal, mvelocityx: antal, mvelocityy: antal) ugyldig (var - basketballbodydef: b2bodydef = nye b2bodydef(); basketballbodydef.type = b2body.b2_dynamicbody; basketballbodydef. holdning. der pxstartx * pxtom, pxstarty * pxtom) var basketballbody: b2body = verden. createbody (basketballbodydef) var circleshape: b2circleshape = nye b2circleshape (75 *. * pxtom) var basketballfixturedef: b2fixturedef = nye b2fixturedef(); basketballfixturedef.shape = circleshape; basketballfixturedef.restitution = 0, 6; //ret elastisk basketballfixturedef.friction = 0, 4; //lidt hård basketballfixturedef.density = 2,5; //ret lyset var basketballfixture: b2fixture = basketballbody. createfixture (basketballfixturedef) var startingvelocity: b2vec2 = nye b2vec2 (mvelocityx, mvelocityy); basketballbody. setlinearvelocity (startingvelocity) var basketballimage: bitmap = nye basketball(), var basketballsprite: b2sprite = nye b2sprite(); basketballsprite. addchild (basketballimage); basketballimage. x - = basketballimage.width /2; basketballimage. - = basketballimage.height /2; basketballsprite. x = pxstartx; basketballsprite. y = pxstarty; basketballbody. setuserdata (basketballsprite). addchild (basketballsprite); basketballsprite.body = basketballbody; basketballsprite. addeventlistener (mouseevent.click, onclickclickableimage)},... så, skabe en masseaf disse: for (var - jeg: int = 0. jeg < 10 - + +) (createtennisball (matematik. random() * (stage.stagewidth - 20) + 10, matematik. random() * (stage.stageheight - 20) + 10 (matematik. random() * 100) - 50, 0); createbowlingball (matematik. random() * (stage.stagewidth - 20) + 10, matematik. random() * (stage.stageheight - 20) + 10 (matematik. random() * 100) - 50, 0); createbasketball (matematik







Previous:
Next Page: