Kezdőlap > .NET, Windows Phone 7 > Gyorsulásmérő használata

Gyorsulásmérő használata

2012. március 23. péntek Hozzászólás Go to comments

A Windows Phone 7-es készülékkel lekérdezhetjük, hogy milyen irányba hat a gyorsulás a telefonunkra (X, Y, Z koordináták mentén). Mint minden szenzor esetén, itt is fontos megvizsgálnunk, hogy a készülék tartalmazza-e az adott szenzort. Ezt az Accelerometer IsSupported statikus tulajdonság lekérdezésével tehetjük meg.

A következő feladatban egy olyan alkalmazást fogunk elkészíteni, amely egy labdát fog megjeleníteni a kijelzőn. A labda úgy és olyan gyorsan fog mozogni, mint amennyire a felhasználó a készüléket dönti.

1. Készítsünk egy új Windows Phone 7 alkalmazást!

2. A Layoutroot grid-et töröljük ki, és helyezzünk el a felhasználói felületre egy canvas-t! A Canvas-be rajzoljunk egy ellipszist (100 x 100 px), ennek adjunk egy színt (mi most RadialGradientBrusht adtunk meg):

<Canvas >

    <Ellipse Canvas.Left="66" Canvas.Top="100" Height="100" Name="ball" Stroke="Black" StrokeThickness="1" Width="100">

        <Ellipse.Fill>

            <RadialGradientBrush>

                <GradientStop Color="#FFB6BAA5" Offset="0" />

                <GradientStop Color="Red" Offset="1" />

            </RadialGradientBrush>

        </Ellipse.Fill>

    </Ellipse>

</Canvas>

3. Ezt követően a referenciákhoz adjuk hozzá a Microsoft.Devices.Sensors-t, és a Microsoft.XNA.Framework assembly-t! Solution Explorer-ben klikkeljünk jobb egérgombbal, és a References-en a megjelenő helyi menüből válasszuk ki a Microsoft.Devices.Sensors-t,valamint a Microsoft.XNA.Framework assembly-t, és kattintsunk az OK gombra!

4. Oldjuk fel a Microsoft.Devices.Sensor, és a Microsoft.XNA.Framework névtereket:

using Microsoft.Devices.Sensors;

using Microsoft.Xna.Framework;

5. A konstruktor előtt hozzunk létre egy Accelometer-t, a példányosítást majd csak a konstruktorban hozzuk létre!

Accelerometer acMeter = null;

6. A konstruktorban ellenőrizzük, hogy valóban van-e ilyen szenzor, és ha van, akkor példányosítsuk ezt az osztályt, és iratkozzunk fel a CurrentValueChanged eseményére, hogy értesüljünk a „gyorsulással” kapcsolatos változásokról! A Start metódus meghívása után észleljük a változásokat.

public MainPage()

{

    InitializeComponent();

    if (Accelerometer.IsSupported)

    {

        acMeter = new Accelerometer();

        acMeter.CurrentValueChanged += new EventHandler<SensorReadingEventArgs<AccelerometerReading>>(acMeter_CurrentValueChanged);

        acMeter.Start();

    }

    else

    {

MessageBox.Show("A készülékben nincs gyorsulásmérő a készülékben!");

    }

}

7. Természetesen meg kell írnunk a CurrentValueChanged esemény törzsét is. Először lekérdezzük a labda jelenlegi pozícióját, majd a szenzor által meghatározott adatokat beszorozzuk 10-zel (gyorsítunk rajta). Ezt követően van egy egyszerű (ám nem teljesen pontos) ellenőrzési pont, ahol ellenőrizzük, hogy a labda ne hagyja el a kijelzőt, végül megadjuk a labda új pozícióját. Ehhez a Dispatcher.BeginInvoke-ot használtuk, ugyanis a gyorsulásmérő eseménye egy háttérszálon fut. Ahhoz, hogy hozzáférjünk a felhasználói felülethez ebből a szálból, kell a Dispatcher.

void acMeter_CurrentValueChanged(object sender, SensorReadingEventArgs<AccelerometerReading> e)

{

    Dispatcher.BeginInvoke(() =>

    {

        double newLeft = (double)ball.GetValue(Canvas.LeftProperty) + e.SensorReading.Acceleration.X * 10;

        double newTop = (double)ball.GetValue(Canvas.TopProperty) + e.SensorReading.Acceleration.Z * 10;

        if (newLeft < 0) newLeft = 0;

        else if (newLeft > 400) newLeft = 400;

        if (newTop < 0) newTop = 0;

        else if (newTop > 700) newTop = 700;

 

        ball.SetValue(Canvas.LeftProperty, newLeft);

        ball.SetValue(Canvas.TopProperty, newTop);

    });

}

8. Indítsuk el az alkalmazást, és próbáljuk ki működés közben! A Windows Phone 7.1 SDK-tól emulátorban is kipróbálható, de ha szenzort használunk, akkor minden esetben próbáljuk ki egy fizikai készüléken is!

Az eredmény képekben:

image

Kategóriák:.NET, Windows Phone 7 Címke: , ,
  1. Még nincs hozzászólás.
  1. No trackbacks yet.

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s

%d blogger ezt kedveli: