2012-03-31 66 views
1

此代碼用於加速度計 方法中。以下代碼中發生了什麼?

它使用一個名爲playerVelocity的CGPoint變量。

-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration 
{ 
    //controls how quickly the velocity decelerates 
    float deceleration = 0.4f; 

    //determines how sensitive the accelerometer reacts 
    float sensitivity = 6.0f; 

    //how fast the velocity can be at most 
    float maxVelocity = 100; 

    playerVelocity.x = playerVelocity.x *deceleration + acceleration.x *sensitivity; 


    if (playerVelocity.x < -maxVelocity) 
    { 
     playerVelocity.x = -maxVelocity; 
    } 
    else if (playerVelocity.x > maxVelocity) 
    { 
     playerVelocity.x = maxVelocity; 
    } 
} 

現在我知道playerVelocity變量是一個CGPoint,所以我把它想象成一個X,Y圖表。 我假設無論playerVelocity變量在哪裏休息(比如說150,0),它首先將任何座標乘以0.4,無論何時收到加速度計輸入(這是由iPhone傾斜),然後加上accelerometer.x乘以6.0到playerVelocity變量。它是否正確?

後來在另一種方法,這是通過

CGPoint pos = playerObject.position; 
pos.x+= playerVelocity.x; 
playerObject.position = pos; 

添加到我的其他對象的位置我感到困惑的是究竟是什麼幕後發生的事情在這裏。我的假設是否正確?

當playerVelocity在150,0並且乘以0.4時,playerVelocity變量的X座標是否逐漸減小,即150,0,145,0,130,0等。

如果我知道了,我會知道我的playerObject是如何移動的。

回答

1

看起來你有一個恆定的減速度(.4),它是在你正在行駛的任何方向上反向運動,通過加速度計乘以一個常數從加速度中減去。然後將此值添加到當前速度。因此,您基本上將每次計算中加速度計的加速度 - 恆定減速度與當前速度的差值相加。

+0

我明白了。 所以,這個動作基本上發生在我的另一種方法(這是一種更新方法),它將速度添加到位置。我明白,謝謝。 – 2012-03-31 00:33:59