2016-04-18 3 views
0

Apple рекомендует использовать один объект SKTexture, если он будет использоваться несколько раз (https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKTexture_Ref/).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(), оба объекта имеют один и тот же «огонь» "ресурс?

+0

Взгляните на это: http://stackoverflow.com/a/30448038/3402095 – Whirlwind

ответ

1

Я не думаю, что вы правильно понимаете проход по ссылке, вы передаете ссылку огня в свой спрайт, тогда спрайт сохранит ссылку на эту текстуру.

Вы меняете текстуру огня на новую текстуру с новой ссылкой. Это не означает, что спрайт со старой ссылкой автоматически изменится на новую ссылку.

Если вы хотите проверить ссылку, вы хотите сравнить текстуру огня с текстурой спрайта, а не создать совершенно новую текстуру.

Если вы хотите изменить текстуру, вам необходимо отредактировать данные текстуры, не создавая новую ссылку.

Смежные вопросы