2014-07-13 5 views
0

포지셔닝 코드에 문제가 있습니다. 나는 4 개의 객체를 가지고 있고, 그것들을 호출 할 수 있습니다. Obj1 Obj2 Obj3 Obj4. 나는 그들이 화면의 오른쪽에 산란하고, 화면의 왼쪽으로 움직이고, 사라지기를 바란다. Obj 1과 Obj 2는 같은 y 위치에 있고, Obj 3은 + 40 y와 같이 조금 더 높고 Obj 4는 모바일 y 위치를 가진 유일한 것이어야합니다.SpriteKit 임의의 위치

Obj 1, 2 및 3은 Obj 4 사이의 x 간격이 필요하지만 Obj 4는 임의 일 수 있습니다.

예를 들어 모든 결과를 코딩 할 수 있습니다. =

int Obj1x = 320; 
int Obj1y = 200; 

Obj1.position = CGPointMake(Obj1x, Obj1y); 

int Obj2x = 0; 
int Obj2y = 0; 

int r1 = arc4random() % 2; // produces random numbers between 0 and 1 
if(r1 == 0) 
Obj2x = Obj1x + 80; 
if(r1 == 1) 
Obj2x = Obj1x + 100; 

int r2 = arc4random() % 1; 
if(r2 == 0) 
Obj2y = Obj1y; 


Obj2.position = CGPointMake(Obj2x, Obj2y); 

이렇게하면 모든 결과를 기록하는 데 너무 많은 시간이 소요됩니다. 코드를 작성하는 다른 방법이 있습니까? 고맙습니다.

답변

1

Swift 또는 Objective-C 중 어느 것을 사용하는지 실제로 말하지 않습니다. 어느 언어에서든 쉽지만 Swift에서 코드를 제공합니다.

// Where height is something like the self.frame.size.height being passed 
func randomY(height: CGFloat) -> CGFloat { 
    return CGFloat(arc4random()) % CGFloat(height/3) 
} 

이렇게 할 수있는 또 다른 방법은 최소값과 최대 값을 결정하고 그 값 사이의 임의의 범위를 반환하는 함수로 전달하는 것입니다.

// Return a random range 
func randomRange(#min: CGFloat, #max: CGFloat) -> CGFloat { 
    assert(min < max) 
    return CGFloat(arc4random())/0xFFFFFFFF * (max - min) + min 
} 

고정 위치와 그 모든 것에 대해 의사 코드의 아이디어는 기본적으로 작동합니다. 어떤 종류의 고정 된 관계가 필요한 두 객체의 경우 두 번째 객체를 첫 번째 객체의 x 및 y 위치 +/- 고정 된 양으로 설정하면됩니다.

편집 : 업데이트 된 방법. 이전 예제에는 포함되지 않은 CGFloat 확장이있었습니다.