9

テクスチャの SKTextureAtlas と最近傍フィルタリングの使用に問題があるようです。SKTextureAtlas を使用せずに最近傍フィルタリングを使用すると正常に動作しますが、SKTextureAtlas を使用するとすべてが線形フィルタリングに変更されます。

SKTextureAtlas を使用しない場合のコードと結果:

SKTexture* texture = [SKTexture textureWithImageNamed:@"grass"];
texture.filteringMode = SKTextureFilteringNearest;
SKSpriteNode* node = [SKSpriteNode spriteNodeWithTexture:texture size:CGSizeMake(512,512)];

Nearest Neighbor フィルタリングを生成する必要があり、実行する必要がある ここに画像の説明を入力

コードと SKTextureAtlas の結果:

SKTextureAtlas* atlas = [SKTextureAtlas atlasNamed:@"myAtlas"];
SKTexture* texture = [atlas textureNamed:@"grass"];
texture.filteringMode = SKTextureFilteringNearest;
SKSpriteNode* node = [SKSpriteNode spriteNodeWithTexture:texture size:CGSizeMake(512,512)];

最近傍フィルタリングを生成する必要があり、生成しない ここに画像の説明を入力

助言がありますか?

4

3 に答える 3

3

これは実に奇妙な問題です。不足している 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-05-24T20:25:34.953 に答える
1

私は自分のプログラムでこの問題を解決することができました。私が見つけたのは、テクスチャ アトラスが複数回インスタンス化された場合、アトラスからのすべてのテクスチャ ロードが SKTextureFilteringNearest に設定されていても、テクスチャは線形フィルタリングでレンダリングされるということです。私が最終的にやったのは、シングルトンを介してアトラスを提供し、すべてのテクスチャが SKTextureFilteringNearest に設定されたフィルタリングでロードされ、完全に機能することを確認することでした。

于 2014-01-19T01:44:44.780 に答える