首页 文章

SpriteKit SKTexture不作为对SKSpriteNode的引用传递

提问于
浏览
0

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)

在我的理解中,这个快速的代码应该使我的应用程序中的水纹理可见但事实上火纹理被放置在屏幕上 .

为什么?这是一个错误吗?

为了更清楚,我还想知道如果我用SKSpriteNode(imageNamed:“fire”)初始化我的节点然后用它的copy()方法复制它会发生什么,两个对象是否共享相同的“fire”资源?

1 回答

  • 1

    我不认为你理解通过引用传递正确,你将火的引用传递给你的精灵,然后精灵将保留这个纹理的引用 .

    您正在使用新引用将fire texture更改为新纹理 . 这并不意味着具有旧引用的sprite将自动更改为新引用 .

    如果要检查参考,则需要将火焰纹理与精灵纹理进行比较,而不是创建全新的纹理 .

    如果要更改纹理,则需要编辑纹理数据而不创建新引用 .

相关问题