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