, smid genstande ved at skabe en panandthrow klasse,,,,, andel,,,,,,,,,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss.,, i denne forelæsning vil vi håner og afslutter en pan og smide klasse, der vil give os mulighed for at tilføje denne virkning, at ethvert element, vi ønsker.for at opnå dette, vil vi skabe et billede af seerne, - men ikke din gennemsnitlige skærm.her har vi zoomer, kaste, -...- det lyder som en ninja - app, hva '?,,,, trin 1: indledning, pan og smide klasse vil tillade dig at tilføje den pan og smide funktioner til actionscript objekt, du vil have.selv om denne lektion er specifikt for flex, klasse i sig selv kan anvendes overalt actionscript er.jeg har set denne virkning på flere hjemmesider, i photoshop cs4 og besluttede, at jeg ville have dette på min projekter. der er mange ansøgninger om den virkning, som vi vil bruge til denne lektion er et billede med det lader du zoome ind og ud af er image og ændre de gnidninger, at de smider virkning anvendelser.men denne forelæsning, det handler ikke om det billede, man, det drejer sig om en pan og smide klasse.så lad os komme i gang med det.åbn jeres favorit flex redaktør og få et projekt, med oplysninger om det i flex bygmester se adobe livedocs.når projektet er skabt, åben den mxml fil.vi er nødt til at tilføje en kode til det før, vi skaber vores klasse.,, trin 2: vores mxml, fordi det ikke er den vigtigste del af læren jeg ikke kommer til at bruge meget tid her.hvis du har spørgsmål om dette punkt, der ikke er omfattet, kan du spørge i bemærkningerne nedenfor.for det første er mxml objekter til at sætte i anvendelse:, <?xml - version = "0" kodning = "utf - 8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" frameRate="24" layout="absolute" creationComplete="init()" backgroundColor="#888888" > <mx:Canvas id="outside" height="100%" width="100%" verticalScrollPolicy="off" horizontalScrollPolicy="off" > <mx:Image id="inside" source="@Embed('img/selfportrait.jpg')" creationComplete="smoothImage(event);" /> </mx:Canvas> <mx:VBox id="control" backgroundColor="#000000" backgroundAlpha=".6" height="120" width="200" cornerRadius="5" borderStyle="solid" borderThickness="0" top="-5" left="-5" paddingTop="10" paddingLeft="10" > <mx:HSlider id="hSlider" minimum="10" maximum="200" value="100" allowTrackClick="true" liveDefter = "ægte" ændre = "zoom()" /> < mx: fareseddel farve = "# aaaaaa" tekst = "zoom" /> < mx: hslider id = "slddecay" minimum =. "1" maksimale = "1" værdi = ". 7" allowtrackclick = "ægte" livedragging = "ægte" ændre = "changedecay()" /> < mx: fareseddel farve = "# aaaaaa" tekst = "forfald" /> < /mx: vbox > < /mx: anvendelse >, ser du, den fire funktioner i de mærker: init(), changedecay(), smoothimage() og zoom().vi er nødt til at skrive disse funktioner.det er kode mellem < mx: manuskript > plader:, import mx.states.setstyle; import mx.effects.move; import mx.containers.hbox; import mx.containers.box; private var imagewidth: antal = 0, private var imageheight: antal = 0, private var klaverflyttemand: = nye move(); //dette bliver kaldt, da ansøgningen mange private funktion init(): ugyldig (//denne begivenhed vil give mulighed for at skjule sig og vise vores kontrol med et klik.kontrol. addeventlistener (mouseevent.click, controlclick); mover.target = kontrol} //denne funktion vil zoome ind og ud af vores billede i forhold til værdien af vores zoom slider.privat funktion zoom(): ugyldig (inside.width = (imagewidth * hslider. værdi) /100 inside.height = (imageheight * hslider. værdi) /100) //- det bliver kaldt, da vores image ændringer størrelse.privat funktion smoothimage (ev: begivenhed): ugyldig (//sæt billede udjævning så billedet ser bedre ud, når forvandlet.var bmp: bitmap = ev.target.content som bitmap; bmp.smoothing = sandt. imagewidth = inside.width; imageheight = inside.height;} //, vi vil ikke bruge det her endnu en privat funktion changedecay(): ugyldig (//det vil ændre forfald (friktion) værdien af vores klasse, når vi er der.} privat funktion controlclick e: mouseevent): ugyldig (flytter. play(); //denne funktion huder /viser den kontrol med klik, hvis (kontrol. y.= - 5) (flytter. stop(); mover.yto = - 5; flytter. play();} andre, hvis (e.target = = kontrol) (flytter. stop(); mover.yto = (control.height - 10) * - 1; flytter. play();}}, når du har din mxml, du er nødt til at skabe en folder kaldet "klasser" i den samme mappe, som din mxml fil.(hvis der anvendes flash, folder skal være i samme direktiv som din fia - fil). dette er vores klasser pakke, og det er, hvor panandthrow.as fil vil gå.i flex bygmester, skabe en ny klasse, sætte det i klasser - pakken, og kalder det panandthrow. dette vil skabe din klasse - default stil.,, trin 3: den del af en klasse, her er vores grundlæggende panandthrow klasse.gem det, som panandthrow.as i din nye "klasser" mappe. //namespace erklæring pakke klasse //klasse erklæring offentlige klasse panandthrow {* det er producenten, denne metode /funktion vil blive kaldt, da du skabe * et tilfælde af deres formål, eller instantiate dit formål.* for denne klasse, vi kan ikke gøre noget, fordi vi vil gøre alt i den lokalitet funktion * /offentlige funktion panandthrow() {}}, hvilke variabler og funktioner, har vi brug for i vores panandthrow klasse?for at få det, må du spørge dig selv: "hvad er min klasse er nødt til at gøre, hvad de har brug for at vide det, og hvad er det nødt til at være i stand til at gøre det?"så lad os skabe en pseudo - kode, hurtig besked, når jeg først har udviklet denne klasse, jeg satte alt på konstruktøren, men at føre til et problem, da jeg skabte start og stop metoder på grund af anvendelsesområde.jeg kunne ikke instantiate denne klasse på global rækkevidde med alle de krævede oplysninger.derfor har jeg gjort en init() funktion, så den instans kunne være begyndt, og stoppede udenfor klassen.,, trin 4: vores pseudo - kode, "pseudo - kode" betyder bare falsk kode, som vi kan bruge til at hjælpe os tænke på, hvad der reelt kode, vi skal bruge, pakke klasse offentlige klasse panandthrow {* disse vil de variabler, som vi gør.hvad er det, vi har brug for at vide det?* anobjecttothrow; * anobjecttothrowitin; * objectlocation; * previousobjectlocation; * forfald; //for fysik * der er indlysende, men denne liste vil få meget større *, som vi kan se, hvad vi har brug for i vores funktioner * /offentlige funktion panandthrow() {} /*, så hvad er vores klasse?* init(); //skal begynde stop(); //, vi vil være i stand til at stoppe det.* start(); //, hvis vi stopper, er vi nødt til at være i stand til at starte det igen.* pan(); * throw(); * /}, nu hvor vi har en pseudo - kode, kan vi begynde at bygge den klasse.lad os starte med init() funktion.dette vil også give os ind i et af principperne for objekt orienterede programmering, indkapsling,, der drejer sig om adgang til dele af koden. denne kodeks skulle gå i panandthrow time, vi er lige begyndt.- ikke sikker på, hvor?tjek det dokument, klasse hurtigt tip.) //- ups, en lavere klasse og en høj klasse (som omfatter //den lavere klasse) kan anvendes.her er næsten ethvert objekt, skal du anvende udvider //sprite klasse.så jeg skal bare bede om en sprite objekt og du kan give en kasse eller en knap.private var targetobject: sprite = nye sprite(); private var eventobject: sprite = nye sprite(); private var originaldecay: antal =. 9; private var buttondown: boolean = falske private var movey: boolean = sandt; private var movex: boolean = sandt; private var targetclick: boolean = sandt; //bruger vi dette for at se, hvor længe din mus har været på en genstand uden videre.private var t: timeren; private var timerinterval: int = 100; offentlige funktion lokalitet (objecttomove: sprite, objecttoeventise: sprite, decayamout: antal = 9, ismovey: boolean = sandt, ismovex: boolean = sandt, onlymoveontargetclick: boolean = sand): ugyldig (targetobject = objecttomove; eventobject = objecttoeventise; originaldecay = decayamount; movex = ismovex; movey = ismovey; targetclick = onlymoveontargetclick; t = nye timer (timerinterval); start();}, bare et par ting, jeg gerne vil påpege.i den funktion, lokalitet, jeg har sat et par argumenter for at svare til en værdi.det betyder, jeg giver dem en standardværdi, hvilket gør dem frivilligt.ved fastsættelsen af standardværdier for argumenter for en funktion, er de nødt til at være den sidste parametre, - kan du ikke have en, der kræves efter en fakultativ variabel.grunden til, at jeg tilføjede misligholdelse variabler er ringe kortere, hvis vi bruger standardindstilling.jeg kan ringe til panandthrow (studerende, eventer) og gøres, i stedet for panandthrow (studerende, enventer, decayer, yval,...)og så videre. har du nogensinde tænkt på, hvad "privat" eller "offentlig" foran funktioner og variabler.det er den eksponering af objektet.en "offentlig" genstand kan konsulteres af enhver anden klasse; en "privat" genstand kan kun ses af de andre medlemmer af denne klasse, et "beskyttet" objekt er skjult for alt, undtagen klasse, som er i samme pakke.vil vi være i stand til at ændre de rådne fra vores mxml, så vi har brug for en offentlig krog til at komme til vores private variabel. det er her, albuer og setter funktioner i: private var originaldecay: antal =. 9; offentligheden få decay(): antal (tilbage originaldecay;}, det er en "ambitiøs" funktion.det betyder, at uden for klasser, det ser ud til, at panandthrow klasse har en offentlig variable "forfald".når de forsøger at få adgang til det, vil vi vende tilbage til værdien af vores (private) originaldecay variabel, setter funktioner er næsten det samme, men gør det uden for klasse at ændre værdien af vores "falske" offentlige variabel: offentlig funktion, der forfalder (værdi: antal) ugyldig (originaldecay = værdi), og disse er nyttige, fordi de kan sætte logik til en setter at begrænse, hvad der kommer ind i din private var for eksempel, hvis du sætter et nummer i mxml mærke for en æske, du vil få et sæt højde, hvis du sætter en% (hvorved antallet snor), vil du få en procentdel højde.det er indbygget i koden for kassen er højde - setter.nu, hvor vi har vores albuer og sætter man kan få adgang til forfald variable som dette uden for klasse:, var pt: panandthrow = nye panandthrow(); pt. lokalitet (mål, forældre); pt.decay =. 7;,, løntrin 5: start - stop, vi har vores klasse, nogle lokale variabler, og en init() funktion.lad os gøre noget nu.ved udgangen af init() funktion, vi kaldte "start();" lad os gøre det begynder at fungere.det er bare en flok lyttere: offentlig funktion start(): ugyldig (//med mus ned, vi forsøger at starte vores fælles indsats, men vi er nødt til at være i stand til at kontrollere vores onlymoveontargetclick //, som vi, der er tildelt vores globale område targetclick targetobject. addeventlistener (mouseevent.mouse_down, handleovertarget); eventobject. addeventlistener (mouseevent.mouse_down, handleovertarget); //når vi opfordrer vores pan, det bruger en mus kom til at lytte, hvilket betyder, at det bliver kaldt, hver gang den //mus bevæger sig, så vi er nødt til at se, hvordan vi kan begrænse, når målet objekt bevæger sig.eventobject. addeventlistener (mouseevent.mouse_move, moveit); //det er at smide genstand efter en pan, det er lidt svært, fordi de throwit() funktion kræver en anden til at lytte.targetobject. addeventlistener (mouseevent.mouse_up, throwit); eventobject. addeventlistener (mouseevent.mouse_up, throwit); //den throwitout metode gør vores objekt, handle, som om vi slipper den mus ", - - men det bliver fyret, da //mus giver forældre objekt targetobject. addeventlistener (mouseevent.mouse_out, throwitout); eventobject. addeventlistener (mouseevent.mouse_out, throwitout); //- dette er tiden til at lytte, det vil se, om du har holdt de mus ned lidt, jeg vil //forklare behovet for dette, når vi kommer til timerout() funktion t.addeventlistener (timerevent.timer, timerout). start();}, stop() funktion er næsten samme, men vi erat flytte lyttere. offentlige funktion stop(): ugyldig (targetobject. removeeventlistener (mouseevent.mouse_down, handleovertarget); eventobject. removeeventlistener (mouseevent.mouse_down, handleovertarget); eventobject. removeeventlistener (mouseevent.mouse_move, moveit); targetobject. removeeventlistener (mouseevent.mouse_up, throwit); eventobject. removeeventlistener (mouseevent.mouse_up, throwit); targetobject. removeeventlistener (mouseevent.mouse_out, throwitout); eventobject. removeeventlistener (mouseevent.mouse_out, throwitout); t.removeeventlistener (timerevent.timer, timerout). stop();}, nu kan vi høre, hvad der sker, så lad os gå gennem hver af disse lytter funktioner.,, trin 6: mouseevent.mouse_down, we er nødt til at se på handleovertarget begivenhed kontaktperson. privat funktion handleovertarget e: mouseevent): ugyldig (buttondown = sandt. armouseprevx = mouseprevx = mousecurrx = eventobject.mousex; armouseprevy = mouseprevy = mousecurry = eventobject.mousey; hvis (e.currenttarget = = targetobject
smid genstande ved at skabe en panandthrow klasse
Previous:bygge en intelligent tic