SpriteKit SKTexture 未作为对 SKSpriteNode 的引用传递
Posted
技术标签:
【中文标题】SpriteKit SKTexture 未作为对 SKSpriteNode 的引用传递【英文标题】:SpriteKit SKTexture is not passed as reference to SKSpriteNode 【发布时间】:2016-04-18 14:17:29 【问题描述】:如果要多次使用,Apple 建议使用一个 SKTexture 对象 (https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKTexture_Ref/)。
所以我想测试它是否真的作为参考传递:
var fireSpriteTexture:SKTexture = SKTexture(imageNamed: "fire")
let fireSprite = SKSpriteNode(texture: fireSpriteTexture)
fireSprite.position = CGPointMake(50,50)
fireSprite.zPosition = 100
// Change texture -> We should see no fire
fireSpriteTexture = SKTexture(imageNamed: "water")
self.addChild(fireSprite)
据我了解,这个快速代码应该使水纹理在我的应用程序中可见,但实际上火纹理放置在屏幕上。
为什么?是bug吗?
为了更清楚,我还想知道如果我用 SKSpriteNode(imageNamed: "fire") 初始化我的节点然后用它的 copy() 方法复制它会发生什么,两个对象是否共享相同的“火”资源?
【问题讨论】:
看看这个:***.com/a/30448038/3402095 【参考方案1】:我认为您没有正确理解按引用传递,您将火的引用传递给您的精灵,然后精灵将保留此纹理的引用。
您正在将火纹理更改为具有新参考的新纹理。这并不意味着具有旧引用的精灵会自动更改为新引用。
如果你想检查参考,你想比较火纹理和精灵纹理,而不是创建一个全新的纹理。
如果要更改纹理,则需要在不创建新引用的情况下编辑纹理的数据。
【讨论】:
以上是关于SpriteKit SKTexture 未作为对 SKSpriteNode 的引用传递的主要内容,如果未能解决你的问题,请参考以下文章
SpriteKit SKTexture mipmap 不起作用
SpriteKit SKTexture.preloadTextures 高内存使用 Swift
如何将带有 alpha 的 PNG 转换为 RGBA4444 以便在 SpriteKit SKTexture 中使用它?