随机运动/湍流 - SWIFT

Hao*_*aox 2 random ios sprite-kit swift ios8

我正在 Iphone 和 Ipad 上开发游戏,就像太空入侵者一样。

要摧毁的气球从屏幕顶部直线落下。

这是我添加它们的代码:

func addBalloonv(){


    var balloonv:SKSpriteNode = SKSpriteNode (imageNamed: "ballonvert.png")


    balloonv.physicsBody = SKPhysicsBody (circleOfRadius: balloonv.size.width/2)
    balloonv.physicsBody.dynamic = true
    balloonv.physicsBody.categoryBitMask = balloonCategory | greenCategory
    balloonv.physicsBody.contactTestBitMask = flechetteCategory
    balloonv.physicsBody.collisionBitMask = balloonCategory
    balloonv.physicsBody.mass = 1
    balloonv.physicsBody.restitution = 1
    balloonv.physicsBody.allowsRotation = true


    let minX = balloonv.size.width/2
    let maxX = self.frame.size.width - balloonv.size.width/2
    let rangeX = maxX - minX
    let position:CGFloat = CGFloat(arc4random()) % CGFloat(rangeX) + CGFloat(minX)

    balloonv.position = CGPointMake(position, self.frame.size.height+balloonv.size.height)

    self.addChild(balloonv)
Run Code Online (Sandbox Code Playgroud)

我有一个气球颜色的功能。

所以目前它们直线移动,我正在寻找从顶部和两侧的随机运动(像空气中的气球一样的湍流)。

我怎样才能做到这一点?

非常感谢 !!

ric*_*ter 5

这正是 SpriteKit(从 iOS 8 / OS X Yosemite 开始)中新的物理场功能的用途。这些使您可以将不同类型的力应用于区域中的所有物理体,例如重力、阻力和湍流。有关SKFieldNode详细信息,请参阅课程文档。

场是一种节点,所以为了得到你想要的,你需要在你的场景中添加一个噪音(或湍流)场,覆盖气球落下的区域,它会扰乱每个气球的路径那通过。最简单的方法是这样的:

let field = SKFieldNode.noiseFieldWithSmoothness(0.5, animationSpeed: 0.1)
scene.addChild(field)
Run Code Online (Sandbox Code Playgroud)

您需要调整平滑度、动画速度,field.strength直到获得所需的噪声级别。您还可以考虑是否只需要噪声场(它在随机方向上施加随机力),还是湍流场(其作用相同,但当物体移动得更快时,力会变得更强)。

上面的代码为您提供了一个效果区域无限的字段。您可能希望将其限制在特定区域(例如,这样它就不会在气球着陆后继续敲打您的气球)。我这样做是为了制作一个仅覆盖 300x200 场景顶部 3/4 的字段:

field.region = SKRegion(size: CGSize(width: 300, height: 100))
field.position = CGPoint(x: 150, y: 150)
Run Code Online (Sandbox Code Playgroud)

  • 你知道吗 ?我爱你 !!!我很确定这已经扭转了物理场功能。文档已经在我的屏幕上打开了,但我不知道如何初始化它......太简单了,我很惭愧 :-D。我正在尝试使用我的第一个应用程序进行学习,但这非常困难,因为我没有良好的 C 语言基础。你有关于 noob 的建议或文档吗?非常感谢 !!! (2认同)