Linguaggio: HTML | XAML

Guida introduttiva: Risposta ai movimenti dell'utente con l'accelerometro (C#)

Applies to Windows and Windows Phone

Puoi utilizzare l'accelerometro per rilevare il movimento dell'utente con un'app scritta in C#.

Un'app di gioco semplice usa un solo sensore, l'accelerometro, come dispositivo di input. Questi tipi di app in genere usano solo uno o due assi per l'input, ma possono usare anche l'evento shake come altra origine di input.

Roadmap: che relazione c'è tra questo argomento e gli altri? Vedi: Roadmap per app di Windows Runtime scritte in C# o Visual Basic.

Obiettivo: Dopo aver completato questa guida introduttiva, sarai in grado di usare l'accelerometro per rispondere ai movimenti dell'utente.

Prerequisiti

È necessaria una conoscenza di XAML, Visual C# ed eventi.

Il dispositivo o l'emulatore che stai usando deve supportare un accelerometro.

Tempo per il completamento: 20 minuti.

Istruzioni

1. Aprire Microsoft Visual Studio

Apri un'istanza di Microsoft Visual Studio.

2. Creare un nuovo progetto

Crea un nuovo progetto scegliendo un'Applicazione vuota dai tipi di progetto App di Visual C#/Windows Store.

3. Sostituire il codice C#

Apri il file MainPage.xaml.cs del progetto e sostituisci il codice esistente con il codice seguente.


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;

// Required to support the core dispatcher and the accelerometer

using Windows.UI.Core;
using Windows.Devices.Sensors;

namespace App1
{

    public sealed partial class MainPage : Page
    {
        // Sensor and dispatcher variables
        private Accelerometer _accelerometer;

        // This event handler writes the current accelerometer reading to 
        // the three acceleration text blocks on the app's main page.

        private async void ReadingChanged(object sender, AccelerometerReadingChangedEventArgs e)
        {
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                AccelerometerReading reading = e.Reading;
                txtXAxis.Text = String.Format("{0,5:0.00}", reading.AccelerationX);
                txtYAxis.Text = String.Format("{0,5:0.00}", reading.AccelerationY);
                txtZAxis.Text = String.Format("{0,5:0.00}", reading.AccelerationZ);

            });
        }

        public MainPage()
        {
            this.InitializeComponent();
            _accelerometer = Accelerometer.GetDefault();

            if (_accelerometer != null)
            {
                // Establish the report interval
                uint minReportInterval = _accelerometer.MinimumReportInterval;
                uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
                _accelerometer.ReportInterval = reportInterval;

                // Assign an event handler for the reading-changed event
                _accelerometer.ReadingChanged += new TypedEventHandler<Accelerometer, AccelerometerReadingChangedEventArgs>(ReadingChanged);
            }
        }
    }
}


Devi rinominare lo spazio dei nomi nel frammento di codice precedente usando il nome assegnato al progetto. Ad esempio, se hai creato un progetto denominato AccelerometerCS, devi sostituire namespace App1 con namespace AccelerometerCS.

4. Sostituire il codice XAML

Apri il file MainPage.xaml e sostituisci i contenuti originali con il codice XML seguente.


<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="25" Margin="8,20,0,0" TextWrapping="Wrap" Text="X-axis:" VerticalAlignment="Top" Width="62" Foreground="#FFEDE6E6"/>
        <TextBlock HorizontalAlignment="Left" Height="27" Margin="8,49,0,0" TextWrapping="Wrap" Text="Y-axis:" VerticalAlignment="Top" Width="62" Foreground="#FFF5F2F2"/>
        <TextBlock HorizontalAlignment="Left" Height="23" Margin="8,80,0,0" TextWrapping="Wrap" Text="Z-axis:" VerticalAlignment="Top" Width="62" Foreground="#FFF6F0F0"/>
        <TextBlock x:Name="txtXAxis" HorizontalAlignment="Left" Height="15" Margin="70,16,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="61" Foreground="#FFF2F2F2"/>
        <TextBlock x:Name="txtYAxis" HorizontalAlignment="Left" Height="15" Margin="70,49,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="53" Foreground="#FFF2EEEE"/>
        <TextBlock x:Name="txtZAxis" HorizontalAlignment="Left" Height="15" Margin="70,80,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="53" Foreground="#FFFFF8F8"/>

    </Grid>
</Page>

Devi sostituire la prima parte del nome della classe del frammento di codice precedente con lo spazio dei nomi della tua app. Ad esempio, se hai creato un progetto denominato AccelerometerCS, devi sostituire x:Class="App1.MainPage" con x:Class="AccelerometerCS.MainPage". Devi anche sostituire xmlns:local="using:App1" con xmlns:local="using:AccelerometerCS".

5. Compilare, distribuire ed eseguire l'app

Premi F5 o seleziona Debug > Avvia debug per compilare, distribuire ed eseguire l'app.

Quando l'app è in esecuzione, puoi modificare i valori dell'accelerometro spostando il dispositivo o usando gli strumenti dell'emulatore.

6. Arrestare l'app

  1. Premi ALT+TAB per passare a Visual Studio.
  2. Premi MAIUSC+F5 o seleziona Debug > Termina debug per arrestare l'app.

Riepilogo

L'esempio riportato sopra dimostra quanto poco codice è necessario scrivere per integrare l'input dell'accelerometro nella tua app.

L'app stabilisce una connessione con l'accelerometro predefinito nel metodo MainPage.


_accelerometer = Accelerometer.GetDefault();

L'app stabilisce l'intervallo di report all'interno del metodo MainPage. Questo codice recupera l'intervallo minimo supportato dal dispositivi e lo confronta con un intervallo richiesto di 16 millisecondi (che si avvicina a una frequenza di aggiornamento di 60 Hz). Se l'intervallo minimo supportato è maggiore dell'intervallo richiesto, il codice imposta il valore sul minimo. In caso contrario, lo imposta sull'intervallo richiesto.


uint minReportInterval = _accelerometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
_accelerometer.ReportInterval = reportInterval;

I nuovi dati dell'accelerometro vengono acquisiti nel metodo ReadingChanged. Ogni volta che il driver del sensore riceve i nuovi dati dal sensore, passa i valori all'app usando questo gestore eventi. L'app registra il gestore eventi nella riga seguente.


_accelerometer.ReadingChanged += new TypedEventHandler<Accelerometer, 
AccelerometerReadingChangedEventArgs>(ReadingChanged);

I nuovi valori vengono scritti nei TextBlock inclusi nel codice XAML del progetto.


<TextBlock x:Name="txtXAxis" HorizontalAlignment="Left" Height="15" Margin="70,16,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="61" Foreground="#FFF2F2F2"/>
 <TextBlock x:Name="txtYAxis" HorizontalAlignment="Left" Height="15" Margin="70,49,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="53" Foreground="#FFF2EEEE"/>
 <TextBlock x:Name="txtZAxis" HorizontalAlignment="Left" Height="15" Margin="70,80,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="53" Foreground="#FFFFF8F8"/>


Argomenti correlati

Accelerometer class
Esempio di sensore di accelerazione
Roadmap for creating apps using C#, C++, or VB

 

 

Mostra:
© 2014 Microsoft