如同 这个问题, ,但正在寻找适用于 XNA 游戏的答案。

如何确定设备是横向还是纵向?一般问题中给出的答案依赖于 PhoneApplicationPage 中内置的功能。AFAIK,您通常不会在 Windows Phone 7 上的 XNA 游戏上下文中使用该类。

有帮助吗?

解决方案

来自尼克·格拉维林: http://forums.xna.com/forums/p/49684/298915.aspx#298915加速计不再包含在 XNA 框架中。您可以通过以下步骤访问它:

  1. 添加对 Microsoft.Devices.Sensors.dll 的引用
  2. 添加“使用microsoft.devices.sensors;”对您的使用语句。
  3. 连接一个事件并开始读取加速度计:

尝试这个:

try  
{  
    AccelerometerSensor.Default.ReadingChanged += Default_ReadingChanged;  
    AccelerometerSensor.Default.Start();  
}  
catch (AccelerometerStartFailedException)  
{  
}
  1. 添加事件处理程序本身:

像这样:

void Default_ReadingChanged(object sender, AccelerometerReadingAsyncEventArgs e)  
{  
}

你就可以走了。但请记住,加速度计不能与模拟器一起使用,因此没有设备就无法真正对其进行测试。您确实需要 try/catch,因为 Start 会在模拟器中引发异常,因为它不支持加速度计。

其他提示

此改变了它似乎。为了挂接到“读书改变了”你必须创建一个加速度计,然后再启动它。所需的代码可以在MSDN上找到。 检索加速度输入(Windows手机)

它看起来是这样的:

#if WINDOWS_PHONE
    Accelerometer accelerometer;
    try
    {
        accelerometer = new Accelerometer();
        accelerometer.ReadingChanged += new EventHandler<AccelerometerReadingEventArgs>(a_ReadingChanged);
        accelerometer.Start();
    }
    catch (AccelerometerFailedException e)
    {
    }
    ...
}

void a_ReadingChanged(object sender, AccelerometerReadingEventArgs e)
{
    //this function is not supported by the window 7 phone emulator
    throw new NotImplementedException();
}
#endif

这是来自 Shawn Hargreaves 博客的帖子

http://blogs.msdn.com/b/shawnhar/archive/2010/07/12/orientation-and-rotation-on-windows-phone.aspx?utm_source=twitterfeed&utm_medium=twitter

如果您想在旋转手机时自动在横向和纵向之间切换:

graphics.SupportedOrientations = DisplayOrientation.Portrait | 
                                 DisplayOrientation.LandscapeLeft | 
                                 DisplayOrientation.LandscapeRight;

LandscapeLeft 和 LandscapeRight 之间的切换可以自动处理,无需游戏的特殊帮助,因此默认启用。但是横向和纵向之间的切换会改变后缓冲区尺寸(短和宽与宽)。高而薄),这很可能需要您调整屏幕布局。并非所有游戏都能够处理这一问题(有些设计仅在一种方式下有意义),因此只有通过设置 SupportedOrientations 明确选择加入的游戏才能启用横向和纵向之间的动态切换。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top