各位好,
我在开发板上移植了Android系统,已成功运行。然后,我下了两个重力感应的滚珠游戏,其中一个可以正常玩,另一个重力感应的方向偏转了90度。在串口跟踪游戏运行的Log,发现两个游戏接受GSensor数据的接口都一样,不知如何从Android框架层修改使两个游戏都能正常运行?有碰到类似情况的童鞋么,你们是咋处理滴啊?

解决方案 »

  1.   

    我在开发板上移植了Android系统,已成功运行。然后,我下了两个重力感应的滚珠游戏,其中一个可以正常玩,另一个重力感应的方向偏转了90度。在串口跟踪游戏运行的Log,发现两个游戏接受GSensor数据的接口都一样:frameworks/base/core/java/android/hardware/SensorManager.java中的onSensorChangedLocked方法,在这个方法里面通过参数传入获取到GSensor的值,然后映射到屏幕上(通过mapSensorDataToWindow方法)。
    现在的问题是,两个游戏都通过这个接口来获取sensor的数据,都通过同一个映射方法将获取的数据映射到屏幕上显示,一个游戏能正常运行,另一个游戏始终偏转了90度。我想从Android框架层上修改相应的方法,以使得这个两个游戏,以至其他所有下载的重力游戏都能正常运行,该如何修改呢?
    (由于不知游戏的源码,所以无从更改游戏的源码。可否从框架层上获取到游戏的相关显示属性,然后根据屏幕的坐标进行调整?)
      

  2.   

    应该是app本身的实现问题吧。
      

  3.   

    在 onSensorChangedLocked 函数里 要对两种情况进行判断
    ((stype == sensor.TYPE_ACCELEROMETER)||(stype == sensor.TYPE_GRAVITY))
    来取不同的数据:
                     v[0] = values[1];
                     v[1] = -values[0];
                     v[2] = values[2];

                     v[0] = values[0];
                     v[1] = values[1];
                     v[2] = values[2];
    你看下这个函数应该就明白了!
      

  4.   

    可以在setting中做一个选项来勾选是否选择不同方向,怎样自动去判断就不知道了