Înapoi la teme de jocuri Android. Nu pentru același lucru, noi, lucrurile potrivite, le-am scris aici motorul lor, așa că să terminăm cu ingenioară toate acestea cu cruci. Aici citiți recent la postul unui utilizator din forum, care solicită pas cu pas să picteze procesul de creare a spoturilor.
Ei bine, m-am gândit, de asemenea, că petele sunt un lucru bun. Punctele sunt lucrurile potrivite. Mai mult decât atât, speck - aceasta este, de asemenea, o problemă simplă pentru un începător android - programator - chiar lucru.
Ar trebui să începeți prin a studia zona de subiect. Câmpul de joc este un patrat de 4x4 pe care se află 15 chipsuri numerotate de la 1 la 15 și un câmp gol. Nu vom reinventa roata și nu ne imaginăm câmpul de joc sub forma unei matrice bidimensionale. Faceți o mișcare deplasând orice număr de jetoane spre câmpul gol. Jucătorul câștigă atunci când toate jetoanele sunt numerotate de la 1 la 15 de sus în jos de la stânga la dreapta și colțul din dreapta jos este liber.
Și deci, aici este o clasă care implementează întreaga componentă logică a jocului:
Fiecare metodă este descrisă suficient de detaliat și cred că nu veți avea probleme pentru a înțelege ce este implicat.
Dar următoarea clasă este responsabilă pentru interacțiunea jucătorului și a jocului, precum și pentru afișarea diferitelor componente ale interfeței de utilizator utilizând motorul meu (ultima versiune a căruia poate fi obținută de la acest link).
Cred că oamenii care nu sunt leneși să citească aici despre ceea ce este de fapt motorul meu nu este o problemă cu înțelegerea a ceea ce se întâmplă în această clasă.
De fapt, aceste două clase, și există un spotts pe deplin realizat :)!
Așa cum Paul a observat în mod corect, nu fiecare joc alocat întâmplător poate fi câștigat.
Așa că am decis să corectez ușor clasa jocului15, astfel încât să nu existe astfel de probleme. În loc să verificăm câmpul de joc generat pentru posibilitatea de a câștiga, am decis să îl fac puțin mai ușor. Generează câmpul în poziție atunci când acesta este trecut, apoi îl confundă aleatoriu.
Dă aici codul de clasă:
Cred că va fi mult mai interesant
UPD: Aici este proiectul finalizat pentru Android mEngine
Ți-a plăcut? A fost util? Distribuiți!
Vă mulțumesc pentru astfel de lecții minunate, ei m-au ajutat foarte mult în cunoașterea dezvoltării pentru Android!
Și am câteva întrebări în cursul dezvoltării lor:
1) Dacă între scene redrajează, trebuie să recalculez diferiți parametri, de exemplu, mișcarea obiectelor, reîncărcați sprite, bine, în general, faceți anumite acțiuni, unde sunt cele mai bune realizate (aceste acțiuni)? Înțeleg corect că trebuie să apelăm o funcție separată în clasa mDrawerTask, metoda run () înainte de a executa canvas = hold.lockCanvas ();? Și va viteza de redare a scenei afectează viteza de lucru dacă toate aceste calcule sunt efectuate după canvas = holder.lockCanvas ();?
2) Si inca incomprehensibila pentru mine, atunci cand creem o suprafata, planificam o sarcina cu ajutorul timerului, de exemplu, daca avem un target FPS setat la 25 de cadre, sarcina va fi lansata la fiecare 40 ms:
sertar = nou mDrawerTask (this.getHolder (), această scală);
t.scheduleAtFixedRate (sertar, 0, mSettings.frameInterval);
Înțeleg că dacă sistemul de pe android va face față redării scenei în 40 ms și recalculații înainte de redare, totul va fi bine, scena se va schimba așa cum a fost planificată. Dar dacă acest timp nu este suficient pentru a atrage, ce se va întâmpla? întregul ciclu de rendering sprite animate va încetini? Sarcini vor fi copiate pe stivă de execuție unul câte unul până când toate acestea sunt executate în cele din urmă? Dacă da, ce ar trebui făcut pentru a evita acest lucru?
Vă mulțumim în avans pentru sfaturi și sfaturi 🙂
Faptul este că desenul are loc independent de orice - într-un fir separat. Prin urmare, este logic să se facă calcule diferite într-un flux separat. Astfel, dacă doriți să recalculați o nouă poziție de sprites, de exemplu și din anumite motive nu ați avut timp, spriteul va fi reflectat cumva în vechiul său loc. Această abordare are plusurile și minusurile. Dar mi se pare cel mai justificat jocurile care nu depind foarte mult de calcule.