SpriteKit随机位置

时间:2014-07-13 11:48:22

标签: ios position sprite-kit

我遇到了定位代码的问题。我有4个对象,让我们称之为Obj1 Obj2 Obj3 Obj4。我希望它们在屏幕的右侧产生,移动到屏幕的左侧,然后消失。 Obj 1和Obj 2位于相同的y位置,Obj 3应该略高于+ 40 y,而Obj 4应该是唯一具有移动y位置的位置。

对象1,2和3需要在它们之间有一个x间隙,而对象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 个答案:

答案 0 :(得分: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)
}

另一种方法是确定最小值和最大值Y并将其传递给函数以返回这些值之间的随机范围。

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

对于固定位置以及所有这些,伪代码中的想法基本上有效。对于需要某种固定关系的两个对象,只需将第二个对象设置为第一个对象的x和y位置+/-固定量。

编辑:更新的方法。前面的示例有一个未包含的CGFloat扩展。