Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.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 我应该在sprite工具包的属性中缓存纹理吗?_Ios_Objective C_Caching_Sprite Kit_Sktexture - Fatal编程技术网

Ios 我应该在sprite工具包的属性中缓存纹理吗?

Ios 我应该在sprite工具包的属性中缓存纹理吗?,ios,objective-c,caching,sprite-kit,sktexture,Ios,Objective C,Caching,Sprite Kit,Sktexture,我正在游戏中使用图像资源的地图集。在游戏场景开始时,我正在使用SKTextureAtlas PreloTextureAtlass预加载我的所有地图册,这在我开始使用它时产生了很大的不同。我的问题是: 我是否应该为每个纹理创建一个属性,这些纹理将一次又一次地应用于繁殖的怪物或拾取精灵?还是因为我在游戏场景中预装了我的地图集,所以完全没有必要增加开销 下面是怪物类中两个非常简单的例子 缓存纹理: - (id)initWithSize:(CGSize)size { if (self = [su

我正在游戏中使用图像资源的地图集。在游戏场景开始时,我正在使用SKTextureAtlas PreloTextureAtlass预加载我的所有地图册,这在我开始使用它时产生了很大的不同。我的问题是:

我是否应该为每个纹理创建一个属性,这些纹理将一次又一次地应用于繁殖的怪物或拾取精灵?还是因为我在游戏场景中预装了我的地图集,所以完全没有必要增加开销

下面是怪物类中两个非常简单的例子

缓存纹理:

- (id)initWithSize:(CGSize)size
{
    if (self = [super init]) {
        SKTextureAtlas * atlas = [SKTextureAtlas atlasNamed:monsterAtlas];
        self.monsterFighterTexture = [atlas textureNamed:@"monster-fighter"];
    }
    return self;
}

- (Monster *)monster
{
    Monster * monster = [Monster spriteNodeWithTexture:self.monsterFighterTexture];
    return monster;
}
不要缓存纹理

- (Monster *)monster
{
    SKTextureAtlas * atlas = [SKTextureAtlas atlasNamed:monsterAtlas];
    Monster * monster = [Monster spriteNodeWithTexture:[atlas textureNamed:@"monster-fighter"]];
    return monster;
}

使用纹理图集时,使用[atlas TextureName:@monster fighter]生成的每个纹理都将是内存中同一纹理对象的引用。要扩展Okapi已经说明的内容,一旦加载纹理图集并至少有一个强引用,该图集将保留在内存中。有几种方法可以做到这一点。例如,您可以创建一个单例来保存所有地图集或使它们成为类属性。这真的是个人喜好的问题。太好了。谢谢因此,我不应该缓存单个纹理,而应该将atlas缓存在属性中,并使用TextureName访问纹理。