如何确定WindowsPhone7在XNA游戏中的定位?

如何确定WindowsPhone7在XNA游戏中的定位?,xna,windows-phone-7,Xna,Windows Phone 7,类似于,但正在寻找一个在XNA游戏环境下有效的答案 如何确定设备是横向还是纵向?一般问题中给出的答案取决于PhoneApplicationPage中内置的功能。顺便说一句,您通常不会在WindowsPhone7上的XNA游戏环境中使用该类。来自Nick Gravelyn: 加速度计不再在XNA框架中。您可以通过以下步骤访问它: 添加对Microsoft.Devices.Sensors.dll的引用 添加“使用Microsoft.Devices.Sensors;”使用你的语句 连接事件并开始读取加

类似于,但正在寻找一个在XNA游戏环境下有效的答案


如何确定设备是横向还是纵向?一般问题中给出的答案取决于PhoneApplicationPage中内置的功能。顺便说一句,您通常不会在WindowsPhone7上的XNA游戏环境中使用该类。

来自Nick Gravelyn: 加速度计不再在XNA框架中。您可以通过以下步骤访问它:

  • 添加对Microsoft.Devices.Sensors.dll的引用
  • 添加“使用Microsoft.Devices.Sensors;”使用你的语句
  • 连接事件并开始读取加速计:
  • 试试这个:

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

    void Default_ReadingChanged(object sender, AccelerometerReadingAsyncEventArgs e)  
    {  
    }
    

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

    以下是Shawn Hargreaves博客上的一篇文章

    如果要在手机旋转时自动切换横向和纵向方向:

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

    在LandscapeLeft和LandscapeRight之间的切换可以自动处理,无需游戏的特殊帮助,因此默认情况下处于启用状态。但是在横向和纵向之间切换会改变backbuffer的尺寸(短而宽,高而薄),这很可能需要您调整屏幕布局。并不是所有的游戏都能处理这个问题(有些设计只有单向的),所以只有那些通过设置SupportedOrientations明确选择加入的游戏才能在横向和纵向之间进行动态切换。

    这似乎改变了这一点。为了连接到“读数已更改”,您必须创建一个加速计,然后启动它。所需代码可在MSDN上找到

    它看起来像这样:

    #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
    
    #如果WINDOWS\u手机
    加速度计;
    尝试
    {
    加速计=新加速计();
    Accelerator.ReadingChanged+=新事件处理程序(a_ReadingChanged);
    加速度计。开始();
    }
    锁扣(加速计失效异常e)
    {
    }
    ...
    }
    无效a_读数已更改(对象发送器、加速计修订目标e)
    {
    //Windows 7电话仿真器不支持此功能
    抛出新的NotImplementedException();
    }
    #恩迪夫
    
    考虑到基于加速度计的iPhone游戏的数量,取消XNA的支持似乎是一个奇怪的选择。这是因为他们也需要在silverlight应用程序中公开它,所以他们不能让它依赖于XNA应用程序