2014-09-10 62 views
1

我正在开发Iphone和Ipad上的游戏,就像太空侵略者一样。随机移动/湍流 - SWIFT

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

这里我的代码添加它们:

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) 

我有气球的颜色一个FUNC。

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

我该怎么做?

非常感谢!

回答

4

这正是SpriteKit中的新Physics Fields功能(适用于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) 
+1

你知道吗?我爱你 !!! 我很确定这是转身物理场功能。文档已经在我的屏幕上打开了,但我不知道如何初始化它......这很简单,我很惭愧:-D。我试图用我的第一个应用学习,但这很困难,因为我没有很好的C语言基础。你有noob的建议或文件吗? 非常感谢! – Haox 2014-09-11 10:36:30