私は XNA を学ぼうとしてきました。本にアクセスすることはできませんが、MSDN とチュートリアルに頼って道を案内してきました。今では、スプライトを描画し、その位置を変更し、Intersect を使用できるようになりました。 Windows Phone 7 および 8 の電話用の基本的な加速度計を取得しようとしています。
私はいくつかのブロックとボールを持っています。そして、電話を上下左右に傾けるだけでボールを動かしたり (または転がしたり) できるようにしたいと考えています。
以下に示すように、緑色の点はボールが移動できる領域を表しています。濃い灰色のブロックは、ボールがそれらに触れると跳ね返る単なる境界ですが (後で、この部分についてはまだ心配していません)。
私の質問は、どうすればボールが傾きの動きに正しく反応するようになるかということです。
私が持っている非常に基本的な傾きの動きを試してみるために:
protected override void Initialize()
{
// TODO: Add your initialization logic here
Accelerometer accelerometer = new Accelerometer();
accelerometer.CurrentValueChanged += accelerometer_CurrentValueChanged;
accelerometer.Start();
base.Initialize();
}
void accelerometer_CurrentValueChanged(object sender, SensorReadingEventArgs<AccelerometerReading> e)
{
this.squarePosition.X = (float)e.SensorReading.Acceleration.Z * GraphicsDevice.Viewport.Width + GraphicsDevice.Viewport.Width / 2.0f;
if (Window.CurrentOrientation == DisplayOrientation.LandscapeLeft)
{
this.squarePosition.X = +(float)e.SensorReading.Acceleration.X * GraphicsDevice.Viewport.Width + GraphicsDevice.Viewport.Width / 2;
}
else
{
this.squarePosition.X = (float)e.SensorReading.Acceleration.X * GraphicsDevice.Viewport.Width + GraphicsDevice.Viewport.Width / 2;
}
}
しかし、それは絶対に衝撃的です。オブジェクトが発作か何かを起こしているかのように常に飛び回っているように、非常にぎくしゃくしています。これが正しい方法であるかどうかさえわかりません。