Swift SpriteKit,Can';不要多次发射子弹

Swift SpriteKit,Can';不要多次发射子弹,swift,sprite-kit,swift4,Swift,Sprite Kit,Swift4,我正在做一个小游戏,里面有一艘宇宙飞船,你可以发射一颗子弹,当我运行程序,点击发射一颗子弹时,它可以工作,但是当我再次点击时它不会发射。它给了我 Thread 1: signal SIGABRT 当我第二次尝试开火时。谁能帮帮我吗 代码如下: import SpriteKit import GameplayKit import UIKit class GameScene: SKScene { let player = SKSpriteNode(imageNamed: "mySpaceshi

我正在做一个小游戏,里面有一艘宇宙飞船,你可以发射一颗子弹,当我运行程序,点击发射一颗子弹时,它可以工作,但是当我再次点击时它不会发射。它给了我

Thread 1: signal SIGABRT
当我第二次尝试开火时。谁能帮帮我吗

代码如下:

import SpriteKit
import GameplayKit
import UIKit

class GameScene: SKScene {

let player = SKSpriteNode(imageNamed: "mySpaceship")
//let stars = SKSpriteNode(imageNamed: "stars")
let bullet = SKSpriteNode(imageNamed: "bullet")

override func didMove(to view: SKView) {
    //print(frame.size.width)
    //print(frame.size.height)

    /*stars.position = CGPoint(x: self.size.width/2, y:self.size.height/2)
    addChild(stars)*/
    player.position = CGPoint(x:0, y:0)
    player.zPosition = 2
    self.addChild(player)


}

func fireBullet() {
    bullet.position = player.position
    bullet.zPosition = 1
    self.addChild(bullet)

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


}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    print("Fired bullet")
    fireBullet()
}

override func update(_ currentTime: TimeInterval) {
}


}
导入SpriteKit
导入游戏工具包
导入UIKit
类游戏场景:SKScene{
let player=SKSpriteNode(图像名为:“mySpaceship”)
//let stars=SKSpriteNode(图像名为“stars”)
让bullet=SKSpriteNode(图像名为:“bullet”)
覆盖func didMove(到视图:SKView){
//打印(帧、大小、宽度)
//打印(框架、尺寸、高度)
/*stars.position=CGPoint(x:self.size.width/2,y:self.size.height/2)
addChild(星星)*/
player.position=CGPoint(x:0,y:0)
player.zPosition=2
self.addChild(播放器)
}
func fireball(){
bullet.position=player.position
bullet.zPosition=1
self.addChild(项目符号)
让moveBullet=SKAction.moveTo(y:self.size.height+bullet.size.height,持续时间:1)
让deleteBullet=SKAction.removeFromParent()删除
让bulletSequence=SKAction.sequence([moveBullet,deleteBullet])
bullet.run(bulletSequence)
}
覆盖func TouchesBegind(Touchs:Set,带有事件:UIEvent?){
打印(“发射子弹”)
火弹()
}
覆盖函数更新(uCurrentTime:TimeInterval){
}
}
所有这些代码都在我的GameSecene.swift文件中。谢谢


更新:在查看节点计数器后,我观察到如果在删除前一个项目之后发射一个项目(使总节点计数为2),那么该项目就可以正常射击。但是,如果我在前一个项目符号被删除(使节点计数为2)之前执行该项目符号,程序将崩溃。有没有办法在不等待前一颗子弹被删除的情况下再发射一颗子弹

您只需要在fireBullet方法中初始化子弹精灵

func fireBullet() {
    // make sure you initialize bullet here.
    let bullet = SKSpriteNode(imageNamed: "bullet")
    bullet.position = player.position
    bullet.zPosition = 1
    self.addChild(bullet)

    let moveBullet = SKAction.moveTo(y: self.size.height +   bullet.size.height, duration: 1)
    let deleteBullet = SKAction.removeFromParent()
    let bulletSequence = SKAction.sequence([moveBullet, deleteBullet])
    bullet.run(bulletSequence)
  }

您命名为“let bullet”的精灵节点是项目符号,而不是“bullet”。如果要使用与节点相同的图像,请创建副本。@ElTomato您能告诉我如何创建副本吗?func giveMeBullet()->SKSpriteNode(){let bulletText=SKTexture(ImageName:“bullet”)let bulletNode=SKSpriteNode(纹理:bulletText)return bulletNode}