2

此问题类似,但正在寻找适用于 XNA 游戏上下文的答案。

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

4

3 回答 3

3

来自 Nick Gravelyn:http ://forums.xna.com/forums/p/49684/298915.aspx#298915 加速度计不再在 XNA 框架中。您可以通过以下步骤访问它:

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

尝试这个:

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

像这样:

void Default_ReadingChanged(object sender, AccelerometerReadingAsyncEventArgs e)  
{  
}

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

于 2010-03-19T22:11:02.280 回答
1

这似乎改变了。为了挂钩“读数改变”,您必须创建一个加速度计,然后启动它。所需的代码可以在 MSDN 上找到。检索加速度计输入 (Windows Phone)

它看起来像这样:

#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
于 2011-02-27T02:54:29.730 回答
0

这是来自 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 明确选择加入的游戏才启用横向和纵向之间的动态切换。

于 2010-07-25T04:37:06.330 回答