我似乎有一个问题,使用SKTextureAtlas和最近邻居过滤纹理。当我使用没有SKTextureAtlas的最近邻过滤时,它工作得很好,但是当我使用SKTextureAtlas时,一切都变成了线性过滤。
没有SKTextureAtlas的代码和结果:
SKTexture* texture = [SKTexture textureWithImageNamed:@"grass"];
texture.filteringMode = SKTextureFilteringNearest;
SKSpriteNode* node = [SKSpriteNode spriteNodeWithTexture:texture size:CGSizeMake(512,512)];应该产生最近的邻居过滤&做

使用SKTextureAtlas的代码和结果:
SKTextureAtlas* atlas = [SKTextureAtlas atlasNamed:@"myAtlas"];
SKTexture* texture = [atlas textureNamed:@"grass"];
texture.filteringMode = SKTextureFilteringNearest;
SKSpriteNode* node = [SKSpriteNode spriteNodeWithTexture:texture size:CGSizeMake(512,512)];应该产生最近邻滤波&不

有什么建议吗?
发布于 2014-01-17 10:06:25
我一直在努力解决同样的问题。
当您为来自一个SKTexture的SKTextureAtlas设置过滤模式时,它似乎为该地图集中的所有内容设置了过滤模式。
我最终解决了这个问题,制作了两个SKTextureAtlas (AtlasLinear和AtlasNearest)。一个是我的普通艺术品,另一个是皮皮拉。这是一种魅力。
然而,在非常小的atlasses,我有时会得到奇怪的小像素错误。如果这个弹出给你,它实际上有助于添加一些大的白色块png到你的像素艺术地图集。
祝好运。
发布于 2014-05-24 20:25:34
这的确是一个奇怪的问题。在我看来,缺少一个API:[SKTextureAtlas atlasNamed:atlasName withFilteringMode:filteringMode]。
我暂时不使用这样的API,而是使用以下方法:
-(SKTextureAtlas *) textureAtlasWithName:(NSString *)atlasName filteringMode:(SKTextureFilteringMode)filteringMode {
SKTextureAtlas * result = [SKTextureAtlas atlasNamed:atlasName];
NSArray * textureNames = [result textureNames];
if ([textureNames count] > 0) {
SKTexture * aTexture = [result textureNamed:[textureNames lastObject]];
[aTexture setFilteringMode:filteringMode];
} else {
NSLog(@"WARNING: couldn't find any textures in the atlas %@; filtering mode set likely failed.", result);
}
return result;
}发布于 2014-01-19 01:44:44
我设法在我的程序中解决了这个问题。我发现,如果一个纹理地图集被实例化不止一次,即使地图集中的所有纹理负载都被设置为SKTextureFilteringNearest,纹理也是用线性滤波来呈现的。我最后所做的是通过一个单例提供我的地图集,并确保所有的纹理加载与过滤设置为SKTextureFilteringNearest和它完美地工作。
https://stackoverflow.com/questions/19992048
复制相似问题