2

I have created a spriteKit game and have a problem with performance issues.

Problem:
FPS gets stuck at 40.0

How and when does it happen
1. I have a pause function in my game by just using view!.scene?.paused = true Sometimes when I hit the home button, launch another app, then go back to the game the FPS gets 'stuck' at 40 and doesnt climb back up to 60.0. (Sometimes it does)
2. I have a 'sharing' Facebook and Twitter icon where when you tap on it you can post/share/tweet something on your account. This icon can be seen in the pause menu. After posting or returning back to the game FPS gets stuck at 40 FPS (And again, sometimes it does climb back up to 60. Sometimes it does not)
3. To clarify, this doesnt happen mid-game. This only happens if I minimize the app, launch the Facebook/Twitter icons, during reminder pop-ups.

Temporary fix
There is a temporary fix to this, which is to minimize the app and then launching it again. However, I wouldnt want my users to experience this at all. If possible Id like to eliminate this problem altogether.

What I have tried so far to fix this
1.Ive tried running this on instruments (time Profiler) but nothing really caught my eye. Thought I have to say I am quite new with instruments. 2. There is a similar question here but for him disabling UIKit items fixed it for him, and I dont have any of that.
3. I initially thought it was a SKShapeNode issue so I changed my sprites to SKSpriteNode. No help here either.
4. I have tried without the USB cable attached to the phone and tried running it using the Run button on XCode. No difference.
5. Ive tried rebooting device and laptop. Didnt help.
6. Tried this on multiple devices. Same issue.

Stats?
Game typically starts out at 20 nodes and 5 draws and can go up to 60 nodes 6 draws but it will actually still run smooth as long as I dont initiate any of the triggering methods mentioned above.

I have spent alot of time trying to find a solution for this. Changing codes and streamlining it. Googling it. I really need help on this one. I would really appreciate some help.

Update for comment #1
For you first inquiry
1) I have a SKSpriteNode as the pause button during gameplay for the user to pause the game if he wants to.
2) I have func applicationWillResignActive(application: UIApplication) {} in my AppDelegate.swift file that triggers a GameScene.swift function that changes a flag from true to false so that I know when the user goes out and come back in again. And I have my update block searching for that flag. If it is true, display the pause menu. However, this 40FPS issue happened before I added this whole pause/unpause thing. (The 40 FPS issue is what made me create the pause menu for this) (I know too in the latest ver. of swift that it will auto-pause when the app is minimized and unpause when I bring it back up.)

Community
  • 1
  • 1
C. Wagner
  • 461
  • 7
  • 13
  • At what point to you pause/restart the scene in relation to active/background/foreground events, and what else do you do in such events? Just to make sure you don't duplicate your scene or double any work being done somehow. Also you say you pause the game by using `view!.scene?.paused = false`, I suppose that's an oversight an you mean true to pause and false to unease. – jcaron Dec 14 '15 at 00:48
  • Yes what I wanted to say was `view!.scene?.paused = false` to resume and true to pause. I will edit the original post. As for your first inquiry I will add it on the original post as it will be too lengthy. – C. Wagner Dec 14 '15 at 06:09
  • I am in agreement with jcaron, it sounds like you are adding in additional nodes/scenes/ or some other object when you transition from resign back to active, post the actual code that does this part of the logic – Knight0fDragon Dec 14 '15 at 19:53

0 Answers0