Noua lume a interfeței rezervoarelor. Postletiz: probleme de creștere și căi ale soluțiilor lor

Astăzi vom petrece un tur al istoriei dezvoltării interfeței grafice (GUI) în lumea jocurilor. De tancuri.

Jocul a avut loc un drum lung spre succes, iar GUI-ul ei sa schimbat și complet repornit de mai multe ori în căutarea cerințelor de ridicare ale armatei de petroliere, care au crescut constant.

După ce am lucrat în Departamentul de programare a GUI doi și jumătate, am primit o idee despre modul în care interfața sa dezvoltat în planul tehnologic și modul în care se schimbă abordările și procesele, această dezvoltare a fost însoțitoare.

Primii pași: Utilizarea instrumentelor BigWorld
Totul a început cu faptul că în decembrie 2008 sa născut ideea proiectului. Toți cei care au jucat tancurile, cred, știu că ideea inițială a fost de a face jocul despre elfi și orci, dar când au crezut bine, ei au decis să locuiască pe tancuri (vezi fotografia de titlu).

Jocul a început să facă pe motorul BigWorld, care a oferit propriul set de instrumente pentru crearea unui GUI. Am mers pe jos cea mai mică rezistență și am făcut primele interfețe pe Gui BigWorld.

Cum a funcționat în ceea ce privește implementarea tehnică:

  • declarativ în XML descris structura și partea vizuală a GUI;
  • amenajarea generală pentru un stil multifuncțional - stiluri foarte adânci și un set de blocuri de bază, care alcătuite, descrise în XML;
  • fiecare dintre blocuri este descris într-o XML separată care indică stilurile utilizate și componentele. Pentru componente, setările lor au fost setate (numirea, localizarea mesajelor, legăturile către stiluri);
  • stilurile au fost descrise în fișiere XML separate, unde dimensiuni, poziții utilizate texturi, fonturi, culori, z-ordine și Dumnezeu știe ce altceva;
  • când porniți clientul, toate aceste fișiere XML au fost încărcate în Python și ambalate, după care a început procesul de a crea interfețe, inițializarea și conectarea la logica jocurilor de noroc.
Iată un exemplu variat de la proiectul SVNIL SVN:

hangar.xml - Descrierea blocurilor UI în hangar:

informatii cont. Componente / Cont. montaj. Componente / montaj. ...
cont.xml - o descriere a unui bloc cu informații despre cont:

nume de cont. Elideright. #Tips: hangar / cont_name cont_exp. #Menu: hangar / cont_info / experiență #Tips: hangar / cont_exp ...
styes / comun.xml - Descrierea stilurilor pentru componente generale:


stiluri / hangar.xml - Descrierea stilurilor pentru componente în hangar:


Se pare că totul este foarte structurat și de înțeles. Dar, după cum sa dovedit, această abordare a avut mai multe minusuri:

  • lucrul cu XML multi-nivel este complex în înțelegerea și a condus la un număr mare de erori care sunt greu de localizat și corect (de exemplu, descrierile în numirea componentelor și modalitățile de a texturi, o încălcare a structurii documentului XML );
  • lipsa mediului de dezvoltare vizuală. Singura modalitate de a obține un rezultat vizual este să începeți clientul de joc și să recreați mediul necesar pentru a vizualiza interfața dorită. Imaginați-vă cum va arăta toate acestea, privindu-vă la XML, pur și simplu ireală;
  • performanță proastă atunci când procesați intrarea utilizatorului (în special acest lucru a fost vizibil în chat);
  • un set mic de componente din cutie și complexitatea adăugării de noi componente;
  • implicarea ridicată a programatilor în procesul de creare și realizare a schimbărilor (chiar minime) în GUI;
  • nu există un instrument pentru crearea de animație.
Toate aceste minusuri au condus la crearea de interfețe în stilul programatorului Art. Potrivit unei schițe schematice, programatorii au făcut layout în XML și numai atunci artiștii au creat textul necesar și au trecut totul înapoi la programatori pentru tuning final și de înfășurare. Iată un exemplu de o astfel de interfață (în fotografie - locul de muncă al managerului de proiect Alexander Schilyaev cu un client de rezervor lansat în stadiul testului alfa închis):

Una dintre primele versiuni interfață marțială:

Și un pic mai târziu versiunea lui:

A devenit foarte repede înțeles că o astfel de abordare este un capăt mort. O analiză a pieței Middleware-Solutions. După cum sa dovedit, mainstream în dezvoltarea GUI la acel moment a fost soluția de la scaleformă: Aproape toate proiectele AAA au folosit-o în dezvoltare, iar rezultatele păreau foarte atractive.

Perioada de preîncărcare: mergeți la scale
Scaleformă oferită pentru a utiliza blițul pentru a dezvolta un GUI. De fapt, soluția a constat din trei părți:
  • implementarea personalizată a Flash Player, care ar putea fi încorporată în clientul jocului;
  • setați unelte pentru exportul SWF într-un format specializat;
  • clik Component Libraries - Set de componente și clase standard de UI care au permis dezvoltarea de accelerare.
În toamna anului 2009, a fost achiziționată o licență și a început o nouă etapă de dezvoltare a GUI-ului. La început, totul părea promițător: procesul de dezvoltare a flash a fost elaborat de ani de zile, iar dezvoltatorii care știau și au iubit acest proces au fost foarte mult. Cu toate acestea, sa dovedit că situația de pe piața muncii din Belarus la acel moment a fost în așa fel încât majoritatea dezvoltatorilor flash deja să stabilească pe proiecte interesante și "grase" și să găsească rapid și să atragă rame de înaltă calitate din partea.

Din acest motiv, Blițul de învățare urgent a început întregul departament GUI (înainte de a fi făcut PHP, Java și angajat în dezvoltarea web). Am studiat și am început să lucrăm pe ActionScript 2, deoarece Scaleform nu a acceptat încă ActionScript la acel moment. Acest lucru sa întâmplat la început:

Timp de șase luni, întreaga interfață a hangarului a fost transformată în Flash. Așa cum am scris, dezvoltarea conductelor pe flash este un proces petrecut și logic. Designerii creează schițe, iar programatorii îi încorporează în joc.

Vânzări:

În februarie 2010 a început testarea beta închisă a proiectului cu un hangar deja actualizat. Dar interfața de luptă era încă pe Python:

În primăvara anului 2010, a venit și rândul său să meargă la scală. Când sa întâmplat, comunitatea de joc a fost împărțită în două tabere. Mi-a plăcut tot ceea ce toată lumea (sau pur și simplu nu au observat o mare diferență) - și au continuat în tăcere să fie tocate vesel în tancuri. Restul a început să amâne munții de cărămizi la "cartoful sângeros", spunând că noile obiective și elemente ale interfeței nu corespund setării pe care nu există suficiente metale de panglică, șuruburi și nituri pe care vederile ar trebui să fie istorice și nu similar cu controalele navei spațiale.

Una dintre schițele de lucru ale noii interfețe de luptă:

Implementarea interfeței de combatere la scaleformă:

Dar, de-a lungul timpului, nemulțumirea a trecut, deoarece noile interfețe au adus o mulțime de noi în gameplay. Jocul a devenit mai dinamic, intuitiv mai clar și mai informativ.

În plus, utilizarea de scaleformă a deschis capacitatea de a personaliza interfețele. Orice școală care poate lucra minim cu Flash ar putea decompila SWF de la distribuția jocului și la discreția sa pentru a schimba totul - din imaginile și fonturile utilizate, la logica codului. A apărut moda, care a înlocuit atracțiile la rezervorul istoric, "păpușă" pe o mai brutală sau, dimpotrivă, minimalistă. A fost posibil să găsiți moduri pentru orice parte a interfeței în luptă. Au fost moduri de hangar: ore, calculatoare, carusel multi-nivel etc.

Manualul de wargam și-a schimbat atitudinea față de mod de mai multe ori. La început, de când au fost cazuri izolate, au fost pur și simplu ignorate. De-a lungul timpului și creșterea numărului și popularității lor - a început să aibă grijă și a realizat că unele dintre mods pot oferi un avantaj de jocuri folosind jucătorul lor. Dezvoltarea a început să conducă pe principiul "clientului în mâinile inamicului". Acest lucru, desigur, nu înseamnă că jucătorii sunt dușmanii noștri. Sarcina noastră a început să maximizeze jucătorii din încercările celorlalți de a obține un avantaj de joc.

Situația din piața modogului a început să monitorizeze cu atenție. Acum în cazul detectării periculoase sau a schimbării balanța jocurilor de noroc Modov reacționăm cu promptitudine și închidem posibilitatea de a le folosi, schimbând logica activității clientului. În ultimii ani, este acceptată fabricarea modurilor oneste. În esență, este conținut generat de utilizator - jucătorii fac aceste moduri pentru ei înșiși și alți jucători, ceea ce sporește valoarea produsului nostru.

Dar înapoi la poveste. Lucrul cu GUI-ul de scală Foarte împrospătat și a dat un impuls la dezvoltarea sa în proiect. Funcționalitatea a crescut și a fost complicată în timpul pasajului închis și deschideți beta Și eliberarea proiectului în lansarea din august 2010. Au fost adăugate noi caracteristici, deja existente au fost finalizate. Designul sa schimbat, a avut abordări diferite la prezentarea informațiilor în joc și organizarea interacțiunii cu jucătorul.

Opțiuni pentru implementarea filtrului echipamentului:

MINICART SCHIMBARE:

Postletiz: probleme de creștere și căi ale soluțiilor lor
Cu o creștere a numărului de coduri și a activelor, au început să se târască diferiții.

Scaleform Marketing a depășit dezvoltarea reală a produsului și, după cum sa dovedit, multe dintre trăsăturile declarate sau nu au funcționat la fel de mult cum am dorit sau au fost foarte bang în performanță sau au fost în general în copilărie. O mare lucrare a fost făcută pentru a îmbunătăți performanța jucătorului de scale, și atât din partea noastră, cât și din partea dezvoltatorilor de tehnologie.

Volumul crescut al codului a condus la un efect special interesant. Fiecare vizualizare (sau fereastră) se afla în Fla, conținea evaluările și codul său și compilate într-un fișier SWF separat. Au fost o mulțime de astfel de SWF, iar în timpul runturilor au condus în client pentru a arăta fereastra sau controlul dorit, și, caracteristic, ordinea de încărcare se poate schimba în funcție de ceea ce a făcut utilizatorul în joc.

Problema a fost că, dacă codul a fost schimbat, care a fost utilizat în mai multe SWF și după schimbări, nu toate aceste SWF reasamblate, atunci pot apărea următoarele la ratar. Primul SWF a fost încărcat cu codul depășit și, în cel mai bun caz, totul a funcționat în funcție de cel vechi, și în cel mai rău caz - picăturile clientului. Pentru a înțelege ce conduce exact la astfel de rezultate, a fost dificil. A trebuit să inventăm instrumentele și tehnicile care vă permit să urmăriți exact ce trebuie să reconstruiți după modificări.

A existat, de asemenea, o problemă cu calitatea și coerența codului și utilizarea diferitelor modele și stiluri de programare. Sa întâmplat, deoarece oamenii care nu erau dezvoltatori de flash profesioniști au început să se dezvolte pe Flash în proiect. Ei au învățat flash "în luptă", și toată lumea avea propriul bacteu (C ++, PHP, Java). Sa dovedit că atunci când lucrează părți diferite Proiectul a fost necesar pentru a trece de la o abordare la alta.

O altă durere a fost interacțiunea blițului cu Python. A fost posibilă transmiterea datelor oricărei părți numai sub forma unor tipuri primitive, care, desigur, nu au satisfăcut cererile noastre. Căile de soluții au fost două: Utilizați JSON sau așezați toate tipurile complexe în matrice lungi la un capăt și colectați obiecte din aceste matrice pe cealaltă.

Prima abordare a funcționat bine când obiectele erau mici. Dar, cu creșterea dimensiunii obiectelor, volumele corzilor rezultate au crescut și a afectat viteza codului - a căzut. A doua abordare a funcționat rapid, dar a fost complicată pentru înțelegere la citirea codului și a cerut eforturi titanice la punerea în aplicare a modificărilor structurii de date.

Până când, când toate aceste probleme au început să încetinească dezvoltarea, Scaleform a adus deja sprijinul ActionScript 3 la un nivel acceptabil. Avem un plan ridicat de a traduce interfețele de hangar pe versiune noua Limba și paralelă pentru a restructura proiectul și a crea propriul cadru care vă permite să faceți rapid și anumite reguli Adăugați o nouă funcționalitate proiectului.

Lucrările privind pregătirea tranziției la ActionScript 3 a început la sfârșitul anului 2012. Pe măsură ce am rezolvat problemele legate de noi și ce au pus sarcini.

Problemă: Probleme cu diverse versiuni ale codului în diferite SWF.
Decizie: Întregul cod de aplicație este compilat într-un fișier SWF, care este încărcat la începutul aplicației.

Problemă: Comunicare bliț.<-> Piton.
Decizie: Mergeți la utilizarea API de acces direct. Acest mecanism vă permite să transmiteți obiecte complexe de date utilizând serializarea / meserializarea automată a acestora la nivelul C ++. De asemenea, utilizarea acestei abordări crește performanța datorită faptului că referințele la obiectele flash pot fi transmise către Python și fac manipulări peste ele direct în Python, în loc să găsească obiectul dorit în bliț pe calea plină spre el, cu fiecare nevoie de date transmisie.

Problemă: Standardizarea și unificarea codului.
Decizie:am implementat infrastructura de servicii și am identificat seturile de interfețe și clase de bază, implementarea care se adaugă noi funcționalități la proiect.

Problemă: Automatizarea adunării și adăugarea unui nou funcțional la proiect.
Decizie: Pentru asamblare, folosim Maven. Proiectul a fost restructurat și împărțit în subproiecte și subsisteme mai logice. Pentru a automatiza adăugarea unei noi funcționalități, am folosit YAML ca o limbă pentru a descrie interfețele interacțiunii Flash și Python. În baza de date YAML, codul este generat automat și entitățile necesare sunt generate - atât în \u200b\u200bbliț cât și în Python. Tot ce rămâne de făcut este să scrie cod și să determine punctul de intrare pentru a începe o nouă funcționalitate.

Deci, în septembrie 2013, cu o versiune de versiune 8.8, jocul de lobby a fost complet redone pe ActionScript 3.

Asta e astăzi. Detalii privind structura proiectului și a planurilor viitoare citite în următorul articol.

Aceasta este probabil una dintre cele mai mari categorii de moduri pentru WOT. Dacă descărcați acest mod, puteți schimba complet interfața jocului, precum și adăugați un număr mare de caracteristici utile. Mai jos prezentăm modificările principale, care sunt incluse în această categorie.
- Arbore de dezvoltare. Este posibil să schimbați complet arborele orizontal standard la noul vertical, care este mai compact.
- Modă care schimbă diferite obiecte în hangarul tău. Mesaje color, mai multe variante ale designului de culori ale interfeței, două rânduri de vehicule blindate în loc de una, precum și un afiș complet nou al caruselului de rezervor.
- Marcatori de atac. Trebuie remarcat faptul că marcajul standard de atac este, dar este invizibil și folosind moduri pe care le puteți mări uneori vizibilitatea.
- moduri diferite care adaugă un zoom mărit. Un astfel de mod vă va ajuta să explorați întregul card sau să vedeți unde inamicul care stă în spatele clădirii și-a întors pistolul.
- În plus, în plus față de mods de modă, în categoria propusă veți putea găsi multe alte moduri. Adăugați la lumea interfeței Rezervoarele utile funcţional.

Actualizat pentru patch World. De rezervoare 1.0.1 wot.

Toți cei care sunt obosiți de interfața standard și într-adevăr doresc să o schimbe, ar trebui să utilizați modificarea interfață albastră elegantă Jocuri pentru lumea rezervoarelor. După instalarea acestuia, nu veți mai cunoaște jocul.

Rularea jocului, veți avea o fereastră de boot complet nouă. Are o altă decizie de proiectare și culoare. Mai ales mulți vor dori craniul de argint în mijlocul monitorului. Dar și mai mult hangar vă va surprinde. Combinația de tonuri albastre și negre a fost transformată de hangarul dincolo de recunoaștere.

Elementele clasice ale roșu sunt achiziționate acum Blue Tint.

Tastele de meniu și de interfață sunt dacă se obține marginea albă, ceea ce adaugă o aromă specială. În plus, aplicarea accidentului vascular cerebral formează o creștere a efectului.

Fontul fila are o iluminare violet, care este perfect combinată cu litere portocalii, ceea ce le face mai vizibili.

O altă surpriză vă așteaptă după apariția rezultatelor bătăliei. Toate clasele de tehnologie au propria lor nuanță:

  • Tt - roșu,
  • LT - verde,
  • Pt - albastru,
  • St - galben.

Cisternele care au fost distruse în luptă sunt sărbătorite de craniul de imagine pe oase.

Dacă ați venit cu adevărat jocul și doriți impresii noi, asigurați-vă că instalați această modificare. Vă va oferi o mulțime de emoții pozitive.