因为需要用到手机摇一摇的功能,所以需要监听加速度变化,并把变化传到上层(LUA)。在CCLayer添加LUA回调函数,在didAccelerate里面调用CCScriptEngineManager,调用LUA注册函数。问题出现,在win32和IOS上运作正常,在android上回调一会就会崩溃,如果不回调LUA HANDLER则

没问题,应该是android的某些问题导致lua内存错误。

解决方法:修改Cocos2dxAccelerometer.java里面的onSensorChanged函数,修改回调C++部分,

@Override
public void onSensorChanged(final SensorEvent pSensorEvent) {
if (pSensorEvent.sensor.getType() != Sensor.TYPE_ACCELEROMETER) {
return;
}

float x = pSensorEvent.values[0];
float y = pSensorEvent.values[1];
final float z = pSensorEvent.values[2];

/*
* Because the axes are not swapped when the device's screen orientation
* changes. So we should swap it here. In tablets such as Motorola Xoom,
* the default orientation is landscape, so should consider this.
*/
final int orientation = this.mContext.getResources().getConfiguration().orientation;

if ((orientation == Configuration.ORIENTATION_LANDSCAPE) && (this.mNaturalOrientation != Surface.ROTATION_0)) {
final float tmp = x;
x = -y;
y = tmp;
} else if ((orientation == Configuration.ORIENTATION_PORTRAIT) && (this.mNaturalOrientation != Surface.ROTATION_0)) {
final float tmp = x;
x = y;
y = -tmp;
}

final float tx = x;
final float ty = y;
Cocos2dxActivity activity = (Cocos2dxActivity)Cocos2dxActivity.singleAcitivy;
activity.runOnGLThread(new Runnable() {
public void run() {
Cocos2dxAccelerometer.onSensorChanged(tx, ty, z, pSensorEvent.timestamp);
}
});

/*
if(BuildConfig.DEBUG) {
Log.d(TAG, "x = " + pSensorEvent.values[0] + " y = " + pSensorEvent.values[1] + " z = " + pSensorEvent.values[2]);
}
*/
}

是andoird多线程调用引起的问题,要传到C++的主线程。

更多相关文章

  1. C语言函数的递归(上)
  2. 为什么我要改用Kotlin
  3. Android驱动程序开发实例精讲-0_Android系统HAL驱动开发经典案例
  4. AsyncTask介绍,及与Thread对比
  5. android binder机制之——(创建binder服务)
  6. Android应用框架之应用启动过程详解
  7. Android(安卓)ListView拖动时背景颜色会变成黑色的解决办法
  8. Android删除短信的方法
  9. Android(安卓)sensor hal 详解

随机推荐

  1. 实用技术经验分享:《Android账户同步备份
  2. Android学习札记52:广播(Broadcast)基础篇
  3. 4.1 Android如何访问资源
  4. android进程和线程模型
  5. Android笔记:Android后台接口教程一(从零开
  6. Android(安卓)插件化 动态升级
  7. 两份安卓学习资料,我建议你看完
  8. android之NDK(jni)开发笔记1——运行第一个
  9. Android高手进阶教程(二十五)之---Androi
  10. android实现ios形式的字体,实现各种自定义