İlk olarak, bir XNA projesi oluşturarak başlayalım.
Ardından, hedefleyeceğimiz İşletim Sistemi versionunu seçelim.
Daha sonrada using ifadesi ile ilgili isimalanını (namespace) ekleyelim.
using Microsoft.Devices.Sensors;
Oyunumuz, telefonun duruşuna göre kayarak hareket eden bir kare olsun. Bunun için önce gerekli değişkenleri aşağıdaki gibi tanımlayalım. “kareX” ve “kareY” değişkenleri karemizin yerini, “acceleremetor” değişkeni akselerometre verimizin yer değiştirmeye ne kadar katkıda bulunacağını, “texture” değişkeni kareyi çizmekte kullanacağımız texture dosyasını ve “sensor” değişkeni de akselerometremizi gösterecek.
int kareX;
int kareY;
int acceleremetor;
Texture2D texture;
Accelerometer accelSensor;
int kareY;
int acceleremetor;
Texture2D texture;
Accelerometer accelSensor;
LoadContent metodumuzun içinde bu değişkenlerimizi aşağıdaki gibi initialize edelim.
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
kareX = 400;
kareY = 240;
acceleremetor = 10;
texture = Content.Load("blank");
accelSensor = new Accelerometer();
}
Oyunumuzu oynarken telefonumuzu sürekli döndüreceğimiz için karşılaşacağımız ufak bir sorun var. Normalde, cihazı bir yöne çevirdiğimiz zaman ekran da o şekilde yön değiştirir. {
spriteBatch = new SpriteBatch(GraphicsDevice);
kareX = 400;
kareY = 240;
acceleremetor = 10;
texture = Content.Load("blank");
accelSensor = new Accelerometer();
}
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
graphics.SupportedOrientations = DisplayOrientation.LandscapeRight;
Akselerometremiz 3 boyutlu olduğu için anlık X, Y ve Z verilerini okuyabiliyoruz. Bu veriler bize değerleri -1 ile 1 arasında olan birer float olarak gelecekler.
Aşağıdaki kodu, Load Content metodunun en sonuna ekliyoruz.
try
{
accelSensor.Start();
}
catch (AccelerometerFailedException e)
{
System.Diagnostics.Debug.WriteLine("Accelerometer failed to start.");
}
Akselerometre verilerimizi almadan önce, Draw metodumuzu aşağıdaki gibi yazarak ekrana karemizi çizelim.
try
{
accelSensor.Start();
}
catch (AccelerometerFailedException e)
{
System.Diagnostics.Debug.WriteLine("Accelerometer failed to start.");
}
Akselerometre verilerimizi almadan önce, Draw metodumuzu aşağıdaki gibi yazarak ekrana karemizi çizelim.
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.Draw(texture, new Rectangle(kareX, kareY, 20, 20), Color.Green);
spriteBatch.End();
base.Draw(gameTime);
}
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.Draw(texture, new Rectangle(kareX, kareY, 20, 20), Color.Green);
spriteBatch.End();
base.Draw(gameTime);
}
Geriye Update metodu içerisinde akselerometre verisini alarak karemizin yerini değiştirmek kaldı. Bunu da aşağıdaki şekilde gerçekleştiriyoruz.
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
kareX += (int)(accelSensor.CurrentValue.Acceleration.Y * acceleremetor);
kareY += (int)(accelSensor.CurrentValue.Acceleration.X * acceleremetor);
base.Update(gameTime);
}
Ve sonuç:
Hiç yorum yok:
Yorum Gönder