2012-12-25 59 views
-1

我正在尋找一種很好且流暢的方式來一次移動多個UIViews而不是Screen。當Accelerometer檢測到加速度時應該發生Action。我已經試過這樣:在遊戲中移動UIViews的最佳方式(無需用戶交互)

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{ 

    CGPoint ObjectPos = Object.center; 

    ObjectPos.x -= acceleration.x; 

    Object.center = ObjectPos; 
} 

(當然我加了一些調整,以改善移動檢測),但所有的一切,但它仍然不是很流暢。

我希望有一些核心動畫的方式,但它似乎沒有與加速相當好的工作。

幫助非常感謝,謝謝!

回答

0

我建議您閱讀本文檔: Isolating the Gravity Component from Acceleration Data 以及下面稱爲'從加速度數據中分離瞬時運動'的部分。

基本上,你需要過濾重力,以獲得平穩的運動。該鏈接提供了示例代碼。

編輯:UIAccelerometer在iOS 5.0中被棄用,並且隨附的文檔似乎也沒有了。

以供將來參考我做了一些挖掘和發現,似乎是,原來的示例代碼的「抄送」(source):

// This example uses a low-value filtering factor to generate a value that uses 10 percent of the 
// unfiltered acceleration data and 90 percent of the previously filtered value 


// Isolating the effects of gravity from accelerometer data 
#define kFilteringFactor 0.1 
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { 
    // Use a basic low-pass filter to keep only the gravity component of each axis. 
    accelX = (acceleration.x * kFilteringFactor) + (accelX * (1.0 - kFilteringFactor)); 
    accelY = (acceleration.y * kFilteringFactor) + (accelY * (1.0 - kFilteringFactor)); 
    accelZ = (acceleration.z * kFilteringFactor) + (accelZ * (1.0 - kFilteringFactor)); 
    // Use the acceleration data. 
} 

// shows a simplified high-pass filter computation with constant effect of gravity. 

// Getting the instantaneous portion of movement from accelerometer data 
#define kFilteringFactor 0.1 
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { 
    // Subtract the low-pass value from the current value to get a simplified high-pass filter 
    accelX = acceleration.x - ((acceleration.x * kFilteringFactor) + (accelX * (1.0 - kFilteringFactor))); 
    accelY = acceleration.y - ((acceleration.y * kFilteringFactor) + (accelY * (1.0 - kFilteringFactor))); 
    accelZ = acceleration.z - ((acceleration.z * kFilteringFactor) + (accelZ * (1.0 - kFilteringFactor))); 
    // Use the acceleration data. 
} 
+0

謝謝,對我幫助很大! – user1798199

+0

鏈接不起作用。有人請刪除鏈接。 – CoderKK

相關問題