あなたがおそらく利用したいと思う主なものは、モジュラ算術です。これは、ある量で割ったときの残りの部分を求めるのと同じです。したがって、例えば:
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ピクセルの概念的なラップアラウンド領域を使用して、可視部分を真ん中に置く。だから、クラウドは画面から完全に右に移動し、誰も見ることができないまま左にジャンプし、その側から再出現します。