I am building a Game using SpriteKit, this game is like Mario Run and has short levels (120 at the moment) and here is how it is organized :
MenuScene>LevelScene>GameScene
I do try to fix performance issues When I load a level (sks file) for the first time it takes 5 to 8 seconds and during that time the LevelScene is unresponsive. After that the levels load much faster (around 1 second) but its still quiet long for me.
I did move the method who load the scene in a singleton and put that instance in a background Thread in my LevelScene in the method who creates the popup for my level ,even if now I don’t have the freeze of 5 seconds anymore I do have 2 concerns :
-I am pretty sure that’s not how that issue should be fixed
-I still have 1 second freeze each time I load a level , how can I fix it ?
I tough about adding a black node with an animation to hide the freeze but Whatever I add nothing appears.
Hey @nehemie! I’m not too familiar with SpriteKit itself so maybe somebody else might be able to help you better however I did want to check if you have looked into the root cause of the performance issues, particularly the initial ~5s load issue?
So I significantly dropped the number of levels in my project ,to 100 I do have 36 now . It takes now a second to load the level but I still have the freeze.
Would the size of the .sks be the reason of the freeze (~450ko per sks)?
I do have a TileMap of 300 columns and 15 rows on some levels ,is using references instead would improve performance ?
Can I make this method faster?
Is Scene Transition can just be made in Main Thread?
It sounds like you have the layouts for all the levels in your game in a single sks file? That sounds like the root cause of the problem, you should only want to load the data for a single level at a time, to reduce the memory footprint of your app.
Also, many games pre-load assets when the game launches. You will notice that first thing that you see after the splash screen for a lot of games is loading bar. This is when the game will load all of the assets that it needs in to memory. Even if it takes a few seconds, it means uninterrupted gameplay after that.
Hi steveb, thanks for your help, “file” is the argument of my method, it’s a String who gives me the .sks file for the level I want .
e.g. “file” would be a String with the value “Level_2-1” and it will return the file Level_2-1.sks
I did convert to reference all my actions in my action editor view and deleted useless TileMap Node, files are now around 160ko and I don’t have any freeze anymore .