我正在构建一个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陀螺仪版加速度计所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)