射击游戏中的自动射击(Swift 4-SpriteKit)
我正在用Xcode做一个游戏项目。 我已经写了让飞船发射炮弹的代码,但我不知道用什么函数让飞船自动发射 你能帮我吗?提前谢谢你 这是我的代码,来自游戏场景:射击游戏中的自动射击(Swift 4-SpriteKit),swift,sprite-kit,sprite,skaction,Swift,Sprite Kit,Sprite,Skaction,我正在用Xcode做一个游戏项目。 我已经写了让飞船发射炮弹的代码,但我不知道用什么函数让飞船自动发射 你能帮我吗?提前谢谢你 这是我的代码,来自游戏场景: override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { let projectile = SKSpriteNode(imageNamed: "projectile") projectile.zPosition
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()
})
}
override func touchesend(touch:Set,带有事件:UIEvent?){
let Sprojection=SKSpriteNode(图像名为“射弹”)
0.zPosition=1
射弹.position=CGPoint(x:player.position.x,y:player.position.y)
射弹.physicsBody=SKPhysicsBody(圆形半径:射弹.尺寸.宽度/2)
射弹.physicsBody?.isDynamic=真
射弹.physicsBody?.categoryBitMask=物理类别.射弹
投射物.physicsBody?.contactTestBitMask=PhysicsCategory.Monster
射弹.physicsBody?.collisionBitMask=PhysicsCategory.None
射弹.physicsBody?.usesPreciseCollisionDetection=true
self.addChild(投射物)
let action=SKAction.moveTo(x:self.frame.width+sparket.size.width,持续时间:0.5)
抛射。运行(动作、完成:{
抛射物。removeAllActions()
projective.removeFromParent()
})
}
根据杰克的评论,我假设你希望飞船“自动”发射,而不是在按住手指的同时重复发射
您可以使用“更新”功能控制自动拍摄。在我的示例中,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()
})
}
根据杰克的评论,我假设你希望飞船“自动”开火,而不是在按住手指的同时重复 您可以使用“更新”功能控制自动拍摄。在我的示例中,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()
})
}
开始触摸时,您可以调用函数开始拍摄,并每0.x秒重复一次。在结束时,您可以使计时器无效。首先是将投射代码移动到它自己的函数中。在开始触摸时,你可以调用一个函数开始拍摄,并每0.x秒重复一次。在结束时,您可以使计时器无效。首先是将投射代码移动到它自己的函数中。不客气。那么请把这个答案标记为正确,这样其他人就可以从这个问题中受益了。不客气。那么请将这个答案标记为正确,以便其他人可以从这个问题中受益