Ostatnio portowałem moją aplikację Relax z Windows Phone do Windows Store. Oryginalna aplikacja została utworzona w XNA, bo chciałem mieć ładne animowane, opadające kształty (tekstury) oraz płynne przejścia tła (wiem, wiem…to samo też można zrobić w Silverlight, ale miałem problemy z wydajnością i obciążeniem procesora). Relaxed (tak się nazywa w Windows Store, bo ktoś mi wcześniej zajumał nazwę „Relax”) to MonoGame + XAML.
W tej wersji aplikacji zdecydowałem się na menu w XAML’u, a część releksacyjna (muzyka + animacje) to XNA. Pomyślałem sobię, że fajnie by było użyć kontrolki SemanticZoom. W trybie ZoomIn (normalny) nic nie ma (nie ma zawartości XAML) więc widać to co rysuje XNA. W trybie ZoomOut (oddalony) pojawiają się kontrolki, gdzie użytkownik wybiera interesujący go temat.
Dlaczego SemanticZoom
SemanticZoom z pudełka załatwia mi dwie ważne rzeczy:
- darmowe menu z gestami – aby wyświetlić menu wystarczy „uszczypnąć” (pinch-zoom) ekran albo CTRL + kółko w myszce. Działa samo bez grama mojego kodu.
- animowane wlatywanie menu – efekt przejścia między ZoomIn i ZoomOut załatwia sama kontrolka
Całość w aplikacji fajnie wyszła, wszystko jest spójne. Nie widać różnicy między elementami renderowanymi przez XAML i XNA.
Domyślnie ZoomOut
SemanticZoom domyślnie wyświetla zawartość przeznaczoną dla stanu ZoomIn. W moim przypadku chodziło o coś innego. Domyślnie ma się pojawić menu, które jest w stanie ZoomOut.
Nie ma z tym problemu. Wystarczy na starcie aplikacji (lub strony) ustawić właściwość:
semanticZoom.IsZoomedInViewActive = false;
albo odpowienio w XAML’u, jak kto woli.
Linki
- wrzuciłem na YouTube nagranie przedstawiające aplikację Relaxed (po pobrania za kilka dni, bo dopiero co ją oddałem do certyfikacji)
- Relax można też pobrać na Windows Phone