我正在像太空入侵者一样在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)

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

因此,目前它们一直沿直线移动,我正在寻找从顶部和两侧开始的随机运动(如气球中的湍流)。

我怎样才能做到这一点?

非常感谢你 !!

最佳答案

这正是SpriteKit(自iOS 8 / OS X Yosemite起)新的“物理场”功能的目的。这些使您可以对区域中的所有物理物体施加不同种类的力,例如重力,阻力和湍流。有关详细信息,请参见 SKFieldNode 类文档。

场是一种节点,因此要获得所需的效果,您需要在场景中添加一个噪波(或湍流)场,以覆盖气球掉落的区域,并且会干扰每个气球的路径过去了。最简单的方法是这样的:

let field = SKFieldNode.noiseFieldWithSmoothness(0.5, animationSpeed: 0.1)
scene.addChild(field)

您需要调整平滑度,动画速度和field.strength,直到获得所需的噪声水平为止。您可能还会研究是否只需要一个噪声场(在随机方向上施加随机力)或一个湍流场(其作用相同),但是当物体运动得更快时,该场会变得更强。

上面的代码为您提供了一个范围无限大的字段。您可能希望将其限制在特定区域内(例如,这样它就不会在气球着陆后不断敲打它)。我这样做是为了制作一个仅覆盖300x200场景顶部3/4的字段:
field.region = SKRegion(size: CGSize(width: 300, height: 100))
field.position = CGPoint(x: 150, y: 150)

09-25 20:49