Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 精灵套件-动画和;内存管理_Ios_Memory Management_Sprite Kit - Fatal编程技术网

Ios 精灵套件-动画和;内存管理

Ios 精灵套件-动画和;内存管理,ios,memory-management,sprite-kit,Ios,Memory Management,Sprite Kit,我现在正在iOS上摆弄精灵工具包,想知道它是否适合制作相对简单的2D游戏 由于我的ActionScript背景,我对使用Sprite工具包代码非常满意 但有件事我就是搞不懂。使用纹理图集作为资源的动画节点的内存非常大。我已经在我的项目中导入了一个图集(纹理大小约为35MB)。将纹理预加载到RAM中似乎还可以,但在我运行实际动画的那一刻,堆大小呈指数级增加(从大约80MB增加到780MB) 下面是我的代码: self.noahFrames = [[NSMutableArray alloc] ini

我现在正在iOS上摆弄精灵工具包,想知道它是否适合制作相对简单的2D游戏

由于我的ActionScript背景,我对使用Sprite工具包代码非常满意

但有件事我就是搞不懂。使用纹理图集作为资源的动画节点的内存非常大。我已经在我的项目中导入了一个图集(纹理大小约为35MB)。将纹理预加载到RAM中似乎还可以,但在我运行实际动画的那一刻,堆大小呈指数级增加(从大约80MB增加到780MB)

下面是我的代码:

self.noahFrames = [[NSMutableArray alloc] init];
SKTextureAtlas *noahAtlas = [SKTextureAtlas atlasNamed:@"noahAnimati"];

int imgCount = noahAtlas.textureNames.count;
for (int i=1; i <= imgCount; i++) {
    NSString *textureName = [NSString stringWithFormat:@"NoahMainMenuAnimation_%d", i];
    SKTexture *temp = [noahAtlas textureNamed:textureName];
    [self.noahFrames addObject:temp];
}


SKSpriteNode *noahNode = [self createSpriteWithName:@"noah" imagePath:@"Noah_main_menu_hd" positionXPath:@"MainMenu.Noah.x" positionYPath:@"MainMenu.Noah.y" scalePath:@"MainMenu.Noah.scale"];
[self addChild:noahNode];

//up to this point everything goes fine

[noahNode runAction:[SKAction repeatActionForever:
                     [SKAction animateWithTextures:self.noahFrames
                                      timePerFrame:0.1f
                                            resize:YES
                                           restore:YES]] withKey:@"animatedNoah"];
self.noahFrames=[[NSMutableArray alloc]init];
SKTextureAtlas*noahAtlas=[SKTextureAtlas atlasNamed:@“noahAnimati”];
int imgCount=noahatals.textureNames.count;

对于(inti=1;i我确实知道,当纹理加载到图形内存中时,它是在不进行任何压缩的情况下加载的,但我认为xcode不会监视图形内存,所以对我来说真的很奇怪。
我通常像你一样加载和执行动画,我没有这样的内存行为,但我在模拟器上测试时注意到了这一点。你是否使用iOS模拟器进行测试?当你达到这些内存级别时,你的应用程序会崩溃吗?

因此,当你跨运行操作行一步时,内存使用就会增加es?或者你可能会在每一帧都一遍又一遍地运行此操作,可能是针对多个节点?没错。不,我不会一遍又一遍地调用此操作。它只针对一个节点调用了一次。我在iPad 2上遇到了相同的问题。我今天在app store上发布的基于spritekit的应用程序在带有spr的视图控制器出现故障时立即崩溃要显示itekit视图。这些spritekit视图没有动画,只有简单的单色SpriteNode(甚至没有任何图像,只有简单的单色节点)。我在同一页面上有7个spritekit视图,但iPad 2无法处理。在这个答案中可以找到另一种减少纹理内存的方法,这是一个很好的观点。达到这些内存级别后,应用程序不会崩溃。我目前没有iOS设备,但我会将其发送给我的朋友,以便他可以n在他的iPad上试用,看看效果如何。我会让你知道它是如何运行的。所以我试着在设备(iPad2)上运行应用程序。启动动画堆后几帧大小达到256MB(我想这是iPad2上系统给你的最大容量)并崩溃了。也许你的代码被调用了多次(尝试用nslog调试)或者错误在程序的另一部分。