加速度计:检测屏幕的最低点

时间:2014-07-30 23:48:40

标签: objective-c cocos2d-iphone

我正在研究一种使用Xcode和Objective-C使用加速度计检测屏幕最低点的算法。我想画一个跟在屏幕外面的精灵,而不是穿过中间。总是倾向于屏幕的底部。

以下是我到目前为止的情况。这样可以很好地移动精灵,但仍允许精灵通过屏幕中间。我正在平均最后的AVG_SIZE值以减少抖动。评论部分是我尝试强制它跟随屏幕周边的失败尝试。有什么建议吗?

for(int i = 0; i < AVG_SIZE-1; i++){
    x_array[i] = x_array[i+1];
    y_array[i] = y_array[i+1];
}
float tempAccelerationX = acceleration.x;
float tempAccelerationY = acceleration.y;
/*if(fabsf(tempAccelerationX) > fabsf(tempAccelerationX)){
    if(tempAccelerationY > 0)
        tempAccelerationY = 1;
    else
        tempAccelerationY = -1;
}else if(fabsf(tempAccelerationX) < fabsf(tempAccelerationX)){
    if(tempAccelerationX > 0)
        tempAccelerationX = 1;
    else
        tempAccelerationX = -1;
}*/

x_array[AVG_SIZE-1] = ( (tempAccelerationY+1) / 2 );
y_array[AVG_SIZE-1] = 1- ( (tempAccelerationX+1) / 2 );
float ratio_x = 0;
float ratio_y = 0;
for(int i = 0; i < AVG_SIZE; i++){
    ratio_x += x_array[i];
    ratio_y += y_array[i];
}
ratio_x /= AVG_SIZE;
ratio_y /= AVG_SIZE;
[_sprite setPosition: ccp( self.contentSize.width*ratio_x, self.contentSize.height*ratio_y )];

1 个答案:

答案 0 :(得分:0)

如何让您的代码更轻松?查看加速度计的this代码,特别是在本教程的更新方法中,它使精灵不会从屏幕偏移中脱落。

下面:

 float imageWidthHalved = player.texture.contentSize.width * 0.5f; 
 float imageHeightHalved = player.texture.contentSize.height * 0.5f;

 float leftBorderLimit = imageWidthHalved; 
 float rightBorderLimit = screenSize.width - imageWidthHalved;
 float topBorderLimit = imageHeightHalved; 
 float bottomBorderLimit = screenSize.height - imageHeightHalved;

只需根据需要更改限制,我认为你得到了你想要的东西。