在射击游戏中自动拍摄(Swift 4 - SpriteKit)

时间:2018-03-09 18:26:33

标签: swift sprite-kit sprite skaction

我正在使用Xcode开发一个游戏项目。 我已经编写了使船射出射弹的代码,但我不知道用什么功能让船自动射击。

你可以帮帮我吗?提前谢谢!

这是我的代码,来自GameScene:

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {

    let projectile = SKSpriteNode(imageNamed: "projectile")
    projectile.zPosition = 1
    projectile.position = CGPoint(x: player.position.x, y: player.position.y)

    projectile.physicsBody = SKPhysicsBody(circleOfRadius: projectile.size.width/2)
    projectile.physicsBody?.isDynamic = true
    projectile.physicsBody?.categoryBitMask = PhysicsCategory.Projectile
    projectile.physicsBody?.contactTestBitMask = PhysicsCategory.Monster
    projectile.physicsBody?.collisionBitMask = PhysicsCategory.None
    projectile.physicsBody?.usesPreciseCollisionDetection = true
    self.addChild(projectile)
    let action = SKAction.moveTo(x: self.frame.width + projectile.size.width, duration: 0.5)

    projectile.run(action, completion: {
        projectile.removeAllActions()
        projectile.removeFromParent()
    })

}

1 个答案:

答案 0 :(得分:1)

根据杰克的评论,我假设您希望船舶自动开火#34;按住手指时不要重复。

您可以使用更新功能来控制自动拍摄。在我的例子中,update命令每1秒触发一次

private var updateTime: Double = 0

override func update(_ currentTime: TimeInterval) {

    if updateTime == 0 {
        updateTime = currentTime
    }

    if currentTime - updateTime > 1 {
        self.shoot()
        updateTime = currentTime
    }
}

func shoot() {

    let projectile = SKSpriteNode(imageNamed: "projectile")
    projectile.zPosition = 1
    projectile.position = CGPoint(x: player.position.x, y: player.position.y)

    projectile.physicsBody = SKPhysicsBody(circleOfRadius: projectile.size.width/2)
    projectile.physicsBody?.isDynamic = true
    projectile.physicsBody?.categoryBitMask = PhysicsCategory.Projectile
    projectile.physicsBody?.contactTestBitMask = PhysicsCategory.Monster
    projectile.physicsBody?.collisionBitMask = PhysicsCategory.None
    projectile.physicsBody?.usesPreciseCollisionDetection = true
    self.addChild(projectile)
    let action = SKAction.moveTo(x: self.frame.width + projectile.size.width, duration: 0.5)

    projectile.run(action, completion: {
        projectile.removeAllActions()
        projectile.removeFromParent()
    })
}