gpt4 book ai didi

ios - 在 Swift 4 中 touchesBegan 时重复功能

转载 作者:行者123 更新时间:2023-11-28 07:52:13 26 4
gpt4 key购买 nike

我试图让我的 Bullet 在触摸屏幕时连续发​​射。到目前为止,这是我得到的结果,但它并没有真正起作用。

func fireBullet() {

let bullet = SKSpriteNode(imageNamed: "bullet")
bullet.name = "Bullet"
bullet.setScale(1.5) // Bullet Size
bullet.position = player.position
bullet.zPosition = 1
bullet.physicsBody = SKPhysicsBody(rectangleOf: bullet.size)
bullet.physicsBody!.affectedByGravity = false
bullet.physicsBody!.categoryBitMask = PhysicsCategories.Bullet
bullet.physicsBody!.collisionBitMask = PhysicsCategories.None
bullet.physicsBody!.contactTestBitMask = PhysicsCategories.Enemy
self.addChild(bullet)

let moveBullet = SKAction.moveTo(y: self.size.height + bullet.size.height, duration: 1)
let deleteBullet = SKAction.removeFromParent()

let bulletSequence = SKAction.sequence([bulletSound, moveBullet, deleteBullet])
let bulletRepeat = SKAction.repeatForever(bulletSequence)
bullet.run(bulletRepeat)
}

最佳答案

您需要的是在按下屏幕时打开火并在抬起手指时关闭火。您可以使用 touches 开始将变量设置为 true,表示您应该触发 isFiring = true,然后在更新中捕获该变量。当您抬起手指时,触摸结束将关闭变量。

另一个不错的地方是你可以实时调整 firingInterval 变量来调整射速。

private var updateTime: Double = 0
private var isFiring = false
//rate of fire, 1 means fire once a second
private var firingInterval: Double = 1

override func update(_ currentTime: TimeInterval) {

//check if we should be firing if not get outta here
guard isFiring else { return }

if updateTime == 0 {
updateTime = currentTime
}

if currentTime - updateTime > firingInterval {
self.fireBullet()
updateTime = currentTime
}
}

override touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
isFiring = true
}

override touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
isFiring = false
}

func fireBullet() {

let bullet = SKSpriteNode(imageNamed: "bullet")
bullet.name = "Bullet"
bullet.setScale(1.5) // Bullet Size
bullet.position = player.position
bullet.zPosition = 1
bullet.physicsBody = SKPhysicsBody(rectangleOf: bullet.size)
bullet.physicsBody!.affectedByGravity = false
bullet.physicsBody!.categoryBitMask = PhysicsCategories.Bullet
bullet.physicsBody!.collisionBitMask = PhysicsCategories.None
bullet.physicsBody!.contactTestBitMask = PhysicsCategories.Enemy
self.addChild(bullet)

let moveBullet = SKAction.moveTo(y: self.size.height + bullet.size.height, duration: 1)
let deleteBullet = SKAction.removeFromParent()

let bulletSequence = SKAction.sequence([bulletSound, moveBullet, deleteBullet])
//let bulletRepeat = SKAction.repeatForever(bulletSequence)
bullet.run(bulletSequence )
}

关于ios - 在 Swift 4 中 touchesBegan 时重复功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49347242/

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