#ios #swift #sprite-kit #sigabrt
#iOS #swift #sprite-kit #sigabrt
Вопрос:
Я пытаюсь использовать свой класс Asteroid, но продолжаю получать это сообщение об ошибке. Я перепробовал все, но, похоже, не могу понять это.
Появляется только один астероид, а затем появляется поток на
AppDelegate: поток 1: signal 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)
}
Комментарии:
1. У вас есть только один узел asteroid. При каждом запуске
asteroids
вы добавляете этот узел; при втором запуске вы получаете сбой. Вам нужно каждый раз выделять новый астероид и добавлять его в массив или аналогичный2. Не могли бы вы привести мне пример, пожалуйста? Я не вижу, как это сделать. Спасибо