2

I have a simple class func for adding SKEmitterNode on many different occasions.

I cannot reproduce steps when the exception occurs. It happens rarely and quite randomly. I can call this method 500 times without an error or in some cases error can happen after 1 or 2 call, etc.

The problem/exception line is:

root?.addChild(sparks)

Below is the method and stack trace. I have no idea how to debug this. I've tried many different things but without success.

Any ideas ?

class func setSimpleSparksEffect(root:SKNode?, color:UIColor, position:CGPoint)
{
    if CGPointEqualToPoint(position, CGPointZero)
    {
        return
    }

    let sparks = SKEmitterNode(fileNamed: "SimpleSparks")
    sparks.alpha = GameObjectsDefaultAlpha
    sparks.particleColorSequence = nil
    sparks.particleColorBlendFactor = 1.0
    sparks.particleColor = color
    sparks.position = position
    sparks.zPosition = SparksElementsZPosition

    root?.addChild(sparks)
    sparks.runAction(SKAction.waitForDuration(NSTimeInterval(EmmiterSimpleShortDuration)), completion: { () -> Void in

        sparks.runAction(SKAction.fadeOutWithDuration(NSTimeInterval(FactorSparksFadeOutDuration)), completion: { () -> Void in

            sparks.removeAllActions()
            sparks.removeAllChildren()
            sparks.removeFromParent()

        })

    })
}

And stack trace:

Thread : Crashed: com.apple.main-thread
0  libc++abi.dylib                0x0000000199944ce4 __dynamic_cast + 52
1  SpriteKit                      0x000000018ab63f58 __15-[SKNode scene]_block_invoke + 60
2  SpriteKit                      0x000000018ab63f58 __15-[SKNode scene]_block_invoke + 60
3  SpriteKit                      0x000000018ab28038 SKCNode::walkUp(void (SKCNode*, bool*) block_pointer, bool) + 76
4  SpriteKit                      0x000000018ab63eac -[SKNode scene] + 132
5  SpriteKit                      0x000000018ab643ac -[SKNode insertChild:atIndex:] + 356
6  SpriteKit                      0x000000018ab64224 -[SKNode addChild:] + 76
7  DodgeMaster                    0x00000001000f1d80 static DodgieCommon.setSimpleSparksEffect(SKNode?, color : UIColor, position : CGPoint) -> () (DodgieCommon.swift:275)
8  DodgeMaster                    0x00000001000d2bc4 GameLevel.(gameLogicGoalerHitmeContact(GameLevel) -> (NSNotification) -> ()).(closure #1) (GameLevel.swift:502)
9  DodgeMaster                    0x0000000100125018 static Helper.(runAsyncOnMain(Helper.Type) -> (() -> ()) -> ()).(closure #1) (Helper.swift:270)
10 DodgeMaster                    0x00000001000b41c4 thunk (Pointoser.swift)
11 libdispatch.dylib              0x000000019aa917b0 _dispatch_call_block_and_release + 24
12 libdispatch.dylib              0x000000019aa91770 _dispatch_client_callout + 16
13 libdispatch.dylib              0x000000019aa96e20 _dispatch_main_queue_callback_4CF + 1844
14 CoreFoundation                 0x000000018574c258 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
15 CoreFoundation                 0x000000018574a0c0 __CFRunLoopRun + 1628
16 CoreFoundation                 0x0000000185678dc0 CFRunLoopRunSpecific + 384
17 GraphicsServices               0x00000001907cc088 GSEventRunModal + 180
18 UIKit                          0x000000018ad52f60 UIApplicationMain + 204
19 DodgeMaster                    0x000000010011de24 main (AppDelegate.swift:22)
20 libdyld.dylib                  0x000000019aac28b8 start + 4
sabiland
  • 2,526
  • 1
  • 25
  • 24
  • Maybe (I'll check again today) I've found the problem. It seems (I am not sure yet) when I am loading a new level, previous one is still not unloaded and somehow I call this method on un-loading level. – sabiland Sep 22 '15 at 06:09

1 Answers1

1

Another person on here had a similar problem which I think you may encountering too... I've tailored my response on that post for yours.

let sparksFile: String = NSBundle.mainBundle().pathForResource("SimpleSparks", ofType: "sks")!
let sparks = NSKeyedUnarchiver.unarchiveObjectWithFile(explosionFile) as! SKEmitterNode
sparks.alpha = GameObjectsDefaultAlpha
sparks.particleColorSequence = nil
sparks.particleColorBlendFactor = 1.0
sparks.particleColor = color
sparks.position = position
sparks.zPosition = SparksElementsZPosition

self.root?.addChild(sparks)
Community
  • 1
  • 1