ABONAMENTE VIDEO REDACȚIA
RO
EN
Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 16
Abonament PDF

Dezvoltarea de jocuri cross-platform

Cristian Bidea
Lead developer
@King



PROGRAMARE

În momentul în care am început să lucrăm la primul nostru joc în cadrul King România, știam că proiectul urma să fie distractiv, pe de o parte pentru că, deși toţi membrii echipei dezvoltaseră până atunci jocuri, era prima dată când lucram la un joc casual-social și, pe de altă parte pentru că urma să fie primul joc "serios" de la King care ajungea pe mobile. King mai lansase înainte un joc, atât pe App Store, cât și pe Google Play (pe atunci App Market), dar nu era un joc high-profile lansat pe Facebook, așa cum era în cazul lui Bubble Witch Saga. În momentul selecţiei jocurilor pentru portarea pe mobile, Bubble Witch Saga a fost o alegere foarte naturală. Era cel mai popular titlu din portofoliul companiei în perioada respectivă, iar King își dorea o intrare "în forță" pe piața de mobile.

Inițial am crezut că o să fie o muncă ușoară și, într-un fel, ne şi doream acest lucru deoarece abia pusesem bazele studioului şi eram conştienţi că urmau să intervină probleme legate de administrarea sa. A trebuit să cumpărăm hardware, să setăm servere, servicii şi canalele de comunicație cu birourile din Suedia și Londra etc. Pe lângă toate aspectele logistice, au intervenit şi alte aspecte care trebuiau definite pentru o funcţionare cât mai eficientă: viziunea studioului, profilul oamenilor pe care doream să-i angajăm, modul în care ne organizăm în echipă. Apoi a urmat o discuție cu managerii de proiect de la Bubble Witch Saga, varianta de Facebook, în care am fost informaţi că urma să realizăm un lucru pe care nimeni nu-l mai încercase până atunci: să sincronizăm versiunea de Facebook cu cea de mobile. În momentul acela ne-am dat seama că dezvoltarea va fi mai complicată, dar în același timp mult mai interesantă.

Jocul de Facebook ține datele pe un server, într-o bază de date distribuită. Din acest punct de vedere, teoretic, este simplu: clientul de mobile ar trebui doar să acceseze aceleași date. Însă în practică nu este chiar atât de uşor deoarece utilizatorii care se joacă pe telefoane nu sunt tot timpul online, în comparaţie cu cei de pe Facebook care sunt forţaţi să rămână online pentru a accesa jocul. Pe telefoane, odată ce aplicaţia a fost instalată, aceasta poate fi accesată în orice moment. Am fi putut opta pentru varianta în care să le impunem utilizatorilor să fie online pentru a accesa jocul, dar în felul acesta am fi pierdut foarte mulți jucători și, chiar dacă acesta n-ar fi fost un impediment, experiența de joc ar fi fost în mod cert una inferioară (de exemplu, jocul s-ar fi întrerupt de fiecare dată când se pierdea conexiunea la Internet). Toate aceste date indicau către o decizie clară: trebuia le permitem utilizatorilor să se joace când doresc, iar în momentul în care exista o conexiune la Internet disponibilă, sincronizam progresul jucătorului cu serverul.

Așadar, găsisem o soluţie, însă nu rezolva neapărat toate problemele. Am avut destul de multe dezbateri până am ajuns la soluția finală, dar știam că aceasta aduce cu ea alte probleme. Ce se întâmpla când un utilizator se juca pe telefonul care era offline, după care se juca online pe Facebook ? Pentru că telefonul era offline, versiunea de Facebook nu înregistra sesiunile de joc completate pe telefon. Erau destul de multe cazuri speciale la care trebuia să ne gândim cu atenție, astfel încât jucătorul să nu observe, pe cât posibil, că accesează jocul pe platforme diferite. De exemplu, există utilizatori care accesează jocul de pe o tabletă Android, un telefon mobil iPhone și îl joacă și pe Facebook. Aceștia trebuie să simtă mereu că joacă același joc. Trecerea de la o platformă la alta trebuie să fie complet transparentă. Numai acest aspect al jocului a consumat în timp (investit în dezvoltare și depanare) aproximativ 35% din durata totală a proiectului.

Când ne-am impus să facem ca jocul de pe mobile să fie la fel ca cel de pe Facebook, inițial am mers prea departe și am copiat jocul de pe Facebook în toate aspectele lui. În cazul anumitor aspecte ale jocului, abordarea aceasta este foarte bună. De exemplu, fizica de joc este o portare aproape directă în C++ a codului de Action Script și jocul se comportă foarte apropiat de jocul de Facebook, neexistând diferențe foarte mari în scoruri. Scorurile sunt sincronizate între versiuni și atunci nu ai dori ca toţi utilizatorii să joace pe Facebook pentru că acolo înregistrează scoruri mai mari sau invers. Pentru alte aspecte însă, copierea nu este la fel de eficientă și în acele situații a trebuit să adaptăm jocul. Am făcut butoanele mai mari, pentru că utilizatorii interacționează cu jocul folosind degetele și nu mouse-ul, care este mult mai precis și fin. Am eliminat pe cât posibil textele pe care utilizatorii de telefoane nu sunt obișnuiți să le citească; aceștia se ghidează mai mult după icoane, animații sau feedback vizual contextual. Am adaptat jocul astfel încât să răspundă la diverse întreruperi: recepţionarea de apeluri, mesaje, apăsarea butonului de home (pe iOS) sau back (pe Android) etc. Toate aceste elemente nu există pe Facebook.

Până acum, am abordat aspectele oarecum evidente în procesul de portare a unui joc de pe Facebook pe mobile, pentru că acestea țin de interacțiuni vizibile sau de interfață. Însă foarte mult timp este investit în aspectele care nu sunt imediat aparente. Jocul de Facebook rulează pe un calculator foarte puternic. Asta înseamnă că jocul de Facebook are acces la o putere de procesare virtual nelimitată. În schimb, este limitat de viteza rețelei și a conexiunii la Internet. Utilizatorul nu doreşte să fie ţinut prea mult în fața unui ecran de loading și atunci apare problema limitării cantităţii de date care poate fi trimisă pe rețea, fără ca utilizatorul să aștepte prea mult.

Toate aceste limitări sunt cel puțin de două ori mai mari pe mobile. În primul rând, procesoarele ARM cu care sunt echipate telefoanele mobile, în general, sunt mult mai slabe decât un procesor Intel care se găsește de obicei pe PC sau Mac. În al doilea rând, memoria RAM pe telefoane este de 4 - 6 ori mai mică decât pe PC. În același timp, telefoanele au cerințe speciale de consum al energiei. De exemplu, dacă jocul nu este activ, atunci nu trebuie să consume, pe cât posibil, resurse. Fiind un joc casual-social, ne doream ca acesta să fie descărcat atât prin rețea WIFI, cât și prin 3G. Pentru a fi eligibilă pentru descărcare prin rețea 3G, aplicația trebuia să aibă sub 50 MB. Aceasta este o altă limitare pe care jocul de pe Facebook nu o are.

Ce au însemnat pentru noi toate aceste limitări? În primul rând, a trebuit să găsim metode mai bune de împachetare și de compresie a datelor. Când vorbim despre compresie, vorbim tot timpul despre un compromis care se face între memoria ocupată și ciclurile de procesor consumate pentru decompresie. A trebuit să ne gândim foarte atent la aceste compromisuri, deoarece nici cea de a doua resursă (procesorul) nu ne oferea foarte multe. Compromisurile sunt și mai importante când este vorba despre lansarea unui joc universal pe App Store, adică un singur pachet/aplicație care rulează pe toate modelele de iPhone, iPod sau iPad. Acest lucru înseamnă că, în anumite cazuri, în același pachet o să existe aceeași resursă (imagine, sunet, text) multiplicată pentru fiecare device. În alte cazuri, soluţia a constat în găsirea unor hack-uri istețe prin care reușeam să refolosim aceeași resursă pe toate device-urile. Deși poate părea excelentă, soluția rămâne totuși un compromis, pentru că la fiecare modificare a unei resurse comune trebuia să ne asigurăm că jocul se comporta consistent pe toate device-urile. Acest lucru se traduce printr-un timp de QA crescut.

Până acum am vorbit despre jocul pe mobile versus jocul pe Facebook. Dar mobile nu este o platformă mare, unitară și uniformă. Din contră! Este o platformă mare, neunitară, neuniformă și fragmentată. Am început să portăm Bubble Witch Saga pe iOS (iPhone, iPod, iPad) în ianuarie 2012 și l-am lansat (doar în câteva țări pentru început) în luna mai a aceluiași an. Apoi, ne-am concentrat pe versiunea de Android, care a plecat de la aceeași bază de cod și a fost lansată aproximativ cinci luni mai târziu. O echipă împărțită în două - o parte (trei programatori) concentrată în continuare pe lansarea versiuni de iOS și ulterior a update-urilor, iar cealaltă parte (tot trei programatori) concentrată pe versiunea de Android. În total, a durat aproximativ 10 luni să lansăm un joc pe toate platformele mari (iOS, Android). Cel mai important factor, care conduce la mărirea timpului de dezvoltare, este reprezentat de fragmentarea platformelor. Deși jocul rula atât pe iOS, cât și pe Android încă din ianuarie (pentru că aproximativ 90% din totalul codului era comun), ne-au mai trebuit încă cinci luni ca să lansăm un joc "polished" pentru Android. Am vrut ca jocul să fie compatibil cu cât mai multe modele de telefoane și ne-am confruntat cu tot felul de diferențe subtile între aceste modele, între versiunile de sistem de operare și între rezoluțiile telefoanelor, uneori foarte atipice.

Echipa King România

Pentru că o mare parte din grafică era deja realizată pentru varianta de Facebook, am avut un singur grafician în echipă care s-a ocupat de elementele noi specifice versiunii de mobile și de adaptarea graficii existente.

Din punct de vedere al QA-ului, proiectul rămâne unul foarte dificil. Are câteva sute de niveluri, avea peste zece charm-uri permanente care influențau și modificau jocul (în varianta curentă s-a renunțat la acestea în favoarea wish-urilor), o serie de elemente speciale in-game (Doom Skull Bubble, Infected Bubble, Bomb Bubble etc) și booster-e temporare. Multitudinea de elemente creează foarte multe situații posibile care trebuie testate. Pentru acest proiect am avut șase analiști care testau jocul în cele mai mici detalii. Un ciclu de testare tipic, spre finalul proiectului, dura între trei și șapte zile, în funcție de ce se testa. Ciclul de testare pre-release era mai lung, pentru că se testau elemente adiționale specifice lansării. Asigurarea calității este foarte importantă pentru noi, pentru că după trimiterea versiunii de joc la Apple, durează în medie două săptămâni până ca aceasta să fie aprobată și lansată pe store. Dacă detectăm vreo greşeală după lansare, trebuie să o luăm de la început şi s-ar pierde nepermis de mult timp! De aceea, ne concentrăm foarte mult pe QA și încercăm să fim cât mai proactivi când vine vorba de calitatea produsului.

Multă muncă, foarte multă atenție și concentrare la detaliile care contează, o mică armată de oameni implicați direct în dezvoltarea produsului și o altă mică armată implicată în activități adiacente produsului (marketing, finance, accounting etc) și la final un scor de cinci stele ne face pe toți să decretăm: "da, e distractiv să faci jocuri!"

LANSAREA NUMĂRULUI 149

Marți, 26 Octombrie, ora 18:00

sediul Cognizant

Facebook Meetup StreamEvent YouTube

NUMĂRUL 147 - Automotive

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects