【问题标题】:Shooting automatically in a Shooter Game (Swift 4 - SpriteKit)在射击游戏中自动射击 (Swift 4 - SpriteKit)
【发布时间】:2018-08-18 09:24:00
【问题描述】:

我正在使用 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()
    })

}

【问题讨论】:

  • 触摸开始时,您可以调用一个函数开始拍摄并每 0.x 秒重复一次。在触摸结束时,您可以使计时器无效。首先是将弹丸代码移动到它自己的函数中。

标签: swift sprite-kit sprite skaction


【解决方案1】:

根据 Jake 的评论,我假设您希望船“自动”开火,而不是在按住手指时重复。

您可以使用更新功能来控制自动拍摄。在我的示例中,更新命令每 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()
    })
}

【讨论】:

  • 不客气。请将此答案标记为正确,以便其他人可以从这个问题中受益
猜你喜欢
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多