Cocos2dx之重力传感器

简介: Cocos2dx之重力传感器

Android.mk申请权限

<uses-permission android:name="android.permission.SENSOR_INFO" />  
<uses-permission android:name="android.permission.SENSOR_ENABLE" />
<activity android:screenOrientation="landscape" ></activity>
复制代码

android:screenOrientation

标题
landscape 横向
portrait 纵向
sensor 根据物理传感器确定方向
sensorLandscape 横向方向,但根据设备传感器,可以是正常或反向的横向方向。API 9 中的新增配置。

网络异常,图片无法展示
|

传感器类型

传感器 作用
TYPE_ACCELEROMETER 加速度传感器
TYPE_MAGNETIC_FIELD 磁场传感器

横竖屏切换

在游戏的主activity中编写一个静态方法(继承Cocos2dxActivity)

public static void changedActivityOrientation(int orientation){  
//activity.getRequestedOrientation()
   switch(orientation)  
   {  
       case 1://横屏  
           instance.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
       break;  
       case 2://竖屏  
          instance.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
       break;  
   }  
}
复制代码
  • Cocos2dxAccelerometer.java
public Cocos2dxAccelerometer(final Context context) {
    this.mContext = context;
    // 获取传感器
    this.mSensorManager = (SensorManager) this.mContext.getSystemService(Context.SENSOR_SERVICE);
    this.mAccelerometer = this.mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    this.mCompass = this.mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
    final Display display = ((WindowManager) this.mContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
    this.mNaturalOrientation = display.getOrientation();
}
public void enableCompass() {
    this.mSensorManager.registerListener(this, this.mCompass, SensorManager.SENSOR_DELAY_GAME);
}
 @Override
public void onSensorChanged(final SensorEvent sensorEvent) {
    // 参数重载,调到jin绑定的c++层
    Cocos2dxGLSurfaceView.queueAccelerometer(x,y,z,sensorEvent.timestamp);
 }
public static native void onSensorChanged(final float x, final float y, final float z, final long timestamp);
复制代码
  • Cocos2dxHelper.java
public static void enableAccelerometer() {
    Cocos2dxHelper.sAccelerometerEnabled = true;
    Cocos2dxHelper.sCocos2dxAccelerometer.enableAccel();
}
public static void enableCompass() {
    Cocos2dxHelper.sCompassEnabled = true;
    Cocos2dxHelper.sCocos2dxAccelerometer.enableCompass();
}
复制代码
  • CCDevice-Android.cpp
// 启用传感器
void Device::setAccelerometerEnabled(bool isEnabled)
{
    if (isEnabled)
    {
        JniHelper::callStaticVoidMethod(helperClassName, "enableAccelerometer");
    }
    else
    {
        JniHelper::callStaticVoidMethod(helperClassName, "disableAccelerometer");
    }
}
复制代码
  • Java_org_cocos2dx_lib_Cocos2dxAccelerometer.cpp
extern "C" {
    JNIEXPORT void JNICALL Java_org_cocos2dx_lib_Cocos2dxAccelerometer_onSensorChanged(JNIEnv*  env, jobject thiz, jfloat x, jfloat y, jfloat z, jlong timeStamp) {
        Acceleration a;
        a.x = -((double)x / TG3_GRAVITY_EARTH);
        a.y = -((double)y / TG3_GRAVITY_EARTH);
        a.z = -((double)z / TG3_GRAVITY_EARTH);
        a.timestamp = (double)timeStamp / 1e9;
        EventAcceleration event(a);
        Director::getInstance()->getEventDispatcher()->dispatchEvent(&event);
    }    
}
复制代码


目录
相关文章
|
6月前
|
传感器 数据挖掘
如何利用STM32F103实现太阳板的光线追踪
通过上述的硬件组装和软件编程,我们可以有效地实现一个基于STM32F103的太阳板光线追踪系统。此系统不仅可以提高太阳能板的能源效率,而且具有较低的成本和易于实现的优点,非常适合在个人项目或小型企业中应用。
45 1
|
6月前
|
算法 图形学
【实现100个unity特效之3】使用PerlinNoise(柏林噪声)实现平滑的灯光闪烁效果
【实现100个unity特效之3】使用PerlinNoise(柏林噪声)实现平滑的灯光闪烁效果
117 0
|
C语言
圆曾经的小车梦,造一台智能小车(四)之QT上位机控制小车
圆曾经的小车梦,造一台智能小车(四)之QT上位机控制小车
262 0
|
传感器 算法 物联网
5_3_2_陀螺仪小球_硬件讲解|学习笔记
快速学习5_3_2_陀螺仪小球_硬件讲解。
157 0
5_3_2_陀螺仪小球_硬件讲解|学习笔记
|
传感器 物联网 API
陀螺仪小球_软件详解|学习笔记
快速学习陀螺仪小球_软件详解。
200 0
陀螺仪小球_软件详解|学习笔记
|
传感器 PHP iOS开发
iOS传感器开发——加速度传感器,螺旋仪传感器,磁力传感器的应用(一)
iOS传感器开发——加速度传感器,螺旋仪传感器,磁力传感器的应用
242 0
iOS传感器开发——加速度传感器,螺旋仪传感器,磁力传感器的应用(一)
|
传感器 算法 前端开发
HaaS EDU场景式应用学习 - 陀螺仪小球
HaaS EDU场景式应用学习 - 陀螺仪小球
Qt irrlicht(鬼火)3D引擎 摄像机旋转问题
点击打开链接Irrlicht中的摄像有一个函数 setUpVector()
214 0
|
传感器 算法 iOS开发
iOS传感器开发——加速度传感器,螺旋仪传感器,磁力传感器的应用(二)
iOS传感器开发——加速度传感器,螺旋仪传感器,磁力传感器的应用
426 0
|
传感器 iOS开发
iOS传感器开发——距离传感器的应用
iOS传感器开发——距离传感器的应用
196 0

热门文章

最新文章