【发布时间】:2013-06-27 01:17:19
【问题描述】:
我一直在尝试学习 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;
}
}
但这绝对令人震惊。非常紧张,就像,物体不断地跳来跳去,好像它正在癫痫发作什么的,我什至不确定这是不是正确的处理方式。
【问题讨论】:
-
我从来没有为加速度计写过代码,所以我帮不了你太多。不过,有些事情困扰着我:afaik,加速度计检测到速度的变化。因此,您不应在每次加速度计值更改时更新位置:您应该在 XNA
Update方法中根据加速度计的最新值更改位置。这样,如果您倾斜手机然后停止移动,球将继续以平稳的运动移动。或者你可以使用陀螺仪:msdn.microsoft.com/en-us/library/windowsphone/develop/… -
另外,您正在为
squarePosition.X分配一个从加速度计的 Z 轴读取的值,然后用从 X 轴读取的值覆盖它。我认为这两个任务之一应该是为squarePosition.Y而不是
标签: c# .net xna windows-phone accelerometer