C# Windows Phone加速计的困难

C# Windows Phone加速计的困难,c#,windows-phone-7,windows-phone-8,xna,C#,Windows Phone 7,Windows Phone 8,Xna,我想在Windows Phone游戏中使用加速计移动球。但当我倾斜Windows Phone设备时,球移动不正确 例如,如果我将设备向左倾斜,球不会向左移动,相反,球移动非常奇怪。我不知道我可以在我的代码中修改什么以使球正确移动 如果我倾斜Windows Phone设备,我应该更改什么以使球正确移动 更新: 我更改了密码,但球没有朝正确的方向移动。 您可以在此处下载我的项目: 公共类游戏1:Microsoft.Xna.Framework.Game { 图形管理器图形; SpriteBatch S

我想在Windows Phone游戏中使用加速计移动球。但当我倾斜Windows Phone设备时,球移动不正确

例如,如果我将设备向左倾斜,球不会向左移动,相反,球移动非常奇怪。我不知道我可以在我的代码中修改什么以使球正确移动

如果我倾斜Windows Phone设备,我应该更改什么以使球正确移动

更新: 我更改了密码,但球没有朝正确的方向移动。 您可以在此处下载我的项目:

公共类游戏1:Microsoft.Xna.Framework.Game
{
图形管理器图形;
SpriteBatch SpriteBatch;
运动;
纹理2d球;
向量2 BallPos=新向量2(400300);
Vector3 accelReading=新Vector3();
矢量3速度=新矢量3();
无效运动\u CurrentValueChanged(对象发送器、传感器读取事件参数e)
{
更新(如传感器读数);
}
私有void UpdateUI(动态读取)
{
accelReading.X=e.DeviceAcceleration.X;
accelReading.Y=e.DeviceAcceleration.Y;
accelReading.Z=e.DeviceAcceleration.Z;
accelering.Normalize();
Vector3 currentAccelerometerState=加速度读数;
如果(currentAccelerometerState.X!=0)
速度+=新矢量3(currentAccelerometerState.X,0,0);
如果(currentAccelerometerState.Z!=0)
速度+=新矢量3(0,0,-当前加速度计状态Z);
如果(速度.长度()>2)
{
speed.Normalize();
速度*=2;
}
BallPos.X+=速度.X;
球位置Y+=速度Y;
}
公共游戏1()
{
graphics=新的GraphicsDeviceManager(此);
Content.RootDirectory=“Content”;
targetExpressedTime=时间跨度(333);
InactiveSleepTime=时间跨度(从秒开始)(1);
graphics.IsFullScreen=true;
}
受保护的覆盖无效初始化()
{
如果(动议获得支持)
{
运动=新运动();
motion.TimeBetweenUpdates=TimeSpan.Fromms(20);
motion.CurrentValueChanged+=新事件处理程序(motion\u CurrentValueChanged);
运动。开始();
}
base.Initialize();
}
受保护的覆盖void LoadContent()
{
spriteBatch=新spriteBatch(图形设备);
Ball=内容。加载(“ballbig”);
}
受保护覆盖无效更新(游戏时间游戏时间)
{
更新(游戏时间);
}
受保护覆盖无效绘制(游戏时间游戏时间)
{
图形设备。清晰(颜色:矢车菊蓝);
spriteBatch.Begin();
spriteBatch.Draw(球、球位置、空、颜色、白色、旋转、新矢量2(球宽度/2、球高度/2)、1f、SpriteBeffects.None、1);
spriteBatch.End();
基础。抽签(游戏时间);
}
}

我在Windows8上玩了一个非常类似的游戏,我使用这样的方法来处理加速度计。我希望你能找到对你有帮助的东西

private Accelerometer _accelerometer;

public void Initialize()
{
    if (_accelerometer != null)
    {
        _accelerometer = Accelerometer.GetDefault();
        _accelerometer.ReadingChanged += _accelerometer_ReadingChanged;
    }
}

private void _accelerometer_ReadingChanged(Accelerometer sender, AccelerometerReadingChangedEventArgs args)
{
    AccelerometerReading reading = _accelerometer.GetCurrentReading();
    Vector3 stateValue = new Vector3();
    stateValue.Y = -1;
    stateValue.X = (float)reading.AccelerationX;
    stateValue.Z = (float)reading.AccelerationY;
    stateValue.Normalize();

    Vector3 currentAccelerometerState = stateValue;
    Vector3 Rotation = Vector3.Zero;
    if (currentAccelerometerState.X != 0)
        marble.speed += new Vector3(currentAccelerometerState.X, 0, 0);
    if (currentAccelerometerState.Z != 0)
        marble.speed += new Vector3(0, 0, -currentAccelerometerState.Z);

    if (marble.speed.Length() > 10)
    {
        marble.speed.Normalize();
        marble.speed *= 10;
    }
}

它不起作用了。球的移动仍然非常奇怪。你说的非常奇怪是什么意思?我更新了代码。球没有朝正确的方向移动。你的速度有两个维度,加速计3,尝试它们的每一个组合。你说的组合是什么意思?我应该换什么?我在做2D游戏,不是3D游戏。
private Accelerometer _accelerometer;

public void Initialize()
{
    if (_accelerometer != null)
    {
        _accelerometer = Accelerometer.GetDefault();
        _accelerometer.ReadingChanged += _accelerometer_ReadingChanged;
    }
}

private void _accelerometer_ReadingChanged(Accelerometer sender, AccelerometerReadingChangedEventArgs args)
{
    AccelerometerReading reading = _accelerometer.GetCurrentReading();
    Vector3 stateValue = new Vector3();
    stateValue.Y = -1;
    stateValue.X = (float)reading.AccelerationX;
    stateValue.Z = (float)reading.AccelerationY;
    stateValue.Normalize();

    Vector3 currentAccelerometerState = stateValue;
    Vector3 Rotation = Vector3.Zero;
    if (currentAccelerometerState.X != 0)
        marble.speed += new Vector3(currentAccelerometerState.X, 0, 0);
    if (currentAccelerometerState.Z != 0)
        marble.speed += new Vector3(0, 0, -currentAccelerometerState.Z);

    if (marble.speed.Length() > 10)
    {
        marble.speed.Normalize();
        marble.speed *= 10;
    }
}