Pregled razvojne platforme za Windows Phone 7- I dio


Članak objavljen na www.itpro.ba Januara 2011. god.

sl1Već smo najavili izlazak Windows Phone 7 novog microsoftovog operativnog sistema za mobilne telefone, koji bi, kako se priča, u oktobru ove godine trebao biti objavljen. Prije svega, Windows Phone 7 se drastično razlikuje od svog prethodnika Windows Mobile 6.5, kako po tehnologiji tako i platformi. Mjenjajući platformu te prelazak na Silverlight i DirectX (XNA), Microsoft nastavlja popularizaciju svoje uspješne strategije koju je počeo razvijati zadnjih nekoliko godina, te svakako želi sto više dati primat deklarativnom načinu razvoja grafičkih iskustava preko svoje XAML tehologije sa tradicionalno dobrim razvojnim alatima Visual Studio 2010 i Expression Blend 4. S druge strane, Microsoft ima za cilj da tehnologiju na kojoj se razvijaju aplikacije unificira i smanji vrijeme učenja i adaptaciju programera, što je definitivno ostvario zadnjim izlascima Visual Studio 2010 i Expression Bland 4, odnosno pojavom WPF, Silverlight te nadolazećeg Windows Phone 7. Danas razvijati aplikacije za Windows Phone 7 nije ništa drugo do razvijati aplikacije u Silverlightu, što za jednu novu platformu poput WP7 je zaista fenomen. Developeri koji su već razvijali aplikacije za Silverlight nemoraju savladavati novu logiku ni arhitekturu, niti učiti nove dizajnerske komponente u Visual Studiu i Expression Blendu, dovoljno je da se upoznaju sa Windows Phone 7 i uputama za razvoj korisničkih iskustava i odmah mogu početi razvoj aplikacija. Zvuči naivno ali i istinito.

Hardwarsko i Softwarska arhitekture Windows Phone 7 uređaja

Prije samog pregleda razvojne platforme pogledajmo, koje hardwerske komponente će vrtiti Windows Phone 7. Svaki ekran telefona imaće 480×800 QVGA ili 320×480 HVGA rezoluciju, sa multitouchom većem od 4 kontaktne tačke. Senzori koji će biti ugrađeni imaće A-GPS, Accelometar, Kompas te flash. Kamera će imati najmanje 5 megapiksela, te tačno 3 hardwarska dugmeta Start, Search i Back. Grafika mora posjedovati DirectX 9 akcelerator, te 256 RAM-a i najmanje 8GB flash memorije. Jedna od najzanimljivijih stvari svakog mobilnog telefona sa Windsows Phone 7 je to da procesor mora biti najmanje ARMv7 Cordex/Scorpion sa 1Gz takta. Zaista se može štošta vrtiti na ovakvoj impresivnoj mašini. Samo 10-tak godina ranije ovakva desktop mašina prestavljala je pravu zvijek na tržištu.

sl2

Kada govorimo o softverskoj arhitekturi Windows Phone 7 uređaja onda prvenstveno moramo govoriti o nekoliko slojeva koji tu athitekturu čine. Gledajući odozdo prema gore vidimo da arhitekturu čine podrška za hardver u obliku raznih drivera, servisa, podrška za mreže, sigurnost, a koje zajedničkim imenom zovemo Kernel. Iznad tog sloja dolazi: Aplikacijski i UI Model, te Cloud integracija. Aplikacijski model obezbjeđuje načine instalacije, pokretanja, te sistem licenciranja i nadogradnje softvera. Dok UI model čini sistem upravljanja sesijama aplikacije, te navigacije među stranicama, preko navigaciskog sistema implementiranog u operativni sistem. Treći i nemanje važan model predstavlja Cloud integracija, kojim se obezbjeđuje povezivanje na razne microsoftove servise: Live, XboxLive i druge, te povezivanje na servise društvenih mreža, lokacijske GPS servise i sl.

Iznad svih navedenih modela nalazi se Aplikacijski runtime zasnovan na mogućnosti iskorištavanja svih resursa, servisa i modela uređaja, a razvijen je na .NET – CLR tehnologiji i posjeduje aplikacijski framework za razvoj kastomiziranih aplikacija.

sl3

Aplikacijaki framework za WP7 može razvijati dvije vrste aplikacija i to:

  1. XNA applikacije – predstavljaju moderne 2D i 3D video igre koje se mogu vrtiti i na Xbox 360, Windows 7 i Zune uređajima.
  2. Silverlight aplikacije – predstavljaju XAML aplikacije bazirane na Silverlight 3 tehnlogiji.

WP7 XNA Aplikacije

sl4

Današnje tršište video igrama zauzima značajno mjesto u ukupnom IT tržištu te stoga je vrlo važno omogućiti razvoj ovih vrsta aplikacija na nadolazećoj platformi. Upravo it tog razloga Microsoft proširuje svoj XNA razvojni framework i na Windows Phone 7. XNA predstavlja enkapsulaciju tehnoloških detalja niskog nivoa u razvoju video igara i koncentrira developera na to kako video igru učinite zabavnijom od toga na koji način implementirati pojedine detalje. Ovim je Microsoft udario temelje unifikaciji razvoja video igara na svojim platformama Xbox 360, Windows i Windows Phone 7.

XNA Framework je dio .NET Frameworka, a čine ga skup alata i biblioteka za brzi razvoj video igara na Windows, Xbox 360 i WP7 platformi. Integrirana razvoijna platforma za XNA objedinjena je kao XNA Game Studio do sada razvijena sa 3 verzije. Naredni XNA Game Studio 4.0 podržavaće razvoj video igara i na WP7 platformi, sadržavaće pojednostavljeni grafički API, nove konfiguracijske efekte, te poboljšani audio efekti. Međutim, još uvijek nema podrške za ostale .NET programske jezike osim C#, što jedin dijlom ograničava ovu platformu. Kako nova verzija Game Studio 4.0 dolazi integrirana u Visual Studio 2010, tako će se i kompletan razvoj video igara moći razvijati na ovom moćnom developerskom alatu.

Osnovni koncepti razvoja XNA video igre

sl5

U cilju pojednostavljenja API-a, te integracije sa Visual Studio 2010, razvoj video igara za ove 3 platforme pojednostavljen je i definisan specifičnim fazama razvoja. Početak razvoja XNA video igre sa Game Studio započinje definisanjem početnog projekta koji je šabloniziran već viđenim Visual Studio šablonima.

U ovoj fazi na raspolaganju nam je 8 predefinisanih šablona s kojim dobijamo početne postavke za razvoj. Pored dosadašnjih šablona za Xbox 360, naredna verzija XNA Game Studio 4.0 sadržavaće i šablone za Windows Phone 7 i to Windows Phone Game i Windows Phone Game Library. Drugi šablon predstavlja projekat koji može dijeliti komponente sa više Windows Phone Game projekata.

U koliko smo odabrali prvi šablon dizajner visual studia formira C# klasu izvedenu iz Game klase, implementirane u XNA biblioteci, što predstavlja prvi korak u implementaciji XNA video igre. Osim implementacije izvedene klase, dizajner je formirao dva projekta unutar Visual Studia. Prvi projekat sadrži Windows Phone 7 implementaciju video igre, dok drugi projekat posjeduje dijeljene resurse (datoteke) koji se koriste u razvoju igre, a mogu se iskorištavati i na drugim platformama: Xbox 360, Windows 7 i Zune.

U drugoj fazi razvoja igre definiše se i pridružuje sadržaj za buduću video igru. Ova faza sastoji se u dodavanju grafičkih, audio i video datoteka. Resursi (datoteke) se dodaju na standardan način, onako kako se to radi u Visual Studiu 2010. Kao što je rečeno, dodavanje sadržaja radi se u posebnom projektu, da bi mogli iste datoteke dijeliti sa druigm platformama, osim Windows Phone 7.

Treća faza razvoja je logička implementacija, koja je je podjeljena u nekoliko globalnih metode preko kojih se implementira cjelokupni proces video igre. Stoga je važno kazati da svaka video igra razvijana sa Game Studio prolazi faze Inicijalizacije, Učitavanja resursa i sadržaja igre preko metode LoadContent.

sl6

Kada se u memoriju učitaju resursi i sadržaj igre preko metoda za iscrtavanje Draw i osvježavanje Update implementirana je dinamika igre. Nakon završetka resursi se oslobađaju iz memorije i završava rad.

XNA Demo za Windows Phone 7

Na vrlo jednostavnom demo primjeru pokazaćemo, kako se implementiraju osnovne komponente XNA video igre. Za ovaj demo potrebno je posjedovati Visual Studio 2010, te Windows Phone 7 Developer Tool Beta, koji se može skinuti sa ovog linka.

sl8

Nakon što pokrenimo Visual Studio 2010, te formiramo novi Windows Phone Game 4.0 Projekat kojeg ćemo nazvati XNASimpleDemo, dizajner nam formira dva solucijska projekta i to: projekat video igre, te Game Content projekat koji sadrži neophone datoteka za video igru, a čine ga razne video, audio, te grafičke datoteke. Ovakva arhitektura obezbjeđuje jednostavan način razvoja iste igre i na drugim platformama Xbox 360 ili Windows 7.

Novoformirani projekat pored ostalog sadrži implementaciju klase Game1 izvedenu iz Microsoft.Xna.Framework.Game. U klasi Game1, dizajner je već formirao nekoliko pomoćni varijabli poput GraphicsDeviceManager varijabla koja upravlja hardwerskim uređajem, te SpriteBatch –pomoćna varijabla za iscrtavanje tekstura direktno na ekran.

Pored postojeći deklarišimo varijablu tipa Texture2D – varijabla koja će sadržavati bitmapu, te varijablu tipa Vector2- vektor s kojim će biti definisan položaj bitmape na ekranu. Nakon što smo deklarisali varijable za upravljanje grafičkom datotekom, sada je potrebno istu učitati u projekat. Desnim klikom na XNASimpleDemoContent izaberimo opciju Add Existing Item, te učitajmo u projekat grafičku datoteku koju želimo prikazati. Kada je datoteka učitana u projekat, potrebno je implementirati metodu LoadContent na način da prvo učitamo datoteku i onda je pozicioniramo u centar ekrana našeg telefona. Iz implemetacije se vidi da se datoteke učitavaju po njihovim asset imenima, upravo zbog portabilnosti sa drugim platformama. Sljedeći listing prikazuje učitavanje datoteke i pozicioniranje na ekranu.

protected override void LoadContent()

{

// Create a new SpriteBatch, which can be used to draw textures.

spriteBatch = new SpriteBatch(GraphicsDevice);

imageTexture = Content.Load("logo");

Viewport viewport = graphics.GraphicsDevice.Viewport;

imageVector = new Vector2((viewport.Width-imageTexture.Width)/2,

(viewport.Height-imageTexture.Height)/2);

}

Nakon definisanja početne pozicije teksture, sada je moguće implementirati logikuvideo igre sa Update i Draw metodama. Implementacija Update metode sastoji se u tome da ažurira poziciju teksture očitavajući tekuću poziciju prsta ili kusora telefona što je prikazano u narednom listingu.

protected override void Update(GameTime gameTime)

{

// Allows the game to exit

if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)

this.Exit();

TouchCollection touchCollection = TouchPanel.GetState();

if (touchCollection.Count > 0)

{

TouchLocation tl = touchCollection[0];

double x = tl.Position.X - (imageVector.X + (imageTexture.Width / 2));

double y = tl.Position.Y - (imageVector.Y + (imageTexture.Height / 2));

double speed = Math.Sqrt(x*x+y*y)/10;

double angle = (float)Math.Atan2(y,x);

imageVector.X += (float)(speed * Math.Cos(angle));

imageVector.Y += (float)(speed * Math.Sin(angle));

}

base.Update(gameTime);

}

Dok Draw metoda iscrtava teksturu na ekranu telefona definisanu pozicijom, brzinom, i uglom. Na taj način dobijamo fade efekat pri pomjeranju teksture.

protected override void Draw(GameTime gameTime)

{

GraphicsDevice.Clear(Color.CornflowerBlue);

spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);

spriteBatch.Draw(imageTexture,imageVector,Color.White);

spriteBatch.End();

base.Draw(gameTime);

}

Ako pokrenemo aplikaciju, i ako šetamo mišem (u koliko se radi o emulatoru) ili prsto (u koliko se radi o uređaju) po ekranu, vidimo da se naša tektura kreće za njim. Na ovaj način implementirali smo jednostavnu XNA video igru. Izvorni kod za ovaj demo može se skinuti sa ovog linka.

sl9

Na internetu se već može vidjeti nekoliko igara koje se vrte na WP7, na kojima možemo osjetiti draž igranja na mobilnom uređaju, koji ipak čini se ne predstavlja ni hardwerom ni ergonomijom idealni igraći uređaj. Međutim, WP7 će zasigurno promijeniti ovaj ustaljeni stav.

About Bahrudin Hrnjica

PhD in Mechanical Engineering, Microsoft MVP for .NET. Likes .NET, Math, Mechanical Engineering, Evolutionary Algorithms, Blogging.

Posted on 20/02/2011, in .NET and tagged , , , . Bookmark the permalink. 1 Comment.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s