2010-03-18 104 views

回答

3

上下文从尼克Gravelyn内的类: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) 
{ 
} 
  • 添加事件处理程序本身:
  • 像这样:

    void Default_ReadingChanged(object sender, AccelerometerReadingAsyncEventArgs e) 
    { 
    } 
    

    你很好走。但请记住,加速度计不适用于仿真器,所以如果没有设备,就无法真正测试。您确实需要try/catch,因为Start会在模拟器中抛出异常,因为它不支持加速度计。

    +1

    鉴于基于加速计的iPhone游戏的数量,从XNA除去支持似乎是一个奇怪的选择。 – 2010-03-19 22:58:51

    +0

    这是因为他们需要公开它的Silverlight应用程序,所以他们不能依赖于XNA应用程序 – 2010-03-23 00:03:09

    0

    这里的肖恩哈格里夫斯博客的一篇文章

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

    如果你想既横向和纵向之间自动切换的手机旋转:LandscapeLeft之间

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

    交换和LandscapeRight可以在没有游戏特别帮助的情况下自动处理,因此默认情况下处于启用状态。但在横向和纵向之间切换会改变后缓冲器的尺寸(短而宽与高与低),这很可能会要求您调整屏幕布局。并非所有游戏都能够处理此问题(并且某些设计只能在一种方式上有意义),因此只有通过设置SupportedOrientations来显式选择加入的游戏才能在风景和肖像之间进行动态切换。

    1

    这看起来已经改变了。为了勾住'阅读改变'你必须创建一个加速度计,然后启动它。所需的代码可以在MSDN上找到。 Retrieving Accelerometer Input (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