节点自动随机移动

时间:2017-07-13 05:07:37

标签: swift xcode sprite-kit

我正在尝试创建一个在创建后随机向前移动的球。我已经尝试从0-360创建一个随机角度并让节点旋转然后将一个脉冲应用于节点,但是节点一旦创建就停留在那里,所以我不知道它是否只是冲动无法正常工作或旋转不起作用。

    enemy.size =  CGSize(width: 20, height:20)
    enemy.position = CGPoint(x: frame.width/2, y: frame.height/2)
    enemy.color = UIColor(red:255.0,green:0.0,blue:0.0,alpha:1.0)
    enemy.colorBlendFactor = 1.0
    enemy.physicsBody?.affectedByGravity = false
    enemy.physicsBody?.isDynamic = true
    enemy.physicsBody?.restitution = 1.0
    enemy.physicsBody?.friction = 0.0
    enemy.physicsBody?.linearDamping = 0.0
    self.addChild(enemy)

这只是为了制造敌人,但我不知道如何应用随机方向和向前运动。

 enemy.size =  CGSize(width: 20, height:20)
    enemy.position = CGPoint(x: frame.width/2, y: frame.height/2)
    enemy.color = UIColor(red:255.0,green:0.0,blue:0.0,alpha:1.0)
    enemy.colorBlendFactor = 1.0
    enemy.physicsBody = SKPhysicsBody(circleOfRadius:10)
    enemy.physicsBody?.affectedByGravity = false
    enemy.physicsBody?.isDynamic = true
    enemy.physicsBody?.restitution = 1.0
    enemy.physicsBody?.friction = 0.0
    enemy.physicsBody?.linearDamping = 0.0
     self.addChild(enemy)
    let vec = CGVector(dx: CGFloat(arc4random_uniform(100)) / 50.0, dy: CGFloat(arc4random_uniform(100)) / 50.0)
    enemy.physicsBody!.applyForce(vec)

这是我编辑过的代码。敌人的球现在在被另一个球击中时移动,但我希望敌人的球能够自动移动。现在它停留在屏幕中间的位置,直到被击中。

1 个答案:

答案 0 :(得分:0)

就像Gary在评论中已经指出的那样,你想确保你已经为你的physicsBody创建了一个SKNode。如果还没有,可以找到一些简洁的文档here

现在申请随机武力。您基本上想要生成随机CGVector并在物理机构上使用applyForce

生成随机向量:

let vec = CGVector(dx: CGFloat(arc4random_uniform(100)) / 50.0, dy: CGFloat(arc4random_uniform(100)) / 50.0)

arc4random_uniform创建一个介于0和上限之间的随机数,该值作为参数传递。然后我将它分开一点以获得0到2之间的数字。你应该根据需要进行调整。

然后只使用enemy.physicsBody!.applyForce(vec)。请注意我使用!标记。确保你已经创建并应用了一个物理体,否则会崩溃。