Android陀螺仪版加速度计

Android陀螺仪版加速度计,第1张

概述我正在构建一个Android游戏,我想弄清楚用户是否向左或向右倾斜设备(类似于当你将人从一侧移到另一侧时TempleRun的工作方式).我已经阅读了很多教程和示例,并且我制作了示例应用程序,但是从陀螺仪加速度计中获取的数据量都是压倒性的.我是否需要两套硬件来确定用户是否倾斜设备

我正在构建一个Android游戏,我想弄清楚用户是否向左或向右倾斜设备(类似于当你将人从一侧移到另一侧时Temple Run的工作方式).

我已经阅读了很多教程和示例,并且我制作了示例应用程序,但是从陀螺仪和加速度计中获取的数据量都是压倒性的.我是否需要两套硬件来确定用户是否倾斜设备以及在哪个方向?

我目前的应用是检测每一个轻微的动作,这显然是不正确的.

public class Main extends Activity {  private SensorManager mSensorManager;  private float mAccel; // acceleration apart from gravity  private float mAccelCurrent; // current acceleration including gravity  private float mAccelLast; // last acceleration including gravity  private relativeLayout background;  private Boolean isleft = true;/** Called when the activity is first created. */@OverrIDepublic voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.main);    this.background = (relativeLayout) findVIEwByID(R.ID.relativeLayout1);    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);    mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_norMAL);    mAccel = 0.00f;    mAccelCurrent = SensorManager.GraviTY_EARTH;    mAccelLast = SensorManager.GraviTY_EARTH;   /* float x1, x2, y1, y2;    String direction;    switch(event.getAction()) {            case(MotionEvent.ACTION_DOWN):                x1 = event.getX();                y1 = event.getY();                break;            case(MotionEvent.ACTION_UP) {                x2 = event.getX();                y2 = event.getY();                float dx = x2-x1;                float dy = y2-y1;                    // Use dx and dy to determine the direction                if(Math.abs(dx) > Math.abs(dy)) {                    if(dx>0) directiion = "right";                    else direction = "left";                } else {                    if(dy>0) direction = "down";                    else direction = "up";                }            }            }*/}private final SensorEventListener mSensorListener = new SensorEventListener() {    public voID onSensorChanged(SensorEvent se) {      float x = se.values[0];      float y = se.values[1];      float z = se.values[2];      if((mAccelLast<mAccelCurrent)&&(isleft == true)){          background.setBackgroundResource(R.drawable.bg_right);          isleft = false;      }      if((mAccelLast>mAccelCurrent)&&(isleft == false)){          background.setBackgroundResource(R.drawable.bg_left);          isleft = true;      }       mAccelLast = mAccelCurrent;      mAccelCurrent = (float) Math.sqrt((double) (x*x + y*y + z*z));      float delta = mAccelCurrent - mAccelLast;      Log.d("FB", "delta : "+delta);      mAccel = mAccel * 0.9f + delta; // perform low-cut filter     // Log.d("FB", "mAccel : "+mAccel);    }

我最好只使用加速度计,只使用陀螺仪还是我需要两者?

解决方法:

这篇文章链接到两者之间的差异:Android accelerometer and gyroscope

http://diydrones.com/profiles/blogs/faq-whats-the-difference

http://answers.oreilly.com/topic/1751-mobile-accelerometers-and-gyroscopes-explained/

该文档也将有所帮助:http://developer.android.com/guide/topics/sensors/sensors_motion.html

根据我非常有限的经验,陀螺仪不断测量x,y,z旋转并不断更新.用于在游戏中驾驶汽车/飞机/角色.加速度计有点像wii-mote,用于摆动或拾取摇动手势.

总结

以上是内存溢出为你收集整理的Android陀螺仪版加速度计全部内容,希望文章能够帮你解决Android陀螺仪版加速度计所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1112979.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存