首页 > 解决方案 > 尝试添加一个已经有父节点和线程 1 的 SKNode:signal SIGABRT

问题描述

我尝试使用我的 Asteroid 类,但我不断收到此错误消息。我尝试了一切,但我似乎无法弄清楚。

只有一颗小行星出现,然后出现一条线

AppDelegate:线程 1:信号 SIGABRT

我是 swift 的初学者,欢迎任何帮助。

class Asteroides:SKSpriteNode {

    init(img:String){
        let texture = SKTexture(imageNamed: img)
        super.init(texture: texture, color: .clear, size: texture.size())
        self.name = "Asteroid"
        self.setScale(0.2)
        self.zPosition = 2

        self.physicsBody = SKPhysicsBody(circleOfRadius: self.size.width/3.3, center: self.anchorPoint)
        self.physicsBody!.affectedByGravity = false
        self.physicsBody!.categoryBitMask = GameScene.physicsCategories.asteroid
        self.physicsBody!.collisionBitMask = GameScene.physicsCategories.none
        self.physicsBody!.contactTestBitMask  = GameScene.physicsCategories.planet | GameScene.physicsCategories.bullet
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func random() -> CGFloat {
        return CGFloat(Float(arc4random()) / 0xFFFFFFFF) //générer un nombre aléatoire
    }


    func random(min: CGFloat, max: CGFloat) -> CGFloat {
        return random() * (max - min) + min
    }


    func addAsteroid (parent: GameScene)  {

        let randomStart1 = random(min: self.size.height/2, max: parent.size.height - self.size.height/2)
        let startPoint1 =  CGPoint(x:randomStart1 , y:parent.size.width + self.size.width/2 )
        let endPoint1   =  CGPoint(x: randomStart1, y: -self.size.width/2)

        self.position = startPoint1
        parent.addChild(self)

        let moveAsteroid = SKAction.move(to: endPoint1 , duration: 3.5)
        let deleteAsteroide = SKAction.removeFromParent()
        let asteroidSeq = SKAction.sequence([moveAsteroid,deleteAsteroide])

        self.run(SKAction.repeatForever(asteroidSeq))
    }
 }

在游戏场景中:

 private var asteroide = Asteroides(img: "Asteroid")

    func newlevel(){
        func parametersLevel(spawn : SKAction){
            let spawning = spawn
            let waitSpawn = SKAction.wait(forDuration: 0.8)
            let sequence = SKAction.sequence([waitSpawn,spawning])//sequence:asteroides+attendre 0.8 sec
            let spawnForever = SKAction.repeatForever(sequence)
            self.run(spawnForever)
        }
        parametersLevel(spawn:SKAction.run(asteroids))
    }

    func asteroids (){
        asteroide.addAsteroid(parent: self)
     }

标签: iosswiftsprite-kitsigabrt

解决方案


推荐阅读