我正在向SKSpriteNode加载一个500kb的背景图像,但是当我在设备中运行时,它显示来自调试器的消息:由于内存错误而终止。
我在模拟器上运行它,我可以看到加载图像时,内存消耗为700MB,需要1秒,此后1秒内存消耗仍为40MB。这是我如何将此背景图像加载到SKSpriteNode。我很确定这个图像的文件大小只有500kb。
HelloScene.m
-(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];
}
需要一些帮助 感谢
答案 0 :(得分:0)
您正在使用test_full.png
文件,文件大小为500kb。但它是 PNG 文件。文件大小500kb无助于理解该问题。
SpriteKit无法直接使用PNG文件进行渲染。它使用OpenGL ES API和原始RGBA 32位图像数据(基本上来自PNG文件)。在引擎盖下,SpriteKit使用UIImage(或类似的框架)来解码图像文件以获取原始图像数据。所以重要的一点是,图像文件的像素大小。存储图像的内存量等于WIDTH x HEIGHT x 4字节。