2011-01-24 9 views
0

たとえば、雲のようにアニメーション化する方法が不思議でした。画面の横に表示されますアニメーションの問題は、オブジェクトが右側から外に出たときに左側から画面に戻ってきます

私はclouds.center = CGPouintMake(clouds.center.x + cloudvelocity、clouds.center.y + cloudvelocity)で試しましたが、私はそれらを左から右へライン。

他の言葉で言えば... 画面の右側から外に出ると、左から右に一直線になり、画面の左側からbacを画面に戻すのに苦労します。

誰でも助けてくれますか?

答えて

1

あなたがおそらく利用したいと思う主なものは、モジュラ算術です。これは、ある量で割ったときの残りの部分を求めるのと同じです。したがって、例えば:

28 mod 6 = 4 

%整数モジュラス演算子であるが、浮動小数点数を使用すると、(単精度浮動小数点数を取得し、返す)ライブラリ(受け取り、戻り倍)メソッドfmod又はfmodfを呼び出す必要が。例えば。

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

ログに '4'が記録されます。

あなたの場合、常に変化するポジションがありますが、結果を一定のウィンドウサイズに制限する必要があります。それが1024ポイントであるとすると、1024 + nの位置は2048 + n、3072 + nなどと同じ位置nと同じになります。次に行うべきことは、したがって、例えば、

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

ビューの寸法はどのようなものでもかまいません。

最初の潜在的な問題は、負数が必ずしもあなたが望むように動作しないということです。例えば。

fmodf(-23.0f, 1024.0f)); 

(の関連fmodfsいるよう - (+ 23.0f 1024.0f)は、 - (2048.0f + 23.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への呼び出しが2回気にしない場合は、明らかに:

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)) 

任意の入力値に対して機能します。

第2の潜在的な問題は、クラウドの中心だけをラッピングすることです。だから、画面の片側からもう片方にジャンプするだけです。画面の片側に雲半分、もう片方に半分の雲がないでしょう。クラウドの中心が画面のモドポイントより大きい場合は左に1024ピクセル、それ以外の場合は1024ピクセルです。 (ii)その美徳を生かし、1024よりむしろ2048ピクセルの概念的なラップアラウンド領域を使用して、可視部分を真ん中に置く。だから、クラウドは画面から完全に右に移動し、誰も見ることができないまま左にジャンプし、その側から再出現します。

関連する問題