V prvej verzii SDK pre Windows Phone 7 bolo možné vyvíjať buď Silverlight aplikácie, ktoré využívajú XAML kód pre návrh používateľského prostredia a aplikačný kód pre obsluhu udalostí v jednom z .NET jazykom, alebo hry v XNA Studiu. SDK pre novú verziu “Mango” popri spomínaných možnostiach umožňuje aj kombináciu Silverlight a XNA technológií v jednej aplikácii.
Silverlight aplikáciu (typ projektu Windows Phone Application) budete vytvárať ak potrebujete použiť ovládacie prvky definované v XAML kóde a udalosťami riadený kód aplikačnej logiky, prípadne ak chcete použiť sofistikované prvky na prehrávanie multimédií, hlavne videa, či HTML web browser.
XNA Framework aplikáciu (typ projektu Windows Phone Game ) budete vytvárať, ak potrebujete hru, prípadne inú aplikáciu, ktorá vyžaduje výkonnú 2D alebo 3D grafiku, využívajúcu rendrovanie textúr a animáciu
Kombinovaná Silverlight + XNA Framework aplikácia (projekt typu Windows Phone Silverlight and XNA Application) kombinuje výhody obidvoch spomínaných typov aplikácií, takže tento typ projektu použijete vtedy ak potrebujete aj XAML ovládacie prvky aj výkonnú grafiku. Tieto technológie je možné kombinovať v rámci jednej aplikácie, ale na rôznych stránkach, takže napríklad aplikácia môže mať úvodnú stránku na báze technológie Silverlight a po kliknutí na ovládací prvok sa zobrazí nová stránka s výkonnou XNA grafikou.
Vytvorenie kombinovanej Silverlight + XNA Framework aplikácie si môžete vyskúšať na “prázdnom” projekte typu Windows Phone Silverlight and XNA Application, alebo na šablóne projektu jednoduchej grafickej aplikácie s pohyblivým štvorčekom. Táto šablóna má názov Phone 3D Graphics Application.
Vytvorte nový projekt typu Windows Phone 3D Graphics Application. Táto Silverlight aplikácia môže na niektorých svojich stránkach rendrovať XNA Framework kontext.
Hlavná XAML stránka (MainPage.xaml) obsahuje tlačidlo pre aktiváciu XNA stránky s grafikou (GamePage.xaml)
Táto stránka je prázdna, jej obsah sa generuje pomocou XNA Frameworku, takže v XAML kóde tejto stránky je okrem definovania XML menných priestorov a parametrov stránky len vysvetľujúci komentár
<!–No XAML content as the page is rendered entirely with XNA–>
Grafika je generovaná pomocou kódu (GamePage.xaml.cs). Scéna sa vykresľuje v procedúre
private void OnDraw(object sender, GameTimerEventArgs e)
{
SharedGraphicsDeviceManager.Current.GraphicsDevice.Clear(Color.Black);
spriteBatch.Begin();
spriteBatch.Draw(texture, spritePosition, Color.White);
spriteBatch.End();
}
Pri inicializácii aplikácie je vytvorený časovač a grafické operácie sa vykonávajú v obsluhe udalosti pri každom tiku časovača.
public GamePage()
{
InitializeComponent();
// Get the application’s ContentManager
content = (Application.Current as App).Content;
// Create a timer for this page
timer = new GameTimer();
timer.UpdateInterval = TimeSpan.FromTicks(33333);
timer.Update += OnUpdate;
timer.Draw += OnDraw;
}
…
private void OnUpdate(object sender, GameTimerEventArgs e)
{
UpdateSprite(e);
}