void XXXX::didAccelerate( CCAcceleration* pAccelerationValue ) {
static CCAcceleration lastAcc = *pAccelerationValue;
const double dCurTimeStamp = pAccelerationValue->timestamp;
const double dLentthSq = LenthSquare( pAccelerationValue->x - lastAcc.x ,
pAccelerationValue->y - lastAcc.y ,
pAccelerationValue->z - lastAcc.z );
if( dLentthSq > 0.01 ){
struct cocos2d::cc_timeval now; // 秒,毫秒
cocos2d::CCTime::gettimeofdayCocos2d(&now, NULL);
static long lLastTime = 0;
if( now.tv_sec - lLastTime > 1 ){
LogCat("晃动了 %lf , len %lf" , dCurTimeStamp , dLentthSq );
lLastTime = now.tv_sec;
}
}
lastAcc = *pAccelerationValue;
}
上网查了一下,在didAccelerate里获得CCAcceleration 中三个方向加速度的平方加起来,超过一个阀值,来确认晃动
上面代码时我花了两个小时才彻底测好的