如何在Spritekit中设置球的随机位置?

时间:2016-11-10 00:36:16

标签: ios swift sprite-kit

我正在制作一个场景中有两个球的游戏,但是用户将点击正确的球。然而,当用户点击正确的球时,我想为我的第二个球设置一个随机位置,当用户点击正确的球时,我也希望第二个球随机移动。 这是我设置球的随机位置的代码:

let currentBall = SKShapeNode(circleOfRadius: CGFloat(size))
let shape = SKShapeNode()

  currentBall.fillColor = pickColor()

 //Rectangle
shape.path = UIBezierPath(roundedRect: CGRect(x: 64, y: 64, width: 160,height: 160), cornerRadius: 50).cgPath

    shape.fillColor = pickColor()

    self.addChild(shape)

 func randomBallPosition() -> CGPoint {
        let xPosition = view!.scene!.frame.midX - viewMidX + CGFloat(arc4random_uniform(UInt32(viewMidX*2)))
        let yPosition = view!.scene!.frame.midY - viewMidY + CGFloat(arc4random_uniform(UInt32(viewMidY*2)))


        return CGPoint(x: xPosition, y: yPosition)

    }


   func handleTap() {
          currentBall.position = randomBallPosition()
         shape.position = randomBallPosition()

    }

1 个答案:

答案 0 :(得分:1)

问题在于你设置了与第一个球相同的位置。据我所知,两个球应该出现在随机的独立位置。你应该创建一个函数来返回一个新位置并为每个球调用它:

class MyScene: SKScene {
    var currentBall: SKShapeNode!
    var shape: SKShapeNode!

    override func didMove(to view: SKView) {
        super.didMove(to: view)

        let currentBall = SKShapeNode(circleOfRadius: CGFloat(size))
        currentBall.fillColor = pickColor()

        let shape = SKShapeNode()
        shape.path = UIBezierPath(roundedRect: CGRect(x: 64, y: 64, width: 160,height: 160), cornerRadius: 50).cgPath
        shape.fillColor = pickColor()
        self.addChild(shape)
    }

    func handleTap() {
        //your code here, except that you don't create new nodes, just modify existing ones
        //at some point you will change balls' positions like this:
        currentBall.position = randomBallPosition()
        secondBall.position = randomBallPosition()
    }

    func randomBallPosition() -> CGPoint {
        let xPosition = CGFloat(arc4random_uniform(UInt32((view?.bounds.maxX)! + 1)))
        let yPosition = CGFloat(arc4random_uniform(UInt32((view?.bounds.maxY)! + 1)))
        return CGPoint(x: xPosition, y: yPosition)
    }
}

希望这有帮助

相关问题