Cunoștințe, prelegere, detectarea coliziunilor

Atenție, vă rog. Pentru a lucra cu această prelegere, aveți nevoie de fișiere de antrenament pe care le puteți descărca aici.

În "Interfețele ActscriptScript", am analizat câteva dintre modalitățile prin care utilizatorul interacționează cu obiectele de pe ecran. Acum ne vom uita la modul în care obiectele pot reacționa reciproc atunci când sunt detectate coliziuni. O întreagă lecție despre detectarea coliziunilor? Da, din moment ce vă vom spune despre multe dintre momentele însoțitoare, după ce ați înțeles, veți fi bine familiarizat cu coliziunile.







În momentul în care am creat tutoriale și fișiere open source ca exemple, mulți oameni mi-au trimis fișiere interesante pe care le-au creat pe baza principiilor de bază descrise în carte. Având în vedere acest fapt, nu voi folosi grafice complexe și fișiere prea mari. Vă voi spune câteva principii de bază, astfel încât să le înțelegeți cu adevărat, după care vă puteți încerca abilitățile de a crea câteva jocuri simple. Adăugați la aceasta o parte a imaginației dvs. și bucurați-vă de programare pentru propria plăcere!

Metoda HitTest

Mai întâi vom vorbi despre cele mai simple dintre toate metodele de detectare a coliziunilor - hitTest. Dacă citiți această carte, atunci probabil că a trebuit deja să utilizați hitTest. Oricum, am folosit această metodă în cursul precedent, dar există câteva modalități de utilizare a acesteia, iar acum le vom lua în considerare.

Există două moduri de a utiliza hitTest. iar al doilea are două posibilități, în total există trei metode diferite de a lucra cu hitTest. Ne vom uita la ele în ordinea crescândă a complexității.

Interpretarea cea mai simplă este hitTest. după cum vă amintiți din prelegerea precedentă, este după cum urmează.

Aici, pur și simplu, verificăm faptul că există două filme. Nu contează deloc care este poziția fiecăruia dintre filme. Dacă se suprapun două filme, valoarea "true" va fi returnată, altfel "false". Prin urmare, hitTest este folosit aproape exclusiv în instrucțiunea if, după cum urmează.

Cadre dreptunghiulare

Când utilizați hitTest, trebuie să știți despre așa-numitele dreptunghiuri de graniță. Acestea sunt dreptunghiuri invizibile care corespund complet limitelor filmului. Partea superioară a dreptunghiului corespunde celui mai înalt element vizibil al filmului, partea inferioară a celui mai jos element vizibil, iar marginile din stânga și din dreapta ale dreptunghiului corespund celor mai îndepărtate puncte din stânga și din dreapta ale filmului. Dacă poziționați filmul la locul de muncă și apoi faceți clic pe acesta pentru ao selecta, veți vedea un cadru albastru în jurul filmului (dacă nu schimbați culoarea implicită a cadrului). Acesta este dreptunghiul care este marginea filmului:

Acest dreptunghi de graniță este elementul pe care hitTest este folosit pentru a verifica coliziunile. Cu ajutorul său, acest proces se realizează rapid și eficient, din păcate însă, în multe cazuri, acesta poate da rezultate destul de inexacte. Cu excepția cazului în care filmul în cauză este dreptunghiular, i. E. Dreptunghiul de graniță conține numai filmul în sine, dreptunghiul delimitat întotdeauna conține un loc suplimentar în interiorul său, în plus față de filmul în sine. Prin urmare, hitTest poate detecta adesea coliziuni atunci când imaginile din filme nu se ating reciproc. Iată un exemplu tipic al cazului descris:







Cum poate fi eludat acest defect? Nu, dacă doriți să utilizați doar această versiune de hitTest. Acesta este prețul pe care îl plătiți pentru viteza și ușurința utilizării acestei metode. Deși pentru multe aplicații această metodă este destul de potrivită. Într-un mic joc-shooter, creat de noi în cursul precedent, totul sa mișcat destul de repede și nu ați observa nici o inexactitate. Dar imaginați-vă un joc, de exemplu, Asteroizii Atari, unde obiectele se pot mișca destul de încet. Veți aduce nava dvs. aproape de marginea asteroidului, dar apoi explodează brusc. "Nu l-am atins!" - vei spune. Da, după cum puteți vedea, această versiune de hitTest nu ar fi o soluție bună în această situație.

Probabil ați folosit această metodă mai devreme, cel puțin în cursul precedent, astfel încât nu vom pierde timpul examinând exemplele cu utilizarea sa. Să trecem la următoarea metodă de utilizare a hitTest.

Folosind shapeFlag

Iată sintaxa de bază pentru implementarea hitTest folosind formaFlag.

Știu că ați observat imediat parametrul shapeFlag. dar nu te grăbi. Să citim expresia de la stânga la dreapta.

La început, vedem filmulClip_mc. care, evident, este numele filmului care este verificat. Observați că de data aceasta verificăm doar un film. Deci, a fost o lovitură în acest film? Răspunsul este doar un punct. Acest punct este determinat de următorii doi parametri x și y. Aici punem întrebarea dacă punctul (x, y) se află în interiorul filmului filmului Clip_mc.

Acum mergeți la parametrul shapeFlag. Cu ajutorul ei, putem alege dacă trebuie sau nu să folosim dreptunghiul frontal al filmului. Dacă formaFlag este setată la false sau 0, hitTest va verifica pur și simplu pentru a vedea dacă punctul este în interiorul filmului. Dar dacă setați shapeFlag la o valoare numerică reală sau orice valoare, nu putem depăși limitele utilizării metodei dreptunghiurilor de graniță și verificăm dacă punctul este în partea vizibilă a filmului.

Da, această metodă este mult mai eficientă. Folosirea shapeFlag ca alternativă la metoda hitTest este destul de comună. De fapt, foarte rar am folosit hitTest fără formă Flag.

Acum totul pare mult mai decent, dar înainte de a concluziona că toate problemele noastre au fost rezolvate cu succes, trebuie să aflăm de unde provin aceste valori ale lui x și y. Amintiți-vă că, cu ajutorul primei metode examinate, filmul a fost verificat în comparație cu alt film. Putem simula acest lucru folosind un film ca filmul care efectuează funcția și parametrii _x și _y ai celui de-al doilea film ca parametri hit și x și y hitTest. Va arăta așa.

Privind la următoarea figură, veți înțelege cu ce problemă ne confruntăm acum.

Atacul nu va fi înregistrat, deoarece parametrii x și y se referă aici la filmul centralClip2_mc. care nu se află în zona dorită de lovit.

Deci, am ieșit din foc și în foc: Da, îmi plac metaforele. Aș dori să vă dau un sfat exhaustiv cu privire la modul de abordare a acestei probleme, dar nu am găsit o modalitate cu adevărat eficientă. Aceasta este o sarcină precum căutarea Sfântului Graal: prezentarea unui film folosind formaFlag pentru a verifica impactul filmului. De fapt, există întotdeauna o ieșire, deci nu vă loviți de perete, gândindu-vă că ați pierdut ceva evident. Vă voi oferi câteva sfaturi pentru a vă ajuta mai ușor.

  • Cel mai important punct este destul de clar: toate metodele sunt bune în situații diferite, deci experimentați cu toate cele trei modalități și alegeți cel mai potrivit.
  • În majoritatea cazurilor, dacă aveți un obiect mare și mic, este mai bine să utilizați un obiect mare ca film care execută hitTest. și mici pentru a furniza parametrii pentru X și Y.
  • Dacă aveți de-a face cu un obiect de formă neregulată, mai ales dacă dimensiunea sa este mare, este mai bine să sunați hitTest din acest obiect, deoarece aveți nevoie de forma zonei vizibile a acestui obiect.
  • Dacă aveți două obiecte mai mult sau mai puțin dreptunghiulare, utilizați metoda principală a metodei a două filme.

Aceasta, în ansamblu, este tot ce trebuie să știți despre hitTest. Acum vreau să merg direct la metode mai complexe de detectare a coliziunilor, dar dacă aveți îndoieli că sunteți bine versat în diferitele tipuri de hitTest. experimentați cu următorul exercițiu până când înțelegeți toate întrebările pentru dvs.







Articole similare

Trimiteți-le prietenilor: