Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
System Windows od dawna obsługuje cyfrowe długopisy, które umożliwiają użytkownikom interakcję z urządzeniami w naturalny, bezpośredni sposób i wyrażanie kreatywności dzięki rozbudowanym środowiskom pisania i rysowania przy użyciu cyfrowego pisma odwłocznego.
W systemie Windows 11 wprowadzono nową funkcję, która sprawia, że cyfrowe środowisko pióra staje się jeszcze bardziej naturalne i atrakcyjne: w przypadku korzystania z pióra obsługującego "haptyczne opinie" użytkownicy mogą rzeczywiście poczuć interakcję pióra w sposób dotykowy z interfejsem użytkownika aplikacji.
Uwaga / Notatka
Podczas odwoływania się do tej nowej funkcji "haptic" jest używany w interfejsach API deweloperów i powiązanej dokumentacji, podczas gdy "tactile" to przyjazna nazwa przedstawiona użytkownikom do ustawiania preferencji opinii w ustawieniach systemu Windows.
Doświadczenia haptyczne obsługiwane w Windows 11 obejmują informację zwrotną odręcznego pisania i informację zwrotną interakcji:
- Symulacje tuszu odręcznego oddają wrażenie użycia różnych rodzajów narzędzi do pisania lub rysowania (takich jak długopis, marker, ołówek, zakreślacz itd.) poprzez ciągłe drgania, gdy pióro jest w kontakcie z ekranem. Domyślnie platforma Windows Ink platformy obsługuje opinie haptyczne dla wszystkich narzędzi do rysowania (w tym temacie opisano sposób udostępniania niestandardowego rozwiązania pisma odręcznego poza rozwiązaniem obsługiwanym przez narzędzie Windows Ink).
- Z drugiej strony, informacje zwrotne dotyczące interakcji są bezpośrednimi reakcjami opartymi na kluczowych działaniach użytkownika, takich jak najechanie kursorem lub kliknięcie przycisku, reagowanie na zakończenie działania lub skierowanie uwagi użytkownika.
Zazwyczaj do pełnej obsługi haptycznej informacji zwrotnej wymagane jest pięć kroków.
- Wykryj dane wejściowe pióra.
- Ustal, czy bieżące pióro i urządzenie obsługują sprzężenie zwrotne haptyczne, a jeśli tak, jakie funkcje sprzężenia zwrotnego haptycznego obsługują.
- Zdecyduj, jaki sygnał haptyczny wysłać.
- Wyślij opinię haptyczną.
- Zatrzymaj haptyczną informację zwrotną
Wykrywanie danych wejściowych pióra
Aby wykrywać i izolować dane wejściowe pióra, należy najpierw zarejestrować się w przypadku zdarzenia PointerEntered, a następnie sprawdzić, czy PointerDeviceType jest piórem .
Poniższy kod pokazuje, jak sprawdzić typ urządzenia wskaźnika w zdarzeniu PointerEntered. W tym przykładzie, jeśli dane wejściowe nie pochodzą z pióra, po prostu zwracamy z programu obsługi zdarzeń. W przeciwnym razie sprawdzamy możliwości pióra i konfigurujemy opinie haptyczne.
private void InputObserver_PointerEntered(object sender, PointerRoutedEventArgs e)
{
...
// If the current Pointer device is not a pen, exit.
if (e.Pointer.PointerDeviceType != PointerDeviceType.Pen)
{
return;
}
...
}
Określ wsparcie dla informacji zwrotnej haptycznej
Nie wszystkie pióra i digitalizatory obsługują haptyczne sprzężenie zwrotne, a pióra, które to robią, nie muszą koniecznie obsługiwać wszystkich funkcji haptycznych opisanych w tym temacie. W związku z tym ważne jest programowe potwierdzenie, które funkcje są obsługiwane przez aktywne pióro.
W kontynuacji poprzedniego przykładu pokazujemy, jak sprawdzić, czy aktywne pióro obsługuje informację zwrotną haptyczną.
Najpierw próbujemy pobrać obiekt PenDevice z bieżącego identyfikatora wskaźnika . Jeśli nie można uzyskać PenDevice, po prostu wrócimy z programu obsługi zdarzeń.
Jeśli uzyskano urządzenie PenDevice, sprawdzamy, czy obsługuje ono właściwość SimpleHapticsController. Jeśli nie, po prostu wrócimy z programu obsługi zdarzeń.
// Attempt to retrieve the PenDevice from the current PointerId.
penDevice = PenDevice.GetFromPointerId(e.Pointer.PointerId);
// If a PenDevice cannot be retrieved based on the PointerId, it does not support
// advanced pen features, such as haptic feedback.
if (penDevice == null)
{
return;
}
// Check to see if the current PenDevice supports haptic feedback by seeing if it
// has a SimpleHapticsController.
hapticsController = penDevice.SimpleHapticsController;
if (hapticsController == null)
{
return;
}
SimpleHapticsController pobrany w poprzednim przykładzie jest używany w kolejnych przykładach do wykonywania zapytań o możliwości haptyczne oraz do wysyłania i zatrzymywania informacji zwrotnej haptycznej.
Uwaga / Notatka
Jeśli tworzysz aplikacje przy użyciu Windows App SDK Preview 1.0, możesz użyć Interop PenDevice (PenDeviceInterop.FromPointerPoint(PointerPoint)) aby uzyskać dostęp do systemu PenDevice.
private void InputObserver_PointerEntered(PointerInputObserver sender, PointerEventArgs args)
{
var penDevice = PenDeviceInterop.PenDeviceFromPointerPoint(args.CurrentPoint);
}
W poniższych sekcjach opisano funkcje sprzężenia zwrotnego, które muszą być obsługiwane przez pióra haptyczne, a także te, które są opcjonalne. Wymagany typ informacji zwrotnej haptycznej może być używany zwykle jako rezerwowy zamiast funkcji opcjonalnej.
Falowanie w technice inkingu
Odręczne kształty falowe są odtwarzane w sposób ciągły, gdy pióro jest w kontakcie z ekranem i próbuje symulować wrażenie różnych narzędzi do pisania lub rysowania.
Funkcja | Opis | Wymagane/opcjonalne |
---|---|---|
Ciągła fala tuszu | Symuluje uczucie pisma odręcznego za pomocą fizycznego pióra punktowego. To jest domyślna opcja rezerwowa, gdy falę pisania tuszem nie jest obsługiwana przez pióro haptyczne. | Wymagane |
Ciągły kształt fali typu Brush | Ciągły sygnał haptyczny, gdy użytkownik wybiera szczotkę jako narzędzie pisma odręcznego. | Opcjonalnie |
Ciągła fala ChiselMarker | Ciągły sygnał haptyczny, gdy użytkownik wybiera znacznik dłutowy/zakreślacz jako narzędzie do pisania. | Opcjonalnie |
GumkaKontynualne kształt fali | Ciągły sygnał haptyczny, kiedy użytkownik wybiera gumkę jako narzędzie do pisania. | Opcjonalnie |
Ciągła fala Galaxy (Dokumentacja i przewodnik implementacji HID odnosi się do tego przebiegu sygnału jako SparkleContinuous) |
Ciągły sygnał haptyczny dla specjalnych narzędzi malarskich, takich jak wielokolorowy pędzel. | Opcjonalnie |
MarkerCiagła fala | Ciągły sygnał haptyczny, gdy użytkownik wybiera znacznik jako narzędzie pisma odręcznego. | Opcjonalnie |
OłówekKontynualne kształt fali | Ciągły sygnał haptyczny, gdy użytkownik wybiera ołówek jako narzędzie pisma odręcznego. | Opcjonalnie |
Kształty fal interakcji
Kształty przebiegów interakcji są zwykle krótkie (wyjątki są podane w poniższej tabeli), bezpośrednie przebiegi zwrotne generowane na żądanie w celu potwierdzenia kluczowych działań, takich jak najechanie wskaźnikiem myszy lub kliknięcie przycisku, reakcja na zakończenie akcji lub przyciągnięcie uwagi użytkownika.
Funkcja | Opis | Wymagane/opcjonalne |
---|---|---|
Kliknij kształt fali | Krótka opinia "kliknij". To domyślne ustawienie zapasowe, stosowane, gdy fala interakcji wybrana przez aplikację nie jest obsługiwana przez haptyczne pióro. | Wymagane |
Kształt fali błędu | Silny sygnał ostrzegający użytkownika, że akcja nie powiodła się lub wystąpił błąd. | Opcjonalnie |
Kształt fali aktywowania | Wskazuje, że użytkownik zaczął najechać kursorem na interaktywny element interfejsu użytkownika. | Opcjonalnie |
Naciśnij wykres fali | Wskazuje, kiedy użytkownik naciska interaktywny element interfejsu użytkownika w akcji przyrostowej (zobacz Wydanie). | Opcjonalnie |
Kształt fali wydania | Wskazuje, kiedy użytkownik zwalnia interakcyjny element interfejsu użytkownika w akcji przyrostowej (zobacz Press). | Opcjonalnie |
Przebieg sukcesu | Silny sygnał ostrzegający użytkownika o pomyślnym zakończeniu akcji. | Opcjonalnie |
BuzzContinuous przebieg falowy | Ciągłe uczucie brzęczenia. | Opcjonalnie |
Ciągła forma falowa Rumble | Ciągłe dudnienie. | Opcjonalnie |
Dostosowywanie informacji zwrotnych haptycznych
Niektóre pióra haptyczne mogą obsługiwać następujące dostosowania.
Funkcja | Opis | Wymagane/opcjonalne |
---|---|---|
Intensywność | Ustawia intensywność sygnału haptycznego. | Opcjonalnie |
Liczba odtwarzania | Powtarza sygnał haptyczny określoną liczbę razy. | Opcjonalnie |
Interwał wstrzymywania odtwarzania | Ustawia czas między poszczególnymi powtórzeniami odtwarzania sygnału haptycznego. | Opcjonalnie |
Czas trwania odtwarzania | Ustawia interwał czasu, przez który jest odtwarzany sygnał haptyczny. | Opcjonalnie |
Sprawdź obsługę ustawień niestandardowych
Aby sprawdzić intensywność, liczbę odtwarzania, interwał wstrzymania odtwarzania i obsługę czasu trwania odtwarzania, użyj następujących właściwości SimpleHapticsController:
- CzyObsługiwaneJestNatężenie
- IsPlayCountSupported
- CzyObsługiwanaJestDługośćOdtwarzania
- CzyObsługiwanyJestPrzedziałPauzyOdtworzenia
Wysyłanie i zatrzymywanie informacji zwrotnej haptycznej przy rysowaniu cyfrowym
Użyj metody SendHapticFeedback obiektu SimpleHapticsController, aby przekazać przebiegi fal cyfrowego tuszu do rysika użytkownika. Ta metoda obsługuje przekazywanie albo kształtu falowego, albo kształtu falowego z dostosowaną wartością intensywności (zobacz Dostosowanie informacji zwrotnej dotykowej).
Wywołaj metodę SendHapticFeedback i przekaż kształt fali odręcznej, aby skonfigurować pióro tak, by rozpoczynało odtwarzanie tego kształtu fali natychmiast po dotknięciu końcówką w dowolne miejsce na ekranie. Kształt fali będzie nadal odtwarzany, dopóki długopis nie zostanie uniesiony lub nie zostanie wywołany StopFeedback, w zależności od tego, co nastąpi wcześniej. Zalecamy wykonanie tej czynności w programie obsługi zdarzeń PointerEntered dla elementu, w którym mają być odtwarzane haptyki. Na przykład aplikacja z niestandardową implementacją pisma odręcznego wykonuje to w metodzie PointerEntered kanwy pisma odręcznego.
Aby pobrać żądaną falę atramentową , należy przeprowadzić iterację po kolekcji SupportedFeedback w ramach kontrolera SimpleHapticsController, upewniając się, że jest ona obsługiwana przez aktywne pióro.
Jeśli nie jest obsługiwany, możesz albo nie odtwarzać niczego w ogóle, albo przywrócić do ustawienia InkContinuous kształtu fali, ponieważ jest to gwarantowane.
W poniższym przykładzie próbujemy wysłać BrushContinuous kształt fali (ale wracamy do InkContinuous, jeśli BrushContinuous nie jest obsługiwany).
SimpleHapticsControllerFeedback currentWaveform;
// Attempt to set the currentWaveform to BrushContinuous.
foreach (var waveform in hapticsController.SupportedFeedback)
{
if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.BrushContinuous)
{
currentWaveform = waveform;
}
}
// If currentWaveform is null, it was not in the SupportedFeedback collection, so instead set
// the waveform to InkContinuous.
if (currentWaveform == null)
{
foreach (var waveform in hapticsController.SupportedFeedback)
{
if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.InkContinuous)
{
currentWaveform = waveform;
}
}
}
// Send the currentWaveform
hapticsController.SendHapticFeedback(currentWaveform);
Ważne jest również, aby zatrzymać haptyczne sprzężenie zwrotne, gdy skojarzony wskaźnik opuszcza element, dla którego zarejestrowano haptyczną informację zwrotną. W przeciwnym razie kształt fali będzie nadal próbował grać na aktywnym długopisie.
Uwaga / Notatka
Niektóre długopisy mogą opcjonalnie zatrzymywać się samodzielnie, gdy pióro opuszcza zakres ekranu. Jednak nie jest wymagane, aby wszystkie długopisy to robiły, dlatego aplikacje powinny zawsze jawnie zatrzymywać haptyczne sprzężenie zwrotne zgodnie z opisem w tym miejscu.
Aby zatrzymać haptyczne sprzężenie zwrotne na elemencie, zarejestruj się na zdarzenie PointerExited na tym samym elemencie, na którym zarejestrowano obsługę zdarzenia PointerEntered, który wysłał sygnał haptyczny. Gdy zakończy się obsługa zdarzenia, wywołaj StopFeedback, jak pokazano tutaj.
hapticsController.StopFeedback();
Wysyłanie i zatrzymywanie opinii o interakcji
Wysyłanie opinii dotyczących interakcji jest bardzo podobne do wysyłania opinii dotyczących pisma odręcznego.
Użyj metody SendHapticFeedback obiektu SimpleHapticsController, aby przekazać fale interakcyjne do pióra użytkownika. Ta metoda obsługuje przekazywanie albo kształtu falowego, albo kształtu falowego z dostosowaną wartością intensywności (zobacz Dostosowanie informacji zwrotnej dotykowej).
Wywołaj metodę SendHapticFeedback i przekaż falę odręczną, aby skonfigurować pióro do natychmiastowego odtwarzania tej fali na podstawie interakcji w aplikacji (zamiast gdy końcówka pióra dotyka ekranu do przesyłania informacji zwrotnej dotyczącej pisania).
W przypadku używania dowolnego z nieciągłych kształtów fal interakcji nie jest konieczne wykonanie odpowiedniego wywołania StopFeedback. Nadal musisz wywołać StopFeedback dla ciągłych przebiegów interakcji.
Uwaga / Notatka
Wysyłanie sygnału falowego interakcji podczas odtwarzania sygnału falowego odręcznego pisania tymczasowo przerywa ten drugi. Kształt falowy pisma odręcznego zostanie wznowiony, gdy kształt falowy interakcji zostanie zatrzymany.
Aby pobrać żądany kształt fali interakcji , należy wykonać iterację w elementach kolekcji SupportedFeedback kontrolera SimpleHapticsController, upewniając się, że jest obsługiwany przez aktywne pióro.
Jeśli funkcja nie jest obsługiwana, możesz zdecydować, aby nic nie odtwarzać albo przejść na Kliknij kształt fali, ponieważ to na pewno jest obsługiwane.
W poniższym przykładzie próbujemy wysłać przebieg Error (ale wracamy do 'Kliknij', jeśli Error nie jest obsługiwany).
SimpleHapticsControllerFeedback currentWaveform;
// Attempt to set the currentWaveform to BrushContinuous.
foreach (var waveform in hapticsController.SupportedFeedback)
{
if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.Error)
{
currentWaveform = waveform;
}
}
// If currentWaveform is null, it was not in the SupportedFeedback collection, so instead set
// the waveform to Click.
if (currentWaveform == null)
{
foreach (var waveform in hapticsController.SupportedFeedback)
{
if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.Click)
{
currentWaveform = waveform;
}
}
}
// Send the currentWaveform.
hapticsController.SendHapticFeedback(currentWaveform);
Dostosowywanie informacji zwrotnej haptycznej
Istnieją trzy sposoby dostosowywania opinii haptycznych. Pierwsza z nich jest obsługiwana zarówno przez opinie dotyczące pisma odręcznego, jak i opinie interakcji, natomiast druga i trzecia są obsługiwane tylko przez opinie interakcji.
Dostosuj intensywność sprzężenia zwrotnego względem maksymalnego ustawienia intensywności systemu. W tym celu należy najpierw sprawdzić, czy funkcja SimpleHapticsController obsługuje ustawienie intensywności, a następnie wywołać metodę SendHapticFeedback z żądaną
Intensity
wartością.if (hapticsController.IsIntensitySupported) { foreach (var waveform in hapticsController.SupportedFeedback) { if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.Click) { double intensity = 0.75; hapticsController.SendHapticFeedback(waveform, intensity); } } }
Powtórz sygnał haptyczny określoną liczbę razy. W tym celu należy najpierw sprawdzić, czy funkcja SimpleHapticsController obsługuje ustawienie intensywności, a następnie wywołać metodę SendHapticFeedbackForPlayCount z żądaną wartością licznika. Można również ustawić zarówno intensywność, jak i interwał wstrzymania odtwarzania.
Uwaga / Notatka
Jeśli funkcja SimpleHapticsController nie obsługuje ustawiania intensywności lub interwału wstrzymania odtwarzania, podane wartości zostaną zignorowane.
if (hapticsController.IsPlayCountSupported && hapticsController.IsIntensitySupported && hapticsController.IsReplayPauseIntervalSupported) { foreach (var waveform in hapticsController.SupportedFeedback) { if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.Click) { double intensity = 0.75; int playCount = 3; System.TimeSpan pauseDuration = new System.TimeSpan(1000000); hapticsController.SendHapticFeedbackForPlayCount(currentWaveform, intensity, playCount, pauseDuration); } } }
Ustaw czas trwania sygnału haptycznego. W tym celu należy najpierw sprawdzić, czy SimpleHapticsController obsługuje ustawienie czasu odtwarzania, a następnie wywołać SendHapticFeedbackForDuration z żądaną długością trwania. Można również ustawić intensywność.
Uwaga / Notatka
Jeśli funkcja SimpleHapticsController nie obsługuje ustawiania intensywności, podana wartość zostanie zignorowana.
if (hapticsController.IsPlayDurationSupported && hapticsController.IsIntensitySupported) { foreach (var waveform in hapticsController.SupportedFeedback) { if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.RumbleContinuous) { double intensity = 0.75; System.TimeSpan playDuration = new System.TimeSpan(5000000); hapticsController.SendHapticFeedbackForDuration(currentWaveform, intensity, playDuration); } } }
Przykłady
Zobacz próbkę haptyki pióra dla działających przykładów następującej funkcjonalności:
- Pobierz SimpleHapticsController z danych wejściowych pióra: Przejdź od PointerId do PenDevice, a następnie do SimpleHapticsController (co wymaga zarówno pióra z obsługą haptyki, jak i urządzenia obsługującego pióro).
- Sprawdź możliwości haptyki pióra: SimpleHapticsController uwidacznia właściwości możliwości sprzętu pióra, w tym IsIntensitySupported, IsPlayCountSupported, SupportedFeedbackitd.
- Uruchamianie i zatrzymywanie sprzężenia zwrotnego haptycznego: użyj metod SendHapticFeedback i StopFeedback.
- Wyzwalaj opinię haptyczną: informacja zwrotna dotycząca przesyłania odręcznego oraz interakcji .