bygge et oop mærke sky i actionscript 3,0

, opbygge et oop mærke sky i actionscript 3,0,,,,, andel,,,,,,,,,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss.,, i denne lektion, jeg vil vise dig, hvordan at skabe en fleksibel, animatable tagcloud ved hjælp af en genstand orienteret planlægning.jeg tror ikke på en forkert metode, men flere forskellige grader af effektivitet.hvis du har nogen konstruktive kritik på min kode føle sig fri til at fremsætte bemærkninger. når dette er sagt, lad os starte!,,,,,,, trin 1: hvordan tror, sky, det er det vigtigste, og den vil diktere følgende skridt.jeg starter med at se på, hvad vi ønsker at nå, og så bræk det i stykker, her er min tankegang:,, trin 2: bygning af moderen klasse, åben tagcloud.as og skrive koden, pakke (offentlige klasse tagcloud udvider sprite {offentlige funktion tagcloud ($word_array: system, $skrifttype = "arial" - minfontsize: antal = 10 $maxfontsize: antal = 30 $elementcolor: antal = 0xffffff, $fullsize: antal = 200): ugyldig (//her jeg tildeler de variabler, jeg får til klasse er variabler wordarray = $word_array; skrifttype = $skrifttype minfontsize = $minfontsize maxfontsize = $maxfontsize elementcolor = $elementcolor fullsize = $fullsize //efter fastsættelsen af variabler, jeg bygger den sky buildtagcloud();}}, import af disseibraries:, import flash.text.font; import tagcloudelement; //får jeg ham senere import flash.display.sprite; import flash. begivenheder. arrangement, definere disse variabler: offentlige var cloudelements: system; private var wordarray: system; private var ord: string; private var ikke relevant: antal; private var størrelse: europa.eu.int; private var element: tagcloudelement; private var minfontsize: antal; private var maxfontsize: antal; private var elementcolor: antal; private var skrifttype: string; private var wordlength: int private var fullsize: antal, ender du med sådan noget, pakke (//første indførsel af disse pakker: import flash.text.font; import tagcloudelement; //jeg får ham senere.havn flash.display.sprite; import flash.events.event; //skabe en klasse, der vil udvide en sprite offentlige klasse tagcloud udvider sprite (//, vi har brug for disse variabler, der skal abble at skabe tagcloud offentlige var cloudelements: system; private var wordarray: system; private var ord: string; private var ikke relevant: antal; private var størrelse: europa.eu.int; private var element: tagcloudelement; private var minfontsize: antal; private var maxfontsize: antal; private var elementcolor: antal; private var skrifttype: string; private var wordlength: int private var fullsize: antal offentlige funktion tagcloud ($word_array: system, $skrifttype = "arial" $minfontsize: antal = 10 $maxfontsize: antal = 30 $elementcolor: antal = 0xffffff $udlsize: antal = 200): ugyldig (//her jeg tildeler de variabler, jeg får til klasse er variabler wordarray = $word_array; skrifttype = $skrifttype minfontsize = $minfontsize maxfontsize = $maxfontsize elementcolor = $elementcolor fullsize = $fullsize //efter fastsættelsen af variabler, jeg bygger den sky buildtagcloud().}), trin 3: opbygge deres vigtigste funktion, her er den vigtigste opgave, som vil bygge vores sky, privat funktion buildtagcloud() (//skabe et element array cloudelements = nye array(); //får ordene længde, så jeg kan iterate fandt dem og skabe de elementer, wordlength = getsinglewordlist (wordarray). længde for (var - jeg = 0; jeg < wordlength; jeg + +) (//denne funktion tilbageer jeg et system, dets grundlæggende et filter, læse mere om det senere ord = getsinglewordlist (wordarray) [i] //denne funktion bruger wikipedia formel til at beregne element størrelse størrelse = setelementsize (ord, wordarray, minfontsize, maxfontsize); //skaber et nyt element element = nye tagcloudelement (ord, størrelse, skrifttype, elementcolor); //butikker, det nye element i rækken cloudelements [i] = element //fastsætter gennemsigtighed baseret på størrelsen cloudelements [i]. alpha = størrelse /maxfontsize //bare en tilfældig måde at vise den sky elementer cloudelements [i]. x = matematik. random() * fullsize cloudelements [i]. y = matematik. random() * fullsize addchild (cloudelements [i]); //udfører et hit test fandtthe created objects \t\t\t\tcloudHitTest(i) \t\t\t} \t\t},Step 4: Adding a Word Counter,Let's see how many words we're dealing with.,private function countWord($word:String,$array:Array):int { \t\tvar count:int=0; \t\t\tfor (var i:int=0; i<$array.length; i++) { \t\t\t\tif ($array[i].toLowerCase()==$word.toLowerCase()) { \t\t\t\t\tcount+=1; \t\t\t\t} \t\t\t} \t\t\treturn (count); \t\t},Step 5: Set the Element Size,I set the element size by using a formula found on wikipedia:,function setElementSize($word:String, $array:Array, $minSize:Number, $maxSize:Number):Number { \t\t\tvar $size:Number = $maxSize * countWord($word, $array) /$array.length \t\t\t$size *= $minSize \t\t\treturn $size \t\t},Step 6: Creating a Single Word List,This calls a filter for the array.,private) getsinglewordlist ($kilde: system): system {var $system: array = $kilde. filter (singlewordfilter); tilbage $array}, sæt filteret regler. privat funktion singlewordfilter (element: *, indeks: int, arr: system): boolean (hvis (arr - indeks + 1]) (hvis (arr - indeks). tolowercase()!= arr - indeks + 1]. tolowercase()) {tilbage.} andre {tilbage falske}} andre {tilbage falske}}, trin 7: hvordan hittest, er vi nødt til at prøve for overlappende positioner, privat funktion cloudhittest ($) (for (var - en: int = 0; en < $jeg; a + +) (//hvis rammer, hvis (cloudelements [a]. hittestobject (cloudelements [$i])) (//repositionere cloudelements [$jeg]. x = matematik. random() * fullsize cloudelements [$jeg]. y = matematik. random() * fullsize addchild (cloudelements [$i]); //og prøve igen cloudhittest ($)}}}, trin 8: oprettelse af et element albuer, det er bare en frem for et element af navn, i tilfælde af, at jeg har brug for en over de vigtigste offentlige funktion getelem tidslinje.entbyname ($navn: string): tagcloudelement {var $auxcloudelement: tagcloudelement; (var - jeg: int = 0. jeg < wordlength; jeg + +) (hvis (cloudelements [i]. ord = = $navn) ($auxcloudelement = cloudelements [i]}} tilbage $auxcloudelement} trin 9: i element klasse, pakke (import flash.display.sprite; import flash.events.event; import flash.events.mouseevent; import flash.text.font; import flash.text.textfield; import flash.text.textformat; import flash.text.textfieldautosize; import flash.text.antialiastype; import flash.text.gridfittype; import flash.net.urlrequest; import flash.net.navigatetourl; offentlige klasse tagcloudelement udvider sprite {offentlige var ord: string; offentlige var urlpath: string; private var textcloudformat: textformat; private var textcloud: textfield; offentlige var skrifttype: string; offentlige var størrelse: antal; offentlige var farve: antal; //samme konstruktøren som tagcloud, element omfatter en sprite //og bygger det element, baseret på en textfield offentlig funktion tagcloudelement ($ord: string, $størrelse: antal = 10 $skrifttype: string = "arial" $elementcolor: antal = 0xffffff): ugyldig (ord = $ord skrifttype = $skriftstørrelse = $størrelse, farve = $elementcolor buildelement();} privat funktion buildelement() (//skaber textformat textcloudformat = nye textformat(); //definerer den skriftstørrelse og farve textcloudformat.font = fonttextcloudformat.size = størrelse textcloudformat.color = farve //skaber en textfield textcloud = nye textfield(); //inddrager skrifttype textcloud. embedfonts = sandt; //fastsætter antialias til læsbare tilsvarende textcloud. antialiastype = antialiastype.advanced; //definerer den tekst, textcloud. tekst = ord //definerer dets størrelse som automatisk textcloud. autosize = textfieldautosize.left; //egnet til pixel - textcloud.gridfittype = gridfittype.pixel //unselectable tekst textcloud.selectable = falske; //1987 textformat til textfield textcloud. settextformat (textcloudformat) //tilføjer mouseevents lyttere textcloud. addeventlistener (mouseevent. roll_over, rollovercloudelement) textcloud. addeventlistener (mouseevent. roll_out, rolloutcloudelement) textcloud. addeventlistener (mouseevent. klik, clickcloudelement) addchild (textcloud)} privat funktion rollovercloudelement e: mouseevent) (e.target.textcolor = 0x666666;} privat funktion rolloutcloudelement e: mouseevent) (e.target.textcolor = farve) //- jeg har lavet et link til en twitter søgning ved hjælp af ordet udvalgte.privat funktion clickcloudelement e: mouseevent) (navigatetourl (nye urlrequest ("http://search.twitter.com/search?q = "+ e.target. tekst)," _blank ");}}}, trin 10: gennemførelse, det eneste, der er tilbage at gøre, er at gennemføre denne klasse i et rigtigt. blp dossier med alle de ting, du er accustumed til (dvs.: tidsplan): p, du bliver nødt til at skabe en skrifttype, så du kan vise textfields, jeg embeded en skrifttypen arial.,, så i første billede af dit. blp importere tagcloud klasse, der er en stage.align til øverste venstre, så vi kan finde den fase middelvej uden meget arbejde) og skabe en ny instans af skrifttype, vi har tilføjet på biblioteket:, import tagcloud; stage.align = stagealign.top_left var wordarray: system, var tagcloud: tagcloud; var arial: arial = nye arial(); //fastsætter en ny instans ariel (allerede i biblioteket) funktion init() (//skabes an array to populate the cloud \twordArray = new Array("In","this","fashion,","text","clouds","may","become","a","generally","applied","tool","for","managing","growing","information","overload","by","using","automated","synthesis","and","summarization","In","the","information","saturated","future","or","the","information","saturated","present"); \t//sorts the array alphabetically so i can filter later on \twordArray.sort(); \t//creates a new tagCloud instance \ttagCloud = new TagCloud(wordArray,arial.fontName,15,20,0x000000); \t//center's it to stage \ttagCloud.x = stage.stageWidth*0.5-tagCloud.width*0.5 \ttagCloud.y = stage.stageHeight*0.5-tagCloud.height*0.5 \t//adds to stage \taddChild(tagCloud); } init();,Step 11: Build an RSS foder anmodning, nu er vi nødt til at tage en foder fra et sted, så vi kan svække det.jeg valgte den cnn nyheder.for at kunne sætte en xml - skal du have fire genstande, herunder en urlrequest, der vil blive anvendt som en vej til foder, var requestfeed: urlrequest = nye urlrequest (http: //rss. cnn. kom /rss /cnn_world. rss); //en urlloader, så vi kan laste anmodning vi er nødt til at gøre var loaderfeed: urlloader = nye urlloader() //en xml - objekt, så vi kan opbevare de oplysninger, vi får fra foder, var xmlfeed: xml; //og sidst, men ikke mindst en titel system, som jeg kan eksplodere, ordene fra...var titlewords: array, trin 12: initialization metode, er nu i vores vigtigste funktion er jeg nødt til at tilføje den komplette omstændigheder fører til anmodning, således at den kan blive bedt om en vellykket belastning., funktion init() {loaderfeed. addeventlistener (ref. fuldstændig, onfeedcomplete) //- jeg skal wordarray være instantierede så jeg kan opbevare ord i foder wordarray = nye array() //vi er parate til at laste xml - nu loaderfeed. belastning (requestfeed)}, trin 13: den datastruktur, datastrukturen opbevares i e.target.data, så vi skaber xml - her ved at gøre:, funktion onfeedcomplete (e - tilfælde) (xmlfeed = nye xml (e.target. data) //efter den kilde af rss foder, lagde jeg mærke til strukturen var noget som jeg kanal.tem.title så jeg bruger titler som mit ord kilde.////////- jeg er nødt til at gøre et system, hvor alle ord af en titel og derefter tilsættes på hver af disse ord i ordet system //jeg cyklus igennem dem for (var - jeg: uint = 0. jeg < xmlfeed. kanal. punkt på dagsordenen. length(); jeg + +) (trin 14: opbygning af ordet liste, instanciate den titlewords i alle følelser, så du har en ren system, hver gang vi har et nyt afsnit, titlewords = nye array() //at gøre fælles ord, jeg delte dem på "rum" titlewords = xmlfeed. kanal. punkt [i]. titel. split ("") //efter dem blev delt jeg iterate dem til at blive føjet til wordarray for (var - j: uint = 0 j < titlewords. længde j + +) (//jeg bruger små, så jeg har ikke nogen dobbelt ord wordarray. tryk (titlewords [j]. tolowercase())}} //efter that gjort jeg ordet array - alfabetisk wordarray. sort(); //- og jeg starter tagcloud starttagcloud();, trin 15: begynder at mærke sky, nu har vi alle de elementer, som vi er nødt til at gøre dette mærke, sky. prøv {tagcloud = nye tagcloud (wordarray, ariel. fontname, 20,40,0xffffcd, 300).} fangst (e: fejl) (starttagcloud()} //alt, hvad der er tilbage, er at fastlægge en x - og y tagcloud. x = fase. stagewidth * 0.5-tagcloud. bredde * 0, 5 tagcloud. y = fase. stageheight * 0.5-tagcloud. højde * 0, 5 //og tilføje det til det stadium, addchild (tagcloud) //tadaaa vi er færdige...///, glem ikke at aktivere de vigtigste funktion:) init(); trin 16: den endelige kode, her er den fulde kode for dig at læse fuldt., import tagcloud; stage.align = stagealign.top_left var wordarray: system, var tagcloud: tagcloud; var arial: arial = nye arial(), var requestfeed: urlrequest = nye urlrequest (http: //rss. cnn. kom /rss /cnn_world. rss) var loaderfeed: urlloader = nye urlloader() var xmlfeed: xml, var titlewords: array funktion init() {loaderfeed. addeventlistener (ref. fuldstændig, onfeedcomplete) wordarray = nye array() loaderfeed. belastning (requestfeed)} funktion onfeedcomplete e: begivenhed) (xmlfeed = nye xml (e.target. data) til (var - jeg: uint = 0. jeg < xmlfeed. kanal. punkt på dagsordenen. length(); jeg + +) (titlewords = nyarray() titlewords = xmlfeed. kanal. punkt [i]. titel. split ("") til (var - j: uint = 0 j < titlewords. længde j + +) (wordarray. tryk (titlewords [j]. tolowercase())}} wordarray. sort(); starttagcloud();} funktion starttagcloud() {prøve (tagcloud = nye tagcloud (wordarray, ariel. fontname, 20,40,0xffffcd, 300)} fangst (e: fejl) (starttagcloud()} tagcloud. x = fase. stagewidth * 0.5-tagcloud. bredde * 0, 5 tagcloud. y = fase. stageheight * 0.5-tagcloud. højde * 0, 5 addchild (tagcloud)} init();, jeg kunne have brugt i forbindelse med lister, og mens løkker, for at gøre det lidt hurtigere, men du finder det rimeligt hurtigt.en sidste bemærkning: sørg for at fastsætte de tilfældige størrelse stort nok, eller du får en stackoverflow fejl, når cloudelement kan ikke finde et sted at være. jeg håber, du kan lide denne forelæsning, tak for det!,







Previous:
Next Page: