SKSpritekit 加载映像内存错误



我正在将一个 500kb 的背景图像加载到 SKSpriteNode,但是当我在设备中运行时,它显示来自调试器的消息:由于内存错误而终止。

我在模拟器上运行它,我可以看到加载图像时,内存消耗为 700MB,需要 1 秒,在此之后 1 秒内存消耗仍然是 40MB。以下是我如何将此背景图像加载到SKSpriteNode的方法。我很确定这张图片的文件大小只有500kb。

你好场景

-(SKSpriteNode*) node {
SKSpriteNode* node = [SKSpriteNode node];
node = [SKSpriteNode spriteNodeWithImageNamed:@"test_full.png"];
node.position=CGPointMake(150, 100);
node.size= CGSizeMake(100, 100);
node.zPosition=0;
return node;
}
- (void)createSceneContents
{
self.backgroundColor = [UIColor blackColor];
self.scaleMode = SKSceneScaleModeAspectFit;
self.backgroundColor=[UIColor whiteColor];
[self addChild:[self node]];
}

ViewController.m

-(void)viewWillLayoutSubviews{
[super viewWillLayoutSubviews];
SKView *spriteView = (SKView *) self.view;
spriteView.showsDrawCount = YES;
spriteView.showsNodeCount = YES;
spriteView.showsFPS = YES;
HelloScene* hello = [HelloScene sceneWithSize:spriteView.bounds.size];
hello.scaleMode=SKSceneScaleModeAspectFill;
[spriteView presentScene: hello];
}

需要一些帮助谢谢

您正在使用test_full.png文件,文件大小为 500kb。但它是PNG文件。文件大小 500kb 无助于理解问题。

精灵不能直接使用 PNG 文件进行渲染。它使用OpenGL ES API和原始RGBA 32位图像数据(基本上来自PNG文件(。在引擎盖下,SpriteKit使用UIImage(或类似的框架(来解码图像文件以获取原始图像数据。所以重要的一点是,图像文件的像素有多大。存储图像的内存量等于宽度 x 高度 x 4 字节。

最新更新