使用imageWithContentsOfFile:在spritekit中加载纹理

时间:2014-06-20 07:01:47

标签: ios uiimage sprite-kit

所以,我在其中一个讨论here中注意到了这个建议。 它说,为了在完成纹理后释放内存,可能的解决方案将是下一个:

  1. 使用+ imageWithContentsOfFile创建UIImages:
  2. 通过调用SKTexture / + textureWithImage :( UIImage *)从生成的UIImage对象创建SKTextures。
  3. 我的内存问题来自高分辨率背景和很少的嵌入式滚动视图,因此我尝试了上述实现 - 它在内存方面起作用。

    问题是看起来像这样,imageWithContentsOfFile:在视网膜设备中,将@ 2x图像缩放2,所以我需要再次显式缩放0.5。

    如何在调用此方法时确保正确缩放?

    这是我的代码:

    NSString *path = [[NSBundle mainBundle] pathForResource:@"sc_01_bg" ofType:@"png"];
    UIImage *img = [UIImage imageWithContentsOfFile:path];
    SKSpriteNode *backgroundSprite = [SKSpriteNode spriteNodeWithTexture:[SKTexture textureWithImage: img]];
    

1 个答案:

答案 0 :(得分:0)

实际上,只有对这个答案的支持,并且upvote是我的。我现在无法记住为什么我会提出这个答案,因为我从来没有遇到过这样的问题。

如果您仍想使用该答案中陈述的方法,则应使用[UIImage imageNamed:@"imageName"]代替[UIImage imageWithContentsOfFile:path]。也许,UIKit并没有使用imageWithContentsOfFile:方法自动处理视网膜/非视网膜图像。

但基本上你不需要那个。查看LearnCocos2D对该问题的回答。

PS:释放SKScene使用的内存,只需调用

即可
[self.skView removeFromSuperview];
self.skView = nil;