Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Aprenda a usar el girómetro para detectar cambios en el movimiento del usuario.
Las APIs importantes
Prerrequisitos
Debes estar familiarizado con el lenguaje de marcado extensible de aplicaciones (XAML), Microsoft Visual C# y eventos.
El dispositivo o emulador que está usando debe admitir un girómetro.
Creación de una aplicación de girómetro simple
Los girómetros complementan los acelerómetros como controladores de juego. El acelerómetro puede medir el movimiento lineal mientras que el girómetro mide la velocidad angular o el movimiento rotacional.
Instrucciones
Creando un nuevo proyecto, elija la aplicación vacía (Windows universal) de las plantillas de proyecto de Visual C#.
Abra el archivo MainPage.xaml.cs del proyecto y reemplace el código existente por lo siguiente.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.UI.Core; // Required to access the core dispatcher object
using Windows.Devices.Sensors; // Required to access the sensor platform and the gyrometer
namespace App1
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page
{
private Gyrometer _gyrometer; // Our app' s gyrometer object
// This event handler writes the current gyrometer reading to
// the three textblocks on the app' s main page.
private async void ReadingChanged(object sender, GyrometerReadingChangedEventArgs e)
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
GyrometerReading reading = e.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);
});
}
public MainPage()
{
this.InitializeComponent();
_gyrometer = Gyrometer.GetDefault(); // Get the default gyrometer sensor object
if (_gyrometer != null)
{
// Establish the report interval for all scenarios
uint minReportInterval = _gyrometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
_gyrometer.ReportInterval = reportInterval;
// Assign an event handler for the gyrometer reading-changed event
_gyrometer.ReadingChanged += new TypedEventHandler<Gyrometer, GyrometerReadingChangedEventArgs>(ReadingChanged);
}
}
}
}
Deberá cambiar el nombre del espacio de nombres en el fragmento de código anterior con el nombre que asignó al proyecto. Por ejemplo, si creas un proyecto denominado GyrometerCS, reemplaces namespace App1
por namespace GyrometerCS
.
- Abra el archivo MainPage.xaml y reemplace el contenido original por el siguiente XML.
<Page
x:Class="App1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App1"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid x:Name="LayoutRoot" Background="#FF0C0C0C">
<TextBlock HorizontalAlignment="Left" Height="23" Margin="8,8,0,0" TextWrapping="Wrap" Text="X-Axis:" VerticalAlignment="Top" Width="46" Foreground="#FFFDFDFD"/>
<TextBlock x:Name="txtXAxis" HorizontalAlignment="Left" Height="23" Margin="67,8,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="88" Foreground="#FFFDFAFA"/>
<TextBlock HorizontalAlignment="Left" Height="20" Margin="8,52,0,0" TextWrapping="Wrap" Text="Y Axis:" VerticalAlignment="Top" Width="46" Foreground="White"/>
<TextBlock x:Name="txtYAxis" HorizontalAlignment="Left" Height="24" Margin="54,48,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="80" Foreground="#FFFBFBFB"/>
<TextBlock HorizontalAlignment="Left" Height="21" Margin="8,93,0,0" TextWrapping="Wrap" Text="Z Axis:" VerticalAlignment="Top" Width="46" Foreground="#FFFEFBFB"/>
<TextBlock x:Name="txtZAxis" HorizontalAlignment="Left" Height="21" Margin="54,93,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="63" Foreground="#FFF8F3F3"/>
</Grid>
</Page>
Deberá reemplazar la primera parte del nombre de clase en el fragmento de código anterior por el espacio de nombres de la aplicación. Por ejemplo, si creas un proyecto denominado GyrometerCS, reemplaces x:Class="App1.MainPage"
por x:Class="GyrometerCS.MainPage"
. También debe reemplazar xmlns:local="using:App1"
por xmlns:local="using:GyrometerCS"
.
- Presione F5 o seleccione Depurar>Iniciar depuración para compilar, implementar y ejecutar la aplicación.
Una vez que se ejecuta la aplicación, puedes cambiar los valores del girómetro moviendo el dispositivo o usando las herramientas del emulador.
- Detenga la aplicación volviendo a Visual Studio y presionando Mayús+F5 o seleccione Depurar >>>>> Detener depuración para detener la aplicación.
Explicación
En el ejemplo anterior se muestra la poca cantidad de código que tendrá que escribir para integrar la entrada del girómetro en la aplicación.
La aplicación establece una conexión con el girómetro predeterminado en el método de
_gyrometer = Gyrometer.GetDefault(); // Get the default gyrometer sensor object
La aplicación establece el intervalo del informe dentro del método MainPage. Este código recupera el intervalo mínimo admitido por el dispositivo y lo compara con un intervalo solicitado de 16 milisegundos (que aproxima una frecuencia de actualización de 60 Hz). Si el intervalo mínimo admitido es mayor que el intervalo solicitado, el código establece el valor en el mínimo. De lo contrario, establece el valor en el intervalo solicitado.
uint minReportInterval = _gyrometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
_gyrometer.ReportInterval = reportInterval;
Los nuevos datos del girómetro se capturan en el método ReadingChanged. Cada vez que el controlador del sensor recibe nuevos datos del sensor, pasa los valores a la aplicación mediante este controlador de eventos. La aplicación registra este controlador de eventos en la línea siguiente.
_gyrometer.ReadingChanged += new TypedEventHandler<Gyrometer,
GyrometerReadingChangedEventArgs>(ReadingChanged);
Estos nuevos valores se escriben en los TextBlocks que se encuentran en el XAML del proyecto.
<TextBlock HorizontalAlignment="Left" Height="23" Margin="8,8,0,0" TextWrapping="Wrap" Text="X-Axis:" VerticalAlignment="Top" Width="46" Foreground="#FFFDFDFD"/>
<TextBlock x:Name="txtXAxis" HorizontalAlignment="Left" Height="23" Margin="67,8,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="88" Foreground="#FFFDFAFA"/>
<TextBlock HorizontalAlignment="Left" Height="20" Margin="8,52,0,0" TextWrapping="Wrap" Text="Y Axis:" VerticalAlignment="Top" Width="46" Foreground="White"/>
<TextBlock x:Name="txtYAxis" HorizontalAlignment="Left" Height="24" Margin="54,48,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="80" Foreground="#FFFBFBFB"/>
<TextBlock HorizontalAlignment="Left" Height="21" Margin="8,93,0,0" TextWrapping="Wrap" Text="Z Axis:" VerticalAlignment="Top" Width="46" Foreground="#FFFEFBFB"/>
<TextBlock x:Name="txtZAxis" HorizontalAlignment="Left" Height="21" Margin="54,93,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="63" Foreground="#FFF8F3F3"/>