gpt4 book ai didi

swift - 如何连续发射子弹

转载 作者:行者123 更新时间:2023-11-30 10:46:19 25 4
gpt4 key购买 nike

我正在通过一个小游戏学习 Swift 和 SpriteKit,在游戏中玩家必须保卫军事基地。然而,玩家必须触摸才能发射子弹。但我希望当他触摸屏幕时,火是持续的,而不是每次都点击屏幕以获得一颗子弹。而且,当他停下来触摸屏幕时,火弹就停止了。

我的火弹功能:

func fireBullet () {
let bullet = SKSpriteNode(imageNamed: "Bullet")
bullet.name = "Bullet" //afin de permettre l'arrêt des missiles en cas de gameOver
bullet.setScale(0.5)
bullet.position = CGPoint(x: planet.position.x, y: planet.position.y)
bullet.anchorPoint = CGPoint(x: 0.5, y: 0.5)
bullet.zPosition = 1
bullet.physicsBody = SKPhysicsBody(rectangleOf: bullet.size) // changer le rectangle en forme circulaire
bullet.physicsBody!.affectedByGravity = false
bullet.physicsBody!.categoryBitMask = physicsCategories.bullet
bullet.physicsBody!.collisionBitMask = physicsCategories.none
bullet.physicsBody!.contactTestBitMask = physicsCategories.asteroid
self.addChild(bullet)
let moveBullet = SKAction.moveTo(y: self.size.height + bullet.size.height, duration: 1.0)
let deleteBullet = SKAction.removeFromParent()
let bulletSequence = SKAction.sequence([bulletSound, moveBullet, deleteBullet])
bullet.run(bulletSequence)
}

我在 TouchesBegan 中调用它:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if currentGameState == gameState.preGame {
gameStart()
}
else if currentGameState == gameState.inGame {
fireBullet()
}

感谢您的帮助:)

最佳答案

您可以使用 SKAction 在其内部调用 fireAction。

func fireBullet() {

...

let moveBullet = SKAction.moveTo(y: self.size.height + bullet.size.height, duration: 1.0)
let deleteBullet = SKAction.removeFromParent()
let fireCooldown = SKAction.wait(forDuration: 0.5)
let bulletSequence = SKAction.sequence([bulletSound, moveBullet, deleteBullet, fireCooldown])
bullet.run(bulletSequence) {
if currentGameState == gameState.inGame, isTouchingScreen {
fireBullet()
}
// runs actions, wait for 0.5 seconds and trigger a new fireBullet in completion
}
}

对于冷却时间调整,您可以更改 fireCooldown 值,或者如果您不想等待整个操作发生,您可以从序列中删除 fireCooldown 并在完成时单独触发它。IsTouchingScreen 是一个 bool 值,您可以在 TouchesBegan 中将其设置为 true,然后在 TouchesEnded 中将其设置为 false。

关于swift - 如何连续发射子弹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55703444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com