Z przeglądarki na telefon? Proste!

W ostatnim czasie Microsoft uraczył programistów .NET kilkoma podobnymi technologiami. WPF, Silverlight, Silverlight for Windows Phone czy najnowsze aplikacje Metro w Windows 8. Wszystkie wymienione technologie łączy XAML z pewnymi tylko różnicami wynikającymi ze specyfiki poszczególnych platform.

Skoro mamy pewien punkt wspólny pomiędzy technologiami, dlaczego by nie spróbować przenieść już napisany program na inną platformę? Oczywiście nie zawsze to ma sens. Menedżer plików napisany w WPF jest nie do zaimplementowania w „przeglądarkowym” Silverlight, a program do przechowywania kontaktów telefonicznych z funkcją wysyłania smsów i wybierania numerów nie powinien się znaleźć poza telefonem. Niemniej jednak są przypadki, w których portowanie aplikacji jest uzasadnione.

W tym wpisie opiszę moje spostrzeżenia na przykładzie portowania gry 7Letters z Silverlight w przeglądarce na telefon z Windows Phone. Zajmę się również przeniesieniem aplikacji na Windows 8, ale o tym innym razem.

Ogólny zarys problemu

7 Letters jest prostą lokalizowaną grą słowną. Cały input sprowadza się do klikania myszką na literki (można pisać na klawiaturze, ale to jest do pominięcia), który można zastąpić zdarzeniem Tap na ekranie dotykowym. Słownik wyrazów pobierany jest każdorazowo z serwera (w zależności od wybranego języka), także tę kwestię na telefonie trzeba rozwiązać inaczej. Nikt nie chce przecież narażać użytkownika na wysokie koszty, a i sam dostęp do Internetu nie jest sprawą oczywistą. Całe szczęście mamy do dyspozycji nieograniczony Isolated Storage, choć nie wolno z tym przesadzać…

Program nie był pisany z myślą o portowaniu na jakąkolwiek platformę. Dodatkowym utrudnieniem jest sztywno zapisany w pikselach wymiar widoku.

Kompilacja, błędy, kompilacja, błędy…

Po przekopiowaniu kodów źródłowych do projektu Windows Phone zacząłem kolejno eliminować błędy. Ku mojemu zdziwieniu już po kilku cyklach kompilacja-eliminacja błędów uruchomiłem 7 Letters na telefonie. Oczywiście pozostała kwestia rozmieszczenia elementów na ekranie, ich odpowiednie zeskalowanie, ale nie to jest najważniejsze.

Główne zmiany to:

  • Podmiana bibliotek silverlightowych. Jeżeli używaliśmy np. toolkitu musimy zamienić je na ich mobilne odpowiedniki. Szczególnym zaskoczeniem okazała się zmiana przestrzeni nazw w przypadku użycia triggerów i behaviors z Interactivity Blenda. Silverlight:
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"

Phone:

xmlns:i="clr-namespace:System.Windows.Interactivity;
assembly=System.Windows.Interactivity"
  • WP7 bez właściwości Effect. Windows Phone nie obsługuje nawet tych podstawowych shaderów. Jeżeli DropShadowEffect dotyczył obrazu to sprawa jest prosta: cień powinien znajdować się bezpośrednio na nim. W przypadku tekstu, który miałby podlegać lokalizacji…
  • Jeden MediaElement na „cały system”! W projekcie na przeglądarkę zawarłem kilka tych obiektów, każdy odpowiadał za konkretny dźwięk w grze. W Windows Phone wstawienie kilku ME skutkuje zapamiętaniem ścieżki tylko do ostatniego dźwięku. Jakież było moje zdziwienie gdy przez kilka chwil przysłuchiwałem się pętli dźwięku kliknięć (który w ogóle nie powinien się odtworzyć) zamiast muzyki tła. Powód? Jako ostatnia została załadowana kontrolka ME z dźwiękiem „kliknięcia”. Żeby było ciekawiej, loop był załączony do obiektu muzyki tła. O tym jak odtworzyć więcej niż jeden dźwięk w WP pisałem wcześniej.
  • Nie można zapomnieć o podstawowym i najprostszym do zmiany elemencie. Nasza strona (Page) to już nie jest UserControl, a PhoneApplicationPage.

Jeżeli chodzi o napotkane trudności to niestety należy również wspomnieć o Visual Studio (wersja 2010), który nie najlepiej sobie radzi w określaniu błędów znajdujących się w XAMLu. Ciężko mi zrozumieć dlaczego przy kompilacji dostaję na zmianę komunikat raz o 4 błędach, a później o 28 (24 w XAMLu).

Co dalej?

Poza dostosowaniem widoku do standardów WP7 należy poprawnie zaimplementować obsługę zdarzeń: Launching, Activated itd… No i rzecz najważniejsza. Wymogi Windows Phone Marketplace. Niestety w przypadku jakichkolwiek sensownych aplikacji musimy poświecić trochę czasu i wysiłku, żebyśmy mogli ujrzeć nasze nowe dzieło w internetowym sklepie.

W najbliższym czasie przyjrzę się jak wygląda przeniesienie tej samej gry na najnowsze dziecko Microsoftu czyli Windows 8 i Metro UI.

Share

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Spam protection by WP Captcha-Free