„Codebox“: sukite tikslų (masyvistą) - 💡 Fix My Ideas

„Codebox“: sukite tikslų (masyvistą)

„Codebox“: sukite tikslų (masyvistą)


Autorius: Ethan Holmes, 2019

Paskutinis „Codebox“ parodė, kaip naudoti savo kamerą, kad pakeistumėte pelę su stebuklinga lazdele (rūšiuoti). Pavyzdžiui, perkeliant lazdą į apvalią ekrano sritį, spinduliavimo spinduliai pasikeitė į atsitiktinę spalvą. Šis straipsnis remiasi šiuo pavyzdžiu ir parodo, kaip sukurti sudėtingesnes sąveikas. Vietoje vieno, stacionaraus tikslo šis eskizas pateikia keletą skraidančių taikinių. Palietus taikinį (žodis „skrybėlė“), jis paverčiamas kitu žodžiu (šiuo atveju „triušis“), kaip parodyta čia:

Eskizas iliustruoja, kaip sukurti ir valdyti interaktyvių objektų sąrašą. Nesvarbu, ar rašote žaidimus, dalelių sistemas, ar „Arduino“ valdomą stebuklingą šou (Gerai, todėl aš nukreipiau ranką - tai yra būsimo pranešimo tema), tai yra įrankiai, kuriuos naudosite vėl ir vėl, kaip jūs eikite toliau apdorojant.

Nustatykite eskizą

Visų pirma pirmieji dalykai - paimkime ir pradėkime eskizą. Šiam projektui reikės dviejų failų: magic_words.pde ir Target.pde. Pirma, įjunkite apdorojimą ir įklijuokite šį kodą magic_words.pde į pagrindinį langą.

Galite pažymėti pirmąją eilutę, slinkti visą kelią ir tada naudoti Ctrl-c, kad kopijuotumėte kodą (sunku), arba galite spustelėti šią nuorodą (magic_words.pde), paspauskite Ctrl + a, kad pasirinktumėte visą tekstą, ir tada naudokite Ctrl + c, kad jį nukopijuotumėte (lengviau). Kai nukopijuosite kodą, grįžkite į „apdoroti“ ir įklijuokite jį į pagrindinį langą. Tada naudokite „File -> Save“ iš meniu juostos (arba tiesiog Ctrl + s) ir išsaugokite failą naudodami pavadinimą „magic_words“ (apdorojimas automatiškai pridės „.pde“).

Čia yra „Target.pde“, antrasis reikalingas failas:

Nukopijuokite kodą į savo pastos buferį naudodami bet kurį pageidaujamą metodą (t. Y., Pažymėkite jį visus arba susiejant tiesiogiai su failu). Šį kartą turėsite sukurti naują skirtukąTaip apdorojimas leidžia valdyti eskizus su keliais failais. (Tai panašu į naujo skirtuko kūrimą naršyklės lange).

Norėdami sukurti skirtuką, spustelėkite dešinįjį rodyklę viršutiniame dešiniajame apdorojimo lango kampe.Apdorojimas paprašys naujo failo pavadinimo - įveskite „Tikslą“. Kai įvesite failo pavadinimą, atsiras naujas skirtukas, kuriame galėsite įklijuoti kodą. Toliau pateiktoje diagramoje turėtų būti pateikiami jums reikalingi veiksmai:

Paskutinis dalykas, kurį turime padaryti, yra sukurti gražų šriftą šiam tikslui. (Šriftai aptariami 6 skyriuje „Darbo pradžia“. Kodėl klausi? Iš dėžutės, apdorojimas yra tiesiog paprasta komanda vadinama tekstas () kad bus rodomas tekstas, tačiau negalite pasakyti, kiek vietos užima ekrane (tai bus svarbu, kaip matysime per minutę). Be to, jie tiesiog yra senas „Arial“ šriftas, todėl jie nėra labai įdomūs.

Norėdami tai padaryti, meniu „Įrankiai“ galite sukurti naują šrifto failą savo eskizui. Importavus failą naudodami loadFont () komandą, galėsite žaisti su tipografija. (W00t!). Bet kokiu atveju šrifto kūrimo procesas yra paprastas. Pirma, meniu juostoje spustelėkite „Įrankiai -> Kurti šriftą…“, kuris pasirodys tokiame ekrane:

Tada viskas, ką jums reikia padaryti, yra pasirinkti norimą šriftą (pasirinkau „Baskerville-Bold“; jei norite naudoti kitą šriftą, turėsite pakeisti šrifto failo pavadinimą magic_words.pde). Atkreipkite dėmesį, kad failo pavadinimas langelio apačioje keičiasi pasirinkus įvairias parinktis - tai failo pavadinimas, kurį turėsite naudoti eskize; Apdorojimas automatiškai prideda „.vlw“.

Įdėję du failus ir įdiegę šriftą, paleiskite eskizą. (Kaip ir daugeliui šio serijos projektų, jums taip pat reikės kameros.) Naudodamiesi lazdele (arba bet kuriuo kitu tinkamu žymekliu) iš paskutinio „Codebox“, turėtumėte turėti galimybę sukti įvairius tikslus.

Kiti du skyriai aprašo, kaip veikia eskizas. Pirmojoje dalyje aprašomas kodas Target.pde faile, kuris naudojamas norint sukurti tikslinį objektą, pagrindinį scenarijaus bloką. Antrajame skyriuje aprašoma, kaip „magic_words.pde“ failas naudojamas ir „ArrayList“ valdo kelis taikinius.

Tikslinis objektas

9 skyriuje „Darbo pradžia“ pateikiami objektai ir objektų programavimas (OOP). Norėdami trumpai peržiūrėti, objektas yra statybinis blokas, naudojamas kuriant sudėtingesnes programas. Objektuose yra du pagrindiniai elementai: laukai, kurie yra kintamieji, kurie nustato dabartinę objekto būseną, ir metodus, kurios yra tik funkcijos, dėl kurių objektas daro kažką. Svarbi OOP galios dalis yra ta, kad ji padeda fiziškai apsvarstyti jūsų kodą, skatindama jus galvoti apie paprastesnius komponentus.

Jei norite naudoti objektus, pirmiausia sukurkite a klasė (arba kelios klasės - galite naudoti daug skirtingų objektų), kuris yra tarsi šablonas, apibūdinantis viską, ką gali padaryti objektas. Nustačius klasę, naudosite naujas komandą iš tikrųjų kurti objektus, kuriuos galite naudoti savo eskizuose. Šis skirtumas gali būti šiek tiek painus, todėl pagalvokite apie tai. Jei kepate pyragą, pradėtumėte receptą. Tai yra tarsi klasė - jūs turite aprašą, bet pats pyragas. Norint gauti pyragą - ar objektą, turite sekti receptą prieš ką nors valgyti. Naujų objektų kūrimas yra apdorojimas naujas komanda - ji sukuria naują objekto kintamąjį skambindama specialiu metodu, vadinamu konstruktorius. Konstruktorius inicijuoja objekto kintamuosius ir paprastai gauna pasirengimą veikti; vienintelis skirtumas tarp jo ir kito metodo yra tas, kad jis turi tą patį pavadinimą kaip ir pati klasė.

Gerai, pakankamai peržiūrėkite. Pakalbėkime apie kodą. Kaip aptarta anksčiau, tikslinė klasė yra statybinis elementas. Jos laukai apima:

  • Dabartinė padėtis, kaip rodo kintamieji x ir y
  • Greitis ir kryptis, kaip rodo kintamieji dx ir dy. Tai tik atsitiktinai pasirinktos vertės.
  • Plotis ir aukštis, kaip rodo kintamieji w ir h
  • Šrifto dydis (daugiau apie tai šiek tiek)
  • Žyma, rodanti, ar lazdelė liečia taikinį (vėliava yra bet kokio kintamojo programavimo terminas, naudojamas atstovauti konkretų statusą įjungta arba išjungtas)
  • Dabartinis tikslinio teksto tekstas (t. Y. „Hat“ arba „Triušis“)

Po privalomo Tikslinė () konstruktorius (vienintelis uždavinys yra nustatyti tikslo ir po teksto reikšmes), tokie metodai:

  • žingsnis (), todėl tikslas pereina aplink sceną. Tai veikia pridedant dx ir dy į x ir y kintamieji.
  • tapyti(), kuris atkreipia tikslą į sceną (x, y) pozicija
  • discoverCollision (), kuris nustato, ar lazdelė susidūrė su taikiniu
  • setBox (), kuris atnaujina taikinio pločio ir aukščio kintamuosius pagal tai, ar jis buvo palietęs lazdelę
  • perjungti (), kuris pakeičia tikslinį žodį. (t. y., jei dabartinis žodis „Hat“) perjungti daro jį „triušiu“ ir atvirkščiai)
  • scenoje(), kuris grąžina vėliavą, rodančią, ar taikinys nukrito nuo matomo ekrano srities

Pirmieji du metodai yra gana paprasti, tačiau likusieji metodai, naudojami susidūrimams aptikti, nusipelno šiek tiek daugiau dėmesio. Jei prisiminsite iš pradinio „Codebox“, susidūrimo aptikimas yra visų būdų, kuriais galima nustatyti, kad du dalykai kerta ekraną, pavadinimas. Originaliame lazdos pavyzdyje mes turėjome apvalų taikinį, todėl naudojome paprastą atstumo formulę, kad nustatytume, ar lazdelės koordinatės buvo tikslo spindulio viduje. Šiame pavyzdyje mes naudojame stačiakampį taikinį. Kad dalykai būtų šiek tiek sudėtingesni, tikslai keičia dydį, kai nori jį paliesti, todėl mums reikia tam tikrų pagalbinių metodų, kad įsitikintume, kad visi kintamieji atitinka dabartinę tikslinę būseną. Toliau pateiktoje diagramoje parodyti įvairūs kūriniai:

Naudodami šią diagramą, kodą gana paprasta rašyti discoverCollision ():

// Nustato, kad yra tam tikras x, y koordinatės, esančios dėžutėje, loginis aptikimasCollision (float cx, float cy) {boolean retVal = false; jei ((cx> x) && (cx <(x + w)) && (cy> (y-h)) && (cy <y)) {retVal = tiesa; } grįžti atgal; }

Galiausiai, scenoje() nustato, ar taikinys vis dar yra matomame etape. Išpylus jį, jis bus perdirbtas, kai jį įdėsite į naują vietą su nauju greičiu ir kryptimi. Įdomu pažymėti, kad, nepaisant papildomų sudėtingumo, didžioji šio kodo dalis yra beveik identiška 5-17 pavyzdžiui: stačiakampio riba pradedant dirbti su apdorojimu.

Užduočių rodiklis

Dabar, kai mes einame per tikslinę klasę, pažvelkime, kaip jį naudoti. Kaip jau minėta, pagrindinis šio pavyzdžio tikslas buvo parodyti, kaip dinamiškai valdyti kelis objektus. Nors standartinės matricos (aptartos 10 skyriuje „Darbo pradžia“) yra puikios daugeliui dalykų, jos nėra labai dinamiškos, nes kai jūs nurodėte, kiek elementų jie yra, jūs visuomet įstrigo.

Pvz., Tarkime, kad norėjote turėti daugybę tikslų, o ne juos perdirbti, kaip mes tai darėme, tiesiog norėjote juos ištrinti. Standartinėje grupėje negalite ištrinti elementų. Jei pradėjote 5, visada turite 5, nesvarbu. Taigi, jei norite kažką „ištrinti“, turite turėti tam tikrą gremėzdišką problemą. Arba, jei norite, kad jūs turėtumėte programą, kurioje paprastai buvo keli daiktai, kuriuos galėtumėte valdyti, tačiau kai kuriais atvejais jums gali būti daug tūkstančių. Naudodami standartinį masyvą, kiekvieną kartą turite sukurti erdvę tūkstančiams, o tai švaistytų atmintį ir gali padaryti savo eskizus lėčiau.

Apdorojimas „ArrayList“ yra būdas apeiti šiuos apribojimus. ArrayList yra paprastas duomenų tipas, pvz., Plaukiojantis ar int. Jame yra būdų, kaip pridėti naujus elementus, ištrinti esamą, rasti, kiek elementų yra sąraše ir pan. Be to, kad tai yra tikrai naudinga priemonė, dirbant su „ArrayList“ susipažinsite su metodais, kuriuos naudosite kitose sudėtingesnėse klasėse, pvz., „HashMaps“ (kažką, ką ištirsime ateityje). Taigi, pereikite prie magic_words.pde ir pažvelkime kodą.

„ArrayList“ kūrimas yra gana paprastas ir atliekamas šioje eilutėje; atkreipkite dėmesį, kaip nereikia deklaruoti dydžio:

„ArrayList“ tikslai; // ArrayList yra dinamiškas būdas valdyti masyvus

Paskelbus, mes galime pradėti pridėti keletą naujų objektų į „ArrayList“, kurį mes darome su „ papildyti() metodas. Čia yra kodo fragmentas sąranka () metodas, kuris prideda pradinius tikslus:

target = new ArrayList (); // Sukurti naują sąrašą (int i = 0; i <N; i ++) {target.add (naujas taikinys („Hat“, „triušis“)); }

Šis fragmentas turi keletą įdomių punktų. Pirma, jis parodo metodo skambinimo sintaksę object_variable.klasės metodas (argumentų sąrašas). Antra, jis parodo, kaip galite naudoti objektą kaip argumentą „ArrayList“. Atkreipkite dėmesį, kaip mes naudojame naujas komandą argumentų sąraše - kuris sukurs naują Target objekto kintamąjį ir perduos jį į sąrašą. Galiausiai fragmentas parodo, kaip visa tai galima padaryti kilpoje. Galėtume pridėti 10, 100 arba 10000 objektų - sąrašo dydis yra visiškai dinamiškas.

Šis kitas fragmentas, kuris rodomas piešti () metodas, rodo, kaip mes galime naudoti gauti () būdas traukti elementą iš „ArrayList“:

už (int i = 0; i <target.size (); i ++) {Target t = (Target) target.get (i); // Nukelkite i'th tikslą iš „Array t.paint“ (); // Dažyti // Patikrinkite, ar nėra susidūrimų, jei (t.detectCollision (wandX, wandY)) {if (! T.inTarget) {t.toggle (); t.inTarget = tiesa; }} kitas {t.inTarget = false; } t.step (); // Iškelkite jį ekrane // Jei dabartinis taikinys nuvažiavo iš scenos, ištrinkite jį iš sąrašo ir sukurkite naują tikslą, jei (! T.onStage ()) {goals.remove (i); target.add (naujas taikinys („Hat“, „Triušis“)); }}

Svarbiausia eilutė čia yra Tikslinė t = (Tikslinė) target.get (i);. Čia vyksta keli dalykai. Pirmiausia sukuriame naują Target kintamąjį t. Tačiau šį kartą mes nenaudojame naujas komandą. Kodėl klausi? Taip yra todėl, kad objektas, kurį bandome pasiekti, jau egzistuoja - jis buvo sukurtas anksčiau sąranka () metodas. Viskas, ką mes čia darome, yra jų gavimas. Antra, mes turime tokią keistą sintaksę (Tikslinis). Tokiu būdu mes pasakome apdorojimo būdą, kokio tipo kintamąjį mes tikimės gauti. Tai vadinama „liejimu“ ir reikalauja šiek tiek daugiau paaiškinimų.

Jei prisiminsite, „ArrayList“ yra bendras įrankis - mes galėtume jį naudoti naudojant „Target“ kintamąjį, „Jitterbug“ klasę, aptartą 10 skyriuje „Darbo pradžia“, arba bet kurį kitą klasės kintamąjį, kurį galime sukurti ateityje. Tačiau apdorojimas (ir „Java“, pagrindinė kalba, kuria jis grindžiamas) negali būti susijęs su bendruoju objektu. Jis reikalauja, kad kiekvienam kintamajam būtų suteikta tiksli rūšis, kai ją paskelbiame. Pridedant (Tikslinis) į priekį gauti () komanda tai reiškia - mes sakome „apdorojimas“, o mes ištraukiame „Tikslinės“ objektą. liejimas kitų programavimo išteklių.

Galiausiai mes turime target.get (i) dalis linijos. Tai tiesiog sako: „ištraukite i„Objektas iš tikslų„ ArrayList “.

Kai iš tikrųjų atkuriame kintamąjį t, mes galime skambinti perskaityti savo kintamuosius, paskambinti savo metodais ir apskritai padaryti tai mūsų siūlymu. Šiame pavyzdyje mes pirmą kartą skambiname tapyti() metodas tikslui piešti ekrane. Be to, patikriname, ar juosta paliečia jį (kai prisiminsite iš paskutinio „Codebox“, lazdelės poziciją vaizduoja kintamieji WandX ir WandY). Jei yra susidūrimas, pirmiausia patikrinsime, ar lazdelė buvo jau yra tikslą. (Kitaip tariant, lazdelė galėjo susidurti su objektu ankstesniu sąranka () ir vis dar būkite tikslinės dėžutės viduje.) Jei tai nėra (t.y., jis pataiko tikslinį langelį pirmą kartą), tada perjungiame tekstą ir nustatome inTarget vėliava. Jei lazdelė jau yra taikinyje, mes tiesiog nustatome tikslinę vėliavą į klaidingą, kuri neleidžia tikslui keisti būsenos kiekviename iteracijos metu piešti (). Kita komanda, t.step (), tiesiog padidina tikslą x ir y pozicijas. Galiausiai, paskutinis jei užblokuokite patikrinimus, kad pamatytumėte, ar tikslas nebėra matomas scenoje. Jei tai nėra (t. Y. Jis nuvažiavo iš matomos ekrano srities), taikinys pašalinamas iš „ArrayList“ naudojant pašalinti () metodas; po to į naują atsitiktinę vietą įtraukiamas naujas tikslas.

Whew! Tai daug abstrakčių dalykų, tačiau verta suprasti, nes tuos metodus naudosite dar kartą. Nesvarbu, ar naudojate „ArrayList“, „HashMap“ ar kitokią bendrą duomenų struktūrą, suprasite šiuos pagrindinius veiksmus - kuriant naują objektą, saugodami jį bendroje duomenų struktūroje ir ją nuskaitydami, būtina atlikti sudėtingesnes programas.

Kitame „Codebox“ veiksme pertraukos iš interneto kameros ir ištirsime, kaip iš naudotojų, kurie naudojasi tikrai vėsioje biblioteka, vadinama „controlP5“, gauti sudėtingesnį indėlį. O ir fraktalai. Mes tai darysime.

Daugiau: žiūrėkite visus „Codebox“ stulpelius



Jums Gali Būti Įdomu

„CadSoft“ atnaujinimai EAGLE su klaidų taisymais ir naujomis funkcijomis

„CadSoft“ atnaujinimai EAGLE su klaidų taisymais ir naujomis funkcijomis


Padarykite stilingą žibintuvėlį iš virtuvės šiukšlių

Padarykite stilingą žibintuvėlį iš virtuvės šiukšlių


Kalvystės pagrindai: Forge Your Own Flatter

Kalvystės pagrindai: Forge Your Own Flatter


Kaip 3D spausdinti savo odos įrankių antspaudus

Kaip 3D spausdinti savo odos įrankių antspaudus