我一直在努力學習XNA,雖然我無法獲取書籍,但我一直依靠MSDN和教程來指導我一路走來,現在我可以繪製小精靈並改變它們的位置並使用Intersect和I我現在正在嘗試爲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;
}
}
但它絕對震撼。這是非常緊張的,就像對象不停地跳起來就像它有一個扣押或什麼東西,我甚至不確定這是否是正確的方式去做這件事。
我從來沒有寫過加速度計的代碼,所以我無法爲你提供很多幫助。不過,有些東西正在困擾着我:afaik,加速度計檢測速度變化。因此,每當加速度計值發生變化時,您都不應該更新位置:您應該在XNA'Update'方法中根據加速度計的最新值更改位置。這樣,如果你傾斜手機然後停止移動,球將繼續平穩移動。或者您可以使用陀螺儀:http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh202943(v=vs.105).aspx –
此外,您正在分配到'squarePosition.X '從加速度計Z軸讀取的值,然後用從X軸讀取的值覆蓋它。我認爲這兩個任務中的一個應該是用於'squarePosition.Y'的 –