首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >射击游戏中的自动射击(Swift 4- SpriteKit)

射击游戏中的自动射击(Swift 4- SpriteKit)
EN

Stack Overflow用户
提问于 2018-03-09 18:26:32
回答 1查看 628关注 0票数 0

我正在用Xcode做一个游戏项目。我已经编写了让飞船发射射弹的代码,但我不知道该用什么函数来使飞船自动射击。

你能帮我一下吗?提前谢谢你!

下面是我的代码,来自GameScene:

代码语言:javascript
复制
    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()
    })

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-09 18:31:10

根据杰克的评论,我假设你希望这艘船“自动”开火,而不是在按住手指的时候重复。

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

代码语言:javascript
复制
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()
    })
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49199967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档