bygge en klassisk slange spil i as3

, opbygge et klassisk slange spil i as3,,,,, andel,,,,,,,, 11,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss.,, i denne lektion, som jeg gerne vil vise dig, hvor let det er at skabe en klassisk "slange" spil, flash.jeg vil forsøge at forklare alting let, skridt for skridt, så de kan udvikle kampen videre til deres behov.kampen vil blive udviklet i as3, og jeg vil bruge den flashdevelop ide.,,,, indledning, spillet er ikke kompliceret.når vi rammer en mur, det vil genoptage kampen.efter at spise et æble slangen vil vokse, og en "ny" æble ud.(faktisk, vil det være det samme æble, men jeg forklarer det senere.), som er et af de vigtigste aspekter af spillet er koden er reaktion på key_down begivenheder.den slange, vil kun så ændre retning efter en blodmide er gået, ikke umiddelbart efter en keypress.det betyder, at hvis den slange, er rigtigt, og du trykker ned og efterlod meget hurtigt, slangen vil gå, og ikke ned og tilbage.uden denne "træk" slangen vil give os mulighed for at gå tilbage, mens vi er på vej, som ville betyde, at det slog sig selv. lad os se på kampen.lad os tage et kig på det endelige resultat, vi arbejder hen imod:,, trin 1: udvikling af projektet, flashdevelop, skaber et nyt projekt, og i 'src "mappe, skabe et" kom "mappe.i "kom" mappe, skabe en ny klasse, og kalder det "element. som". sæt dimensioner af det projekt, 600x600px.,, trin 2: vent...hvad er et element.den slange er udgør af blå mærker, som jeg kalder elementer.vi vil skabe et element af klasse, som henleder element.de red apple bliver et element, så vil vi udvide kodeksen med et par linjer. derfor vil vi ikke skabe en ny klasse for æble.- men hvis du vil, kan du.), trin 3: et element af klasse, element klasse skaber en square.det kan ikke gøre det på det tidspunkt, det skaber det.registrering af element, nemlig den holdning, der er omhandlet af x - og y-coordinates - er i den øverste venstre.efter åbning af element.as, vil du se noget som dette:,,, - pakken kom {* * *).* @ forfatter fuszenecker zsombor * /offentlige klasse element (offentlig funktion element() {}}}, vi har brug for denne til at forlænge den form, klasse, så vi kan bruge den, grafik, formål at gøre pladsen.efter dette, skaber to variabler: en for den retning (hvis det er en del af den slange) og én for score - værdi (hvis det er et æble, og så ændre parametrene i dennes funktion:,,, - pakken kom (import flash.display.shape; offentlige klasse element omfatter form (beskyttede var _direction: snor; //, hvis det er et æble - > beskyttede var _catchvalue: antal; //farve, alpha, bredde, højde offentlige funktion element (_c: uint, _a: antal, _w: antal, _h: antal) {}}}, fyld den funktion, med en kode:,,, pakken kom (import flash.display.shape; offentlige klasse element omfatter form (beskyttede var _direction: string; //, hvis det er et æble - > beskyttede var _catchvalue: antal;//farve, alpha, bredde, højde offentlige funktion element (_c: uint, _a: antal, _w: antal, _h: antal) {grafik. linestyle (0, _c, _a); grafik. beginfill (_c, _a); grafik. drawrect (0, 0, _w, _h); -. endfill(); _catchvalue = 0}}}, nu, når vi skaber et element, det vil trække et rektangel og score værdien for elementet med 0 ved misligholdelse.- det vil ikke sætte den rektangel på scenen, så gør det i sig selv.bemærker, at vi ikke har ringet, addchild(), funktion.), lad os afslutte denne klasse, og så kan vi endelig test, hvor meget vi har gjort:,,, - pakken kom (import flash.display.shape; offentlige klasse element omfatter form (beskyttede var _direction: string; //, hvis det er et æble - > beskyttede var _catchvalue: antal; //farve, alpha, bredde, højde offentlige funktion element (_c: uint, _a: antal, _w: antal, _h: antal) {grafik. linestyle (0, _c, _a); grafik. beginfill (_c, _a); grafik. drawrect (0, 0 _w, _h); grafik. endfill(); _catchvalue = 0} //anvendes kun i tilfælde af, at en del af den slange, offentlig funktion, der retning (værdi: string): ugyldig (_direction = værdi;} public) kom direction(): string (tilbage _direction;} //anvendes kun i tilfælde af et æble offentlig funktion, der er fastsat catchvalue (værdi: antal) ugyldig (_catchvalue = værdi;} offentligheden få catchvalue(): antal (tilbage _catchvalue;}}}, skabte vi fire funktioner til at ændre kurs og værdien af de æble.vi har opnået dette ved hjælp af montører og getters.mere om montører /getters i denne artikel.,, trin 4: afprøvning af element klasse, åben main.as., import, com.element, klasse og skabe et element i det, init(), funktion:,,, - pakken (import flash.display.sprite; import flash.events.event; import kom. element; offentlige klasse vigtigste udvider sprite {offentlige funktion main() (hvis (tidspunkt) addeventlistener (event.added_to_stage, lokalitet); andre init();} privat funktion lokalitet (e: begivenhed = null): ugyldig (var - testelement: element = nye element (0x00aaff, 1, 10, 10); testelement. x = 50; testelement. y = 50; dette. addchild (testelement)}}}, - skabe, testelement, variable, som holder vores element.vi skaber et nyt element, og overdrage det til vores, testelement, variabel.bemærk de argumenter, vi passerede: for det første, vi giver det en farve, så alpha, bredde og højde.hvis man ser på element klasse er element funktion, kan du se, hvordan det anvender disse data til at henlede den rektangel. efter at skabe element, vi holdning og sætte det på scenen!,, løntrin 5: oprettelse af variablerne, se følgende kode.jeg skrev de funktioner, som udføres af variablerne næste dem (meddelelse, som vi indførte de nødvendige klasser for):,,, - pakken (import flash.display.sprite; import flash.text.textfield; import flash.utils.timer; import flash.events.timerevent; import flash.ui.keyboard; import flash.events.keyboardevent; import flash.events.mouseevent; import flash.events.event; import kom. element; offentlige klasse vigtigste udvider sprite (//- ikke give disse vars værdi er her!//////////////give dem deres værdier i init() funktion.private var snake_vector: vector. < element > //slangens dele er afholdt her i private var markers_vector: vector. < objekt > //markører findes her privat var timer: timeren; private var død: boolean; private var min_elements: int. //er, hvor mange dele den slange skulle have i begyndelsen private var apple: element; //vores æble private var space_value: antal; //rum mellem slangens dele private var last_button_down: uint; //nøgleordet for det sidste på knappen private var flag: boolean; //er det tilladt at skift retning?private var resultatet: antal; private var score_tf: textfield; //den textfield viser stillingen offentlig funktion main() (hvis (tidspunkt) addeventlistener (event.added_to_stage, lokalitet); andre init();} privat funktion lokalitet (e: begivenhed = null): ugyldig (snake_vector = nye vektor. < element > markers_vector = nye vektor. < objekt > space_value = 2; //vil der være 2px mellemrum mellem hvert element timer = nye timer (50); //hver 50 millisekund, moveit() funktion bliver fyret!dette vil sætte fart i slangen død = falske min_elements = 10; //, vi begynder med 10 elementer.æble = nye element (0xff0000, 1, 10, 10); //røde, ikke er gennemsigtige, bredde: 10, højde: 10, apple.catchvalue = 0; //ret indlysende - score af æble last_button_down = keyboard.right; //den første retning af slangen er fastsat i denne variabel score = 0. score_tf = nye textfield(); //det er textfield, der viser vores bytte.denne. addchild (score_tf)}}}, den vigtigste variabel er, snake_vector,.vi vil sætte alle elementer af slangen i denne afdeling.,, så er der, markers_vector,.vi vil anvende markører for ledelse af slangen er dele.hver genstand i denne vektor vil have en holdning og en type.den type vil fortælle os, hvorvidt den slange skal gå til højre og venstre, op eller ned, efter at slå "genstand.- de vil ikke støder sammen, kun de markører og slangen er dele, vil blive undersøgt.), som et eksempel, hvis vi presser ned, en genstand, der vil blive skabt.x - og y - af dette mål vil være slangens hoved er x - og y - koordinater, og den type vil være "ned".når den holdning, en af slangen er elementer, er den samme som dette objekt er slangerne elementer retning vil være klar til at "ned".,, læs de bemærkninger, ved siden af de variabler, for at forstå, hvad de andre variabler.trin 6:,, at skrive attachelement() funktion, attachelement(), funktion vil tage fire parametre: den nye slange element, x - og y - koordinater, og den retning, den sidste del af den slange,.,,, privat funktion attachelement (som: element, lastxpos: antal = 0, lastypos: antal = 0, diroflast: string = "r"): tomrum {}, inden vi sætter element på det tidspunkt bør vi holdning.But for this we need the direction of the snake's last element, to know whether the new element has to be above, under, or next to this.,After checking the direction and setting the position, we can add it to the stage., ,, private function attachElement(who:Element,lastXPos:Number = 0,lastYPos:Number = 0,dirOfLast:String = "R"):void { \tif (dirOfLast == "R") \t{ \t\twho.x = lastXPos - snake_vector[0].width - space_value; \t\twho.y = lastYPos; \t} \telse if(dirOfLast == "L") \t{ \t\twho.x = lastXPos + snake_vector[0].width + space_value; \t\twho.y = lastYPos; \t} \telse if(dirOfLast == "U") \t{ \t\twho.x = lastXPos; \t\twho.y = lastYPos + snake_vector[0].height + space_value; \t} \telse if(dirOfLast == "D") \t{ \t\twho.x = lastXPos; \t\twho.y = lastypos - snake_vector [0]. højde - space_value.}. addchild (who)}, nu kan vi bruge denne funktion i den, init(), funktion:,,, (var - jeg: int = 0. jeg < min_elements; + + i) (snake_vector [i] = nye element (0x00aaff, 1,10,10); snake_vector [i]. retning = "r"; //start - retning af slangen, hvis (i = = 0) //første slange element (//du har for det første element på nettet.(nu: 0,0) //[mulig x positioner: (snake_vector [0]. bredde + space_value) * < uint >] attachelement (snake_vector [i] 0,0, snake_vector [i]. retning) snake_vector [0]. alpha = 0,7;} andre (attachelement (snake_vector [jeg], snake_vector [- 1]. x, snake_vector [- 1]. y, snake_vector [- 1]. retning);}}, skaber vi de første 10 elementer, og i retning af at »r« (til højre).hvis det er det første element, vi kalder, attachelement(), og vi ændre sin alpha lidt ("hoved" er lidt lysere farve). hvis du ønsker at sætte den holdning, et andet sted, så vær venlig at holde følgende i betragtning: den slange skal være anbragt på et net, ellers ville det se dårligt og vil ikke fungere.hvis du ønsker at ændre den x - og y - position, du kan gøre det på følgende måde:, i for loop, vi undersøger, om apples nye x - og y - positioner er identisk med, snake_vectors elementer.hvis det, vi kalder den, placeapple(), funktion igen (rekursive funktion), og som parameter for det, falske.(hvilket betyder, at æblet ikke var fanget, skal vi bare finde det), (apple. fase), tilbage, hvis æblet er på scenen.vi bruger den!operatør til at vende denne værdi, hvis det ikke er på scenen, vi lægger den der. den sidste ting, vi skal gøre, er at ringe til, placeapple(), funktion ved slutningen af det, init(),.,,, privat funktion lokalitet (e: begivenhed = null): ugyldig (/)...* /placeapple (forkert)}, meddelelse om, at vi vedtager, falske, som parameter.det er logisk, for vi fik ikke fat i æblet i, init(), funktion endnu.vi kan kun fange den i, moveit(), funktion, og nu er der kun tre funktioner til at skrive:, directionchanged(),, moveit(), og, gameover(), funktioner, trin 8: ved de, moveit(), funktion, moveit(), funktion er ansvarlig for alt i bevægelse.denne funktion vil kontrollere grænserne og kontrollere, om der er et objekt i x - og y - holdning til slangens hoved.It will also look for the apple at this position.,For all of this, we will use our timer variable.,Add two more lines in the end of the ,init(), function:, ,, timer.addEventListener(TimerEvent.TIMER,moveIt); timer.start();,Look at the comments in the sourcecode, to see which block of code does what., ,, \t\tprivate function moveIt(e:TimerEvent):void \t\t{ \t\t\tif (snake_vector[0].x == apple.x && snake_vector[0].y == apple.y) \t\t\t{ \t\t\t\t//This code runs if the snakes heads position and the apples position are the same \t\t\t} \t\t\t \t\t\tif (snake_vector[0].x > stage.stageWidth-snake_vector[0].width



Previous:
Next Page: