lege med elastiske sammenstød

, lege med elastiske sammenstød,,,,, andel,,,,,,,,,,,,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss. denne post er en del af en serie, kaldte du regner med. at skabe skabende kunst hypeeuclidean vektorer i glimt, i denne forelæsning, vi vil skabe et spil, hvor formålet er at undgå, at andre objekter fra kolliderer med din markør.vi vil ikke bruge flash er indbygget, hittestobject(), metoder og i stedet skriver vi vores egen kollision påvisning rutiner.,,,, berigtiget forelæsning, hver anden uge, vi tage nogle af vores læsere er favorit stillinger fra hele historien om stedet.denne pædagogiske først blev offentliggjort i februar 2011.,, endelige resultat forpremiere, lad os tage et kig på det endelige resultat, vi arbejder hen imod:,, trin 1: begynde, skabe en ny flash - sagen (actionscript 3, 0), sæt scenen dimensioner til 500x500px og fps - 32, skridt. 2: ballet klasse, klasse vil indeholde alle oplysninger i forbindelse med en bold.bolden er, _mass,,, _radius,,, _xspeed, og en, _yspeed,.så vil vi få en ejendom til hver.i den pågældende vi passerer masse vinkel og hastigheden af bolden.for klasse vil være knyttet til en udstilling genstand, vi kan hente radius af vores bold ved at dividere bredden af display - objekt med 2.det, _xspeed, og _yspeed, kan beregnes ved hjælp af simpel nødvendig og cosinus funktioner, pakke (import flash.display.stage import flash.display.sprite import flash.events.event offentlige klasse bold udvider sprite (private var _radius: antal = 0 private var _mass: antal = 0 private var _xspeed: antal = 0 private var _yspeed: antal = 0 offentlig funktion kugle (masse: antal = 10, 0, vinkel: antal = math.pi, hastighed: antal = 10, 0): ugyldig (this.mass = masse. _radius = this.width/2 this.xspeed = hastighed * matematik. synd (vinkel) this.yspeed = hastighed * matematik. fordi (vinkel)}}}, for flere oplysninger om disse sin() metriske matematik. og matematik. cos() funktioner, se det her hurtigt tip.,, trin 3: at gettersog montører, i vores bold klasse vi giver getters og montører for vores egenskaber. offentlige funktion bliver radius(): antal (tilbage. _radius} offentlig funktion, der er massen (masse: antal) ugyldig (. _mass = masse} offentligheden få mass(): antal (tilbage. _mass} offentlig funktion, der er fastsat xspeed (xspeed: antal) ugyldig (. _xspeed = xspeed} offentligheden få xspeed(): antal (tilbage. _xspeed} offentlig funktion, der er fastsat yspeed (yspeed: antal) ugyldig (. _yspeed = yspeed} offentligheden få yspeed(): antal (tilbage. _yspeed}, trin 4: ajourføring funktion, funktionen ajourfører den x - og y - egenskaber af vores bold i henhold til, _xspeed, og _yspeed,.vi vil gennemføre denne funktion i vores bold, klasse, offentlig funktion update(): ugyldig (. x + = _xspeed. y + = _yspeed}, løntrin 5: de gennemførte klasse, vi afslutter vores bold, klasse i dette skridt, pakke (import flash.display.stage import flash.display.sprite import flash.events.event offentlige klasse bold udvider sprite (private var _radius: antal = 0 private var _mass: antal = 0 private var _xspeed: antal = 0 private var _yspeed: antal = 0 offentlig funktion kugle (masse: antal = 10, 0, vinkel: antal = math.pi, hastighed: antal = 10, 0): ugyldig (this.mass = masse. _radius = this.width/2 this.xspeed = hastighed * matematik. synd (vinkel) this.yspeed = hastighed * matematik. fordi (vinkel) offentlig funktionfå radius(): antal (tilbage. _radius} offentlig funktion, der er massen (masse: antal) ugyldig (. _mass = masse} offentligheden få mass(): antal (tilbage. _mass} offentlig funktion, der er fastsat xspeed (xspeed: antal) ugyldig (. _xspeed = xspeed} offentligheden få xspeed(): {tilbage. _xspeed} offentlig funktion, der er fastsat yspeed (yspeed: antal) ugyldig (. _yspeed = yspeed} offentligheden få yspeed(): antal (tilbage. _yspeed} offentlig funktion update(): ugyldig (. x + = _xspeed. y + = _yspeed}}}, trin 6: display objekter for vores bold klasse, i sager, der omfattede en starte fia kilde, der indeholder alle biblioteket poster, du har brug for.du kan trække dem selv, hvis du vil, naturligvis.sørg for, at dine blp er følgende genstande, viser, hvor:,, v1 = endelige xspeedball 1, v2 = endelige xspeedball 2, m1 = masse bold 1, m2 = masse bold 2, u1 = hastighed bold 1, u2 = hastighed bold 2, y-speeds ikke ændring, da det er en 1d kollision. med disse formler, vi kan beregne, xspeed, og yspeed, af hver bold. nu får vi de nye x - og y-speeds i vores roteres koordinatsystem.det sidste skridt er at omdanne alt tilbage til normal koordinatsystem.vi bruger, math.pi/2, fordi den vinkel mellem, xspeed, og yspeed, altid skal være 90 grader (pi /2 radianer), privat funktion docollision (ball1: bold, ball2: bold): ugyldig (var - xdist: antal = ball1. x - ball2. x var ydist: antal = ball1. y - ball2. y var collisionangle: antal = matematik. atan2 (ydist, xdist) var magball1: antal = matematik. sqrt (ball1. xspeed * ball1. xspeed + ball1. yspeed * ball1. yspeed) var magball2: antal = matematik. sqrt (ball2. xspeed * ball2. xspeed + ball2. yspeed * ball2. yspeed) var angleball1: antal = matematik. atan2 (ball1.yspeed, ball1. xspeed) var angleball2: antal = matematik. atan2 (ball2.yspeed, ball2. xspeed) var xspeedball1: antal = magball1 * matematik. - (angleball1 collisionangle) var yspeedball1: antal = magball1 * matematik. synd (angleball1 collisionangle) var xspeedball2: antal = magball2 * matematik. - (angleball2 collisionangle) var yspeedball2: antal = magball2 * matematik. synd (angleball2 collisionangle) var finalxspeedball1: antal = ((ball1. mass-ball2. mass) * xspeedball1 + (ball2. masse + ball2. mass) * xspeedball2) /(ball1. masse + ball2. mass) var finalxspeedball2: antal = ((ball1. masse + ball1. mass) * xspeedball1 + (ball2. mass-ball1. mass) * xspeedball2) /(ball1. masse + ball2. mass) var finalyspeedball1: antal = yspeedball1 var finalyspeedball2: antal = yspeedball2 ball1.xspeed = matematik. - (collisionangle) * finalxspeedball1 + matematik. - (collisionangle + matematik. pi /2) * finalyspeedball1 ball1.yspeed = matematik. synd (collisionangle) * finalxspeedball1 + matematik. synd (collisionangle + matematik. pi /2) * finalyspeedball1 ball2.xspeed = math.cos (collisionangle) * finalxspeedball2 + matematik. - (collisionangle + matematik. pi /2) * finalyspeedball2 ball2.yspeed = matematik. synd (collisionangle) * finalxspeedball2 + matematik. synd (collisionangle + matematik. pi /2) * finalyspeedball2}, til at finde flere oplysninger om elastiske sammenstød se hoomanr. kom. gå 18: endofgame() funktion, det er løber, når spillet er slut, privat funktion endofgame(): ugyldig (tmr. stop() mus. show() fase. removeeventlistener (mouseevent.mouse_move, updateplayerball) fase. removeeventlistener (event.enter_frame, gameloop), mens (eballs.length > 0) (tweenmax. - eballs [0], 0, 5, (scalex: 0, scaley: 0, lette: hop. easeout}) eballs. splejsning (0,1)} tweenmax. - spiller, 0, 5, (scalex: 0, scaley: 0, lette: hop. easeout})}, først vi stoppe uret.vi viser den mus igen.næste gang vi fjerner både mouse_move og enter_frame begivenhed lyttere.endelig gør vi alle nosser på scenen usynlig.,, skridt 19: checkbounds() funktion, denne funktion er nosser bliver inde i spillet på skærmen.hvis bolden rammer den øvre eller nedre side, vi ændrer den, yspeed,.hvis bolden rammer venstre eller højre side af skærmen, vi ændrer den, xspeed,.den bruger samme logik, at bolden kollision påvisning funktion for at kontrollere, om kanterne af bolden rammer en del af skærmen, privat funktion checkbounds (bal: bold): ugyldig (hvis (bal. x + bold. radius) > fase. stagewidth) (bal. x = stage.stagewidth - ball.radius ball.xspeed * = - 1} hvis (bal. x - ball. radius) < 0) (bal. x = 0 + ball.radius ball.xspeed * = - 1} hvis (bal. y + bold. radius) > fase. stageheight) (bal. y = stage.stageheight - ball.radius ball.yspeed * = - 1} hvis (bal. y - ball. radius) < 0) (bal. y = 0 + ball.radius ball.yspeed * = - 1}}, gå 20: fuldstændig anvendelse af klasse, vi har afsluttet vores application class.nu har vi en kamp!!!pakken (import flash.display.sprite; import flash.display.graphics; import flash.events.event; import flash.events.timerevent; import flash.events.mouseevent; import flash.geom.matrix; import flash.utils.timer; import flash.ui.mouse; import com.greensock.tweenmax; import kom. greensock. lempelse. *; offentlige klasse anvendelse udvides sprite (private var spiller: bold, private var eballs: system; private var tmr: timeren; private var resultatet: score; offentlig funktion application(): ugyldig (init();} privat funktion init(): ugyldig (spiller = nye playerball(); eballs = nye array(); tmr - = nye timer (10) score = nye score(); stage.align = "tl" scene.scalemode = "noscale" mus. hide(); setbackground(); score. x = stage.stagewidth /2 point. y = stage.stageheight /2. fase. addchild (score) fase. addeventlistener (mouseevent.mouse_move, updateplayerball) fase. addchild (boldspiller) tmr. addeventlistener (timerevent.timer, updatetime) fase. addeventlistener (mouseevent.click, startgame)} privat funktion setbackground(): ugyldig (var - type: string = »radial« var farver: array = [0xffffff, 0xcccccc] var alphaer: array = [1,1] var nøgletal: array = [0255] var matr: matrix = nye matrix(); matr. creategradientbox (stage.stagewidth, stage.stageheight, math.pi /2, 0, 0); //spreadmethod will definere, hvor hældningen er spredt.nb!!!flash bruger konstanter repræsenterer snor literals var sprmethod: string = "sted"; //start gradietn og videregive vores variabler, det var sprite: sprite = nye sprite(); //redde maskinskrivning + øge ydeevnen gennem lokale henvisning til grafiske formål var g: grafik = sprite.graphics; g.begingradientfill (type, farver, alfa nøgletal, matr, sprmethod); g.drawrect (0,0, fase. stagewidth, fase. stageheight) fase. addchild (sprite)} privat funktion updateplayerball e: mouseevent): ugyldig (boldspiller. x = mousex; boldspiller. y = mousey.} privat funktion updatetime e: timerevent): ugyldig (score.txtscore.text = streng (((tmr. currentcount * tmr. forsinkelse) /1, 000). tofixed (2);hvis (tmr. currentcount * tmr. forsinkelse)% 5000 = = 0) (addball();}} privat funktion startgame e: mouseevent): ugyldig (fase. removeeventlistener (mouseevent.click, startgame); addball(); addball(); addball(); tmr. start(); stadie. addeventlistener (event.enter_frame, gameloop)} privat funktion addball(): ugyldig (var - ball: bold = ny bold (10, matematik. random() * math.pi * 2,5). x = matematik. random() * stage.stagewidth; bold. y = matematik. random() * stage.stageheight; ball.alpha = 0, fase. addchild (bal); tweenmax. - bold, 0, 5, (alfa -: 1}); tweenmax. - bold, 0 (forsinkelse: 1, oncomplete: function(): ugyldig (eballs. tryk (bal)}})} privilegierspiste funktion gameloop e: begivenhed): ugyldig (for (var - jeg: uint = 0. jeg < eballs.length; jeg + +) (for (var - j: uint = jeg + 1 j < eballs.length; j + +) (hvis (kollision (eballs [i], eballs [j)) (docollision (eballs [i], eballs [j]);}} hvis (kollision (eballs [i], spiller)) (endofgame(); pause.} eballs [i]. update(); checkbounds (eballs [i]);}} privat funktion kollision (ball1: bold, ball2: bold): boolean {var xdist: antal = ball1. x - ball2. x, var ydist: antal = ball1. - ball2. y. var dist: antal = matematik. sqrt (xdist * xdist + ydist * ydist); hvis (dist < = ball1.radius + ball2.radius) (hvis (ball1. x < ball2. x) (ball1. x - = 2, ball2. x + = 2) andet (ball1. x + = 2, ball2. x - = 2} hvis (ball1. y < ball2. y) (ball1. y - = 2, ball2. y + = 2) andet (ball1. y + = 2, ball2. y - = 2) tilbage dist < = ball1.radius + ball2.radius;} privat funktion docollision (ball1: bold, ball2: bold): ugyldig (var - xdist: antal = ball1). - ball2. x, var ydist: antal = ball1. - ball2. y. var collisionangle: antal = matematik. atan2 (ydist, xdist) var magball1: antal = matematik. sqrt (ball1.xspeed * ball1.xspeed + ball1. yspeed * ball1. yspeed) var magball2: antal = matematik. sqrt (ball2.xspeed * ball2.xspeed + ball2.yspeed * ball2. yspeed) var angleball1: antal = matematik. atan2 (ball1. yspeed, ball1. xspeed) var angleball2: antal = matematik. atan2 (ball2. yspeed, ball2. xspeed); var xspeedball1: antal = magball1 * matematik. - (angleball1 - collisionangle) var yspeedball1: antal = magball1 * matematik. synd (angleball1 - collisionangle) var xspeedball2: antal = magball2 * matematik. - (angleball2 - collisionangle) var yspeedball2: antal = magball2 * matematik. synd (angleball2 - collisionangle); var finalxspeedball1: antal = ((ball1. mass-ball2. mass) * xspeedball1 + (ball2. masse + ball2. mass) * xspeedball2) /(ball1. masse + ball2. mass) var finalxspeedball2:.mber = ((ball1. masse + ball1. mass) * xspeedball1 + (ball2. mass-ball1. mass) * xspeedball2) /(ball1. masse + ball2. mass) var finalyspeedball1: antal = yspeedball1, var finalyspeedball2: antal = yspeedball2; ball1.xspeed = matematik. - (collisionangle) * finalxspeedball1 + matematik. for (collisionangle + math.pi /2) * finalyspeedball1; ball1.yspeed = matematik. synd (collisionangle) * finalxspeedball1 + matematik. synd (collisionangle + math.pi /2) * finalyspeedball1; ball2.xspeed = matematik. - (collisionangle) * finalxspeedball2 + matematik. - (collisionangle + math.pi /2) * finalyspeedball2; ball2.yspeed = matematik. synd (collisionangle) * finalxspeedball2 + matematik. synd (collisionangle + math.pi /2) * finalyspeedball2;} privat funktion endofgame(): void (tmr. stop(); mus. show(); stadie. removeeventlistener (mouseevent.mouse_move, updateplayerball) fase. removeeventlistener (event.enter_frame, gameloop), mens (eballs.length > 0) (tweenmax. - eballs [0], 0, 5, (scalex: 0, scaley: 0, lette: hop. easeout}); eballs. splejsning (0,1)} tweenmax. - spiller, 0, 5, (scalex: 0, scaley: 0, lette: hop. easeout})} privat funktion checkbounds (bal: bold): ugyldig (hvis (bal. x + bold. radius) > fase. stagewidth) {bold. x = stage.stagewidth - ball.radius; ball.xspeed * = - 1} hvis (bal. x - ball. radius) < 0) (bal. x = 0 + ball.radius; ball.xspeed * = - 1;} hvis (bal. y + bold. radius) > fase. stageheight) (bal. y = stage.stageheight - ball.radius; ball.yspeed * = - 1} hvis (bal. y - ball. radius) < 0) (bal. y = 0 + ball.radius; ball.yspeed * = - 1}}}}, konklusion, det er det for resten.selvfølgelig kan du tilføje muligheden for at genoptage kampen, men det burde ikke være så svært.denne grundlæggende eksempel elastiske sammenstød kan anvendes til større spil som en billard spil eller lignende. jeg håber, du kan lide denne forelæsning, tak for det!,

Flash collision game tutorial
Flash collision game tutorial
Flash collision game tutorial



Previous:
Next Page: