2016-04-18 4 views
0

複数回使用される場合は、1つのSKTextureオブジェクトを使用することをお勧めします(https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKTexture_Ref/)。このSWIFTコードは私のアプリでの水のテクスチャが見えるようにする必要があります私の理解でSpriteKit SKTextureはSKSpriteNodeへの参照として渡されません。

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 "リソース?

+0

これを見てください:http://stackoverflow.com/a/30448038/3402095 – Whirlwind

答えて

1

あなたは参照渡しを正しく理解しているとは思わないが、炎の参照をスプライトに渡すと、スプライトはこのテクスチャの参照を保持します。

新しい参照で火災テクスチャを新しいテクスチャに変更しています。これは、古い参照を持つスプライトが自動的に新しい参照に変更されることを意味しません。

参照を確認する場合は、新しいテクスチャ全体を作成するのではなく、火災テクスチャとスプライトテクスチャを比較する必要があります。

テクスチャを変更する場合は、新しい参照を作成せずにテクスチャのデータを編集する必要があります。

関連する問題