Preloading textures in SpriteKit

后端 未结 2 1830
长情又很酷
长情又很酷 2021-02-02 03:19

I\'ve done some research and I can\'t seem to find anything that clearly explains how to go about preloading both single textures and textures within animations. I\'m currently

相关标签:
2条回答
  • 2021-02-02 03:56

    I tried to implement appzYourLife answer but it increased the time to load every texture. So I ended up putting all the most used Sprites in one single atlas and puting it in a singleton.

    class Assets {
        static let sharedInstance = Assets()
        let sprites = SKTextureAtlas(named: "Sprites")
    
        func preloadAssets() {
            sprites.preloadWithCompletionHandler {
                print("Sprites preloaded")
            }
        }
    }
    

    I call Assets.sharedInstance.preloadAssets() in menuScene. And:

    let bg1Texture = Assets.sharedInstance.sprites.textureNamed("background1")
    bg1 = SKSpriteNode(texture: bg1Texture)
    

    to reference a texture already loaded in memory.

    0 讨论(0)
  • 2021-02-02 03:58

    One Single Texture Atlas

    Put all your assets into a single Sprite Atlas. If they don't fit, try at least to put all the assets of a single scene into a single Sprite Atlas

    Preloading

    If you want you can preload the texture atlas in memory with this code

    SKTextureAtlas(named: "YourTextureAtlasName").preloadWithCompletionHandler { 
        // Now everything you put into the texture atlas has been loaded in memory
    }
    

    Automatic caching

    You don't need to save a reference to the texture atlas, SpriteKit has an internal caching system. Let it do it's job.

    Which name should I use to reference my image?

    Forget the name of the file image, the name you assign to the image into Asset Catalog is the only name you will need.

    How can I create a sprite from an image into a texture atlas?

    let texture = SKTextureAtlas(named:"croc").textureNamed("croc_walk01")
    let croc = SKSpriteNode(texture: texture)
    
    0 讨论(0)
提交回复
热议问题