Notatka
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.
Dowiedz się, jak wykrywać zmiany w ruchu użytkownika za pomocą gyrometru.
Żyroskopy uzupełniają akcelerometry w kontrolerach do gier. Akcelerometr może mierzyć ruch liniowy, podczas gdy żyrometr mierzy prędkość kątową lub ruch obrotowy.
- Important APIs:Windows.Devices.Sensors, Gyrometer
Note
Ten artykuł koncentruje się na kodzie, który pokazuje, jak używać cyrometru. Aby zapoznać się z omówieniem czujnika gyrometru, zobacz Czujniki: Gyrometer.
Prerequisites
Należy zapoznać się z czujnikiem gyrometru i jego zastosowaniami. Zobacz Czujniki: Gyrometer.
Urządzenie, którego używasz, musi obsługiwać żyroskop.
Przykładowy kod
using Microsoft.UI.Dispatching;
using Microsoft.UI.Xaml.Controls;
using Windows.Devices.Sensors;
namespace DevicesDemo.Pages
{
public sealed partial class GyrometerPage : Page
{
private Gyrometer? gyrometer;
public GyrometerPage()
{
InitializeComponent();
// Get the default gyrometer sensor object.
gyrometer = Gyrometer.GetDefault();
if (gyrometer != null)
{
// Establish the report interval.
uint minReportInterval = gyrometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
gyrometer.ReportInterval = reportInterval;
// Assign an event handler for the reading-changed event.
gyrometer.ReadingChanged += Gyrometer_ReadingChanged;
}
else
{
statusBar.Message = "No gyrometer was found.";
statusBar.Severity = InfoBarSeverity.Error;
statusBar.IsOpen = true;
}
}
// This event handler writes the current gyrometer reading to
// the three axis text blocks on the XAML page.
private void Gyrometer_ReadingChanged(Gyrometer sender, GyrometerReadingChangedEventArgs args)
{
DispatcherQueue?.TryEnqueue(DispatcherQueuePriority.Normal, () =>
{
GyrometerReading reading = args.Reading;
txtXAxis.Text = String.Format("{0,5:0.00}", reading.AngularVelocityX);
txtYAxis.Text = String.Format("{0,5:0.00}", reading.AngularVelocityY);
txtZAxis.Text = String.Format("{0,5:0.00}", reading.AngularVelocityZ);
});
}
}
}
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid Margin="24">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="44"/>
<RowDefinition Height="44"/>
<RowDefinition Height="44"/>
</Grid.RowDefinitions>
<TextBlock Text="X-axis:" Style="{StaticResource LabelTextBlockStyle}"/>
<TextBlock x:Name="txtXAxis" Grid.Column="1" Text="---"/>
<TextBlock Grid.Row="1" Text="Y-axis:" Style="{StaticResource LabelTextBlockStyle}"/>
<TextBlock x:Name="txtYAxis" Grid.Column="1" Grid.Row="1" Text="---"/>
<TextBlock Grid.Row="2" Text="Z-axis:" Style="{StaticResource LabelTextBlockStyle}"/>
<TextBlock x:Name="txtZAxis" Grid.Column="1" Grid.Row="2" Text="---"/>
</Grid>
<InfoBar x:Name="statusBar" Grid.Row="1"/>
</Grid>
Po uruchomieniu aplikacji można zmienić wartości żyrometru, przenosząc urządzenie.
W poprzednim przykładzie pokazano niezbędny kod, który należy napisać, aby zintegrować dane wejściowe gyrometer z aplikacją.
Nawiązywanie połączenia z czujnikiem
Wywołaj metodę GetDefault, aby nawiązać połączenie z domyślnym żyroskopem.
private Gyrometer? gyrometer;
// ...
gyrometer = Gyrometer.GetDefault();
Możesz również wywołać FromIdAsync, aby utworzyć obiekt Gyrometer na podstawie wartości DeviceInformation.Id. Aby uzyskać więcej informacji, zobacz Enumerate devices (Wyliczanie urządzeń).
Jeśli nie zostanie wykryty czujnik gyrometer, komunikat o stanie zostanie zaktualizowany w celu poinformowania użytkownika.
Ustawianie interwału raportu
Aplikacja ustanawia interwał raportu w metodzie MainPage. Ten kod pobiera minimalny interwał obsługiwany przez urządzenie i porównuje go z żądanym interwałem wynoszącym 16 milisekund (w przybliżeniu szybkością odświeżania 60-Hz). Jeśli minimalny obsługiwany interwał jest większy niż żądany interwał, kod ustawia wartość na minimalną. W przeciwnym razie ustawia wartość na żądany interwał.
uint minReportInterval = gyrometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
gyrometer.ReportInterval = reportInterval;
Odczytywanie danych z czujnika
Nowe dane gyrometru są przechwytywane w programie obsługi zdarzeń ReadingChanged . Za każdym razem, gdy sterownik czujnika odbiera nowe dane z czujnika, przekazuje wartości do aplikacji przy użyciu tego zdarzenia. W tym przykładzie te nowe wartości są zapisywane w blokach tekstowych znajdujących się w języku XAML odpowiedniej strony.
gyrometer.ReadingChanged += Gyrometer_ReadingChanged;
// ...
private void Gyrometer_ReadingChanged(Gyrometer sender, GyrometerReadingChangedEventArgs args)
{
DispatcherQueue?.TryEnqueue(DispatcherQueuePriority.Normal, () =>
{
GyrometerReading reading = args.Reading;
txtXAxis.Text = String.Format("{0,5:0.00}", reading.AngularVelocityX);
txtYAxis.Text = String.Format("{0,5:0.00}", reading.AngularVelocityY);
txtZAxis.Text = String.Format("{0,5:0.00}", reading.AngularVelocityZ);
});
}