2014-12-06 10 views
17

Pracuję nad aplikacją wielodotykową wykorzystującą Monogame, w której wielu użytkowników może jednocześnie pracować na większym ekranie z wieloma ekranami z oddzielnymi dokumentami/obrazami/filmami, i zastanawiałem się, czy można wykonywać gesty "w kontekście" , tzn. dwa palce ściskające dokument po jednej stronie ściany nie powinny wpływać na kadrowanie panela po drugiej stronie ściany.Czy można uzyskać gesty "kontekstowe" w Monogame/XNA?

Sposób Monogame pracuje się wszystkie punkty wejściowe są tłumaczone na język gestów, które można odczytać za pomocą:

if (TouchPanel.IsGestureAvailable) 
{ 
    var gesture = TouchPanel.ReadGesture(); 
    // do stuff 
} 

Czy istnieje sposób, aby gesty ograniczone do pewnego punktu na ekranie, czy ja muszę to wdrożyć? Na przykład, patrząc na kod źródłowy, wydaje się, że klasa TouchPanelState wykonuje całą pracę, ale niestety jej konstruktorzy to internal.

+0

Nie wiem i nie miałem doświadczenia z programowaniem XNA lub Monogame, ale dla rekordu wygląda na to, że istnieje klasa statyczna 'TouchPanel', która ma metodę' GetState() '. Może to mogłoby pomóc w utworzeniu instancji 'TouchPanelState', którą chcesz? –

Odpowiedz

2

Ta funkcja nie jest wbudowana w MonoGame, ponieważ nie jest częścią oryginalnego XNA. Zasadniczo potrzebujesz więcej niż jednego "logicznego" panelu TouchPanel zdefiniowanego przez jego pod-prostokąta okna. Jednak TouchPanel jest statyczny, dlatego jest tylko jeden dla całej gry w domyślnym XNA.

Dobrą wiadomością jest to, że MonoGame wykonuje własne rozpoznawanie gestów. Więc kod jest tam, po prostu trzeba wprowadzić pewne zmiany w MonoGame.

Np.
-Usuń TouchPanel klasę niestatyczną, która może być przydzielona z danym podrostem.
-Dodaj niestatyczne wersje wszystkich metod TouchPanel.
- Statyczne metody przekierowują do singleton/instancji TouchPanel, zachowując stary interfejs API.
... teraz możesz opcjonalnie przydzielić więcej TouchPanel (y), które NIE są pełnymi ekranami.

Uwaga: To ci nie pomoże, ale MonoGame pozwala ci mieć więcej niż jedno okno systemu operacyjnego (tylko w oknach, tylko afaik), w którym to przypadku statyczne TouchPanel jest pierwszym oknem i jest oddzielny interfejs API do uzyskiwania dostępu do dotyku wejście/gesty dla dodatkowych okien.