当前位置: 首页 > 面试题库 >

SKTextureAtlas不再在iOS 10中共享纹理

万选
2023-03-14
问题内容

看来,当从纹理图集中提取纹理时,我现在正在生成新的纹理,而不是在iOS 10上跨不同的精灵使用相同的纹理。在iOS
9上,此工作按预期进行。还有其他人遇到这个问题吗?也许我错过了一步,现在它已成为iOS 10的一部分。

注意:我创建了一个示例项目并创建了一个新的图集,然后只是将飞船拖入@ 1x中,我还尝试了预加载,但这也没有做任何事情。

码:

  let atlas = SKTexturAtlas(named:"Sprites")
  var texture = atlas.textureNamed("Spaceship")
  print("\(Unmanaged.passUnretained(texture)),\(Unmanaged.passUnretained(texture).toOpaque())")

  texture = atlas.textureNamed("Spaceship")
  print("\(Unmanaged.passUnretained(texture)),\(Unmanaged.passUnretained(texture).toOpaque())")

编辑:为了解决比较问题,我使用description属性比较两个纹理是否相等。但是要使此工作正常进行,您不能使用2个包含有确切名称和大小的纹理的地图集。我永远不会遇到这种情况,但是对于任何寻求帮助的人,请记住这一点。


问题答案:

为了解决这个问题,我不得不想出一种方法来缓存纹理,以使其不会重复:

private var textureCache = [String: SKTexture]()
extension SKTextureAtlas
{
    func texturesWithNames(_ names:[String]) -> [SKTexture]
    {
        var textures = [SKTexture]()
        names.forEach({textures.append(textureNamed($0))})
        return textures
    }
    func cachedTextureWithName(_ name:String) -> SKTexture
    {
        if  textureCache[name] == nil
        {

            textureCache[name] = textureNamed(name)
        }

        return textureCache[name]!
    }
    func cachedTexturesWithNames(_ names:[String]) -> [SKTexture]
    {
        var textures = [SKTexture]()
        names.forEach({textures.append(cachedTextureWithName($0))})
        return textures
    }
    func clearCache()
    {
        textureCache = [String: SKTexture]()
    }
}


extension SKTexture
{

    var name : String
    {
        return self.description.slice(start: "'",to: "'")!
    }


}


 类似资料:
  • 如何将众多用户的指纹与其他Android设备共享?例如,我们不想使用指纹设备。我们想使用Android设备进行指纹控制。用户将在我们的应用程序中保存个人指纹,当用户在其他Android设备中使用我们的应用程序时,他们可以使用这些指纹登录吗?有可能吗?

  • 问题内容: 我正在Python中进行多处理实验,并试图在两个进程之间共享一个字符串数组。这是我的python代码: 运行脚本时,我看到该脚本已正确填充,并且可在中找到,但不能在中找到。结果如下: 我忽略了什么吗? 预先感谢您的反馈。:) 问题答案: 我的猜测是: 存储3个指针。将它们分配给当前进程之外没有意义的内存地址。尝试访问此时包含垃圾邮件的无意义地址。 分配对所有过程都有意义的值似乎有帮助:

  • 问题内容: 我正在从python脚本中调用一个so文件。据我了解,我真的不需要释放使用ctypes在python中打开的共享库。但是,在我的so文件代码中,它dlopen另一个so文件并且不执行dlclose()。在这种情况下,从python端使用安全吗?我不必释放在ctypes内部加载的共享库soe文件吗? 问题答案: 始终遵循 “自己清洁后清理 ”的规则(尽管现代技术会为您提供清洁方面的帮助)

  • 问题内容: 我将Jenkins用于测试/构建目的,因此我使用以下配置创建了一个MultiJob项目: Test Job Build Job Install Job MultiJob是从Master Jenkins启动的,但是其他作业是 从其他Node 启动的。生成作业执行创建 BUILD_ID 的Shell脚本。现在,我希望将BUILD_ID作为参数传递给安装 作业。我怎样才能做到这一点?我唯一的

  • 使用时有点卡住了。如果我把它放在before窗口上,它似乎可以正常工作,但如果放在窗口的“apply”函数之后,它就会失败。 我正在测试两个流,主功能在不断摄取数据和控制流模型在更改模型的要求。 我能够在中正确设置并查看b0/b1,但是始终可以看到b0和b1在初始化时设置为0。 我是不是漏了什么明显的东西?