Попытка добавить SKNode, у которого уже есть родительский Swift

Я создаю игру, и я продолжаю получать эту ошибку для моего метода создания пуль, связанного с джойстиком. Я хочу повторно создавать узлы, когда джойстик активен Вот как я создаю метод запуска

override func didMoveToView(view: SKView) {

if fireWeapon == true {

 NSTimer.scheduledTimerWithTimeInterval(0.25, target: self, 
 selector: Selector ("spawnBullet1"), userInfo: nil, repeats: true)
 }
}
func spawnBullet1(){

self.addChild(bullet1)

bullet1.position = CGPoint (x: hero.position.x , y:hero.position.y) 
bullet1.xScale = 0.5
bullet1.yScale = 0.5
bullet1.physicsBody = SKPhysicsBody(rectangleOfSize: bullet1.size)
bullet1.physicsBody?.categoryBitMask = PhysicsCategory.bullet1
bullet1.physicsBody?.contactTestBitMask = PhysicsCategory.enemy1
bullet1.physicsBody?.affectedByGravity = false
bullet1.physicsBody?.dynamic = false
}
override func touchesBegan(touches: Set<UITouch>, withEvent  
event:UIEvent?) {

for touch in touches {
    let location = touch.locationInNode(self)

    let node = nodeAtPoint(location)
    if (CGRectContainsPoint(joystick.frame, location)) {
        stickActive = true

        if stickActive == true {

        fireWeapon = true
}

первая пуля запускается, как и планировалось, и отлично работает, однако каждый раз, когда запускается вторая пуля, приложение вылетает, и я получаю сообщение об ошибке. может кто подскажет альтернативный способ создания скорострельности


person gkolman    schedule 27.04.2016    source источник
comment
Вам нужно удалить пулю1 перед выстрелом следующей пули или каждый раз создавать новую пулю.   -  person Abdou023    schedule 28.04.2016
comment
Покажите нам, где создается переменная bullet1   -  person Mate Hegedus    schedule 28.04.2016
comment
что вы имеете в виду, когда говорите, что создали @MateHegedus   -  person gkolman    schedule 28.04.2016
comment
Где объявлена ​​переменная bullet1??   -  person Mate Hegedus    schedule 28.04.2016
comment
в методе NSTimer @mateHegedus я также пробовал метод запуска блока, который не работал   -  person gkolman    schedule 28.04.2016
comment
Чувак, я не смогу тебе помочь, если ты не скажешь мне, где/как объявлена ​​пуля1. Это выглядит примерно так: var bullet1 = ...   -  person Mate Hegedus    schedule 28.04.2016
comment
оооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо Позвольте? @MateHege? пусть bullet1 = SKSpriteNode(imageNamed: bullet.png) в моем классе перед моим методом переопределения представления   -  person gkolman    schedule 28.04.2016
comment
Да. Что-то вроде self.addChild(SKSpriteNode(imageNamed: bullet.png))   -  person Mate Hegedus    schedule 28.04.2016
comment
но если я объявлю пулю1 в моем методе порождения пули, как мне вызвать пулю1 в других методах @MateHegedus, она определена в моем классе, поэтому я могу вызывать ее в других методах, потому что у меня пуля1 движется в направлении джойстика   -  person gkolman    schedule 28.04.2016
comment
Затем пусть bullet1 = SKSpriteNode(imageNamed: bullet.png)   -  person Mate Hegedus    schedule 28.04.2016
comment
я уже за свой класс. Можете ли вы обновить свой ответ? я не понимаю @MateHegedus   -  person gkolman    schedule 28.04.2016
comment
Давайте продолжим обсуждение в чате.   -  person gkolman    schedule 28.04.2016


Ответы (1)


Вместо self.addChild(bullet1) нужно что-то вроде self.addChild(SKSpriteNode(imageNamed: "bullet.png"))

Это потому, что вам нужно создавать новую пулю каждый раз, когда вы стреляете, вы не хотите каждый раз перемещать одну и ту же пулю.

person Mate Hegedus    schedule 27.04.2016
comment
Итак, вы говорите, что мне нужно создать отдельный метод с именем createbullet(), который добавляет дочерний элемент, а затем вызывает этот метод в моем методе spawnBullet1() @mateHegedus - person gkolman; 28.04.2016
comment
@gkolman нет, вам нужно что-то вроде self.addChild(createBullet()) - person Mate Hegedus; 28.04.2016
comment
что ты имеешь в виду createBullet()? зачем переменной содержать входные параметры, это переменная или метод? - person gkolman; 28.04.2016
comment
Итак, вы хотите, чтобы я создал отдельную функцию с self.addchild(bullet1) в ней, а затем вызвал этот метод в моем методе spawnbullet1()? @MateHegedus - person gkolman; 28.04.2016