2011-01-24 65 views
0

我只是想知道如何動畫例如從屏幕左側返回的雲彩,一旦它們在右邊之外屏幕的一側當物體離開右側時從左側返回到屏幕的對象的動畫問題

我試過用clouds.center = CGPouintMake(clouds.center.x + cloudvelocity速度,clouds.center.y + cloudvelocity速度),但我只能讓他們從左到右走下坡路線。

換句話說...... 我有麻煩讓他們從左到右直線行,並且一旦他們在屏幕的右側,就從屏幕左側返回屏幕。

任何人都可以幫助我嗎?

回答

1

您可能想要利用的主要內容是模塊算術,這與問如果除以一定數量後餘數是多少相同。因此,舉例來說:

28 mod 6 = 4 

%是整數模運算符,但與浮點數你需要調用庫方法fmod(這需要返回雙打)或fmodf(這需要和返回單精度浮點數) 。例如。

NSLog(@"%0.0f", fmodf(28.0f, 6.0f)); 

會記錄'4'。

在您的情況下,您的職位不斷變化,但您希望將結果限制爲某個窗口大小。假設它是1024點,你希望位置1024 + n與位置n相同,位置n與2048 + n,3072 + n等相同。然後你想要做的只是保留除以所以,例如

clouds.center = CGPointMake(fmodf(clouds.center.x + cloudvelocity, 1024.0f), 
          fmodf(clouds.center.y + cloudvelocity, 768.0f)) 

或無論您的視圖尺寸是多少。

第一個潛在問題是負數不一定按照您希望的方式工作。例如。

fmodf(-23.0f, 1024.0f)); 

是-23.0f(如同的相關fmodfs - (1024.0f + 23.0f), - (2048.0f + 23.0f),等等)。您可以通過檢查小於0的值並添加1024.0f來處理該問題。

如果你知道你的計算值可能出現負值,但從來沒有超過1024.0f負,那麼你可以這樣做:

clouds.center = CGPointMake(fmodf(1024.0f + clouds.center.x + cloudvelocity, 1024.0f), 
          fmodf(768.0f + clouds.center.y + cloudvelocity, 768.0f)) 

由於明顯的增加1024.0f的將有結果,如果沒有效果這個數字是積極的。如果你不介意兩次調用fmodf,那麼很明顯:

clouds.center = CGPointMake(
      fmodf(1024.0f + fmodf(clouds.center.x + cloudvelocity, 1024.0f), 1024.0f), 
      fmodf(768.0f + fmodf(clouds.center.y + cloudvelocity, 768.0f), 768.0f)) 

將適用於任何輸入值。

第二個潛在的問題是,你只包裝雲的中心。所以它會從屏幕的一側跳回到另一側 - 在屏幕的一側永遠不會有云一半,另一半則不會。假設雲的寬度小於屏幕寬度,則可能的解決方案是(i)每次繪製兩次雲,如果雲中心大於屏幕修改點,則向左移動1024像素,否則繪製向右移動1024像素; (ii)利用它,並使用概念性的環繞區域,例如2048像素而不是1024,將可見部分放在中間。所以雲會完全離開屏幕向右,然後跳到左邊,沒有人能夠看到它,並從那邊重新出現。

相關問題