2014-01-12 136 views
1

我想在SKSpriteNode上平鋪一個SKTexture。從我所看到的,這是不能直接作爲在這裏找到答案: How do you set a texture to tile in Sprite KitSprite Kit瓷磚SKTexture與CIFilter?

經審查,我注意到SKTexturetextureByApplyingCIFilter方法的參考。

這怎麼可能用來平鋪某個SKTexture

這是我曾嘗試:

SKTexture *tile = [SKTexture textureWithImageNamed:@"tile"]; 
CIFilter *tileTransform = [CIFilter filterWithName:@"CIAffineTile" keysAndValues:kCIInputImageKey, conveyorTexture, nil ]; 
CGAffineTransform xform = CGAffineTransformIdentity; 
[tile setValue:[NSValue valueWithBytes:&xform 
            objCType:@encode(CGAffineTransform)] 
      forKey:@"inputTransform"]; 
tile = [tile textureByApplyingCIFilter:tileTransform]; 

而且這將是使用此解決方案,而不是使用多個具有相同SKTexturesSKSpriteNode對象的內存後果?

+0

好吧,可以計算更多的內存:紋理寬度*高度*(顏色深度位/ 8)...以及處理紋理的時間。收益:可能更小的捆綁包大小。 – LearnCocos2D

+0

那麼在這種情況下,整個生成的圖像將在活內存中?例如,如果我們將單個SKTexture加載到內存(tile)中,然後創建一堆引用該紋理的SKSpriteNode對象,則實時內存將只是SKTexture(帶有單個tile)以及其他引用單個tile的SKSpriteNode對象?而不是有一個大的SKSpriteNode對象,它包含一個巨大的實時內存吃圖像,因爲像素數據剛剛被複制? –

+0

不論紋理是如何創建的,無論是否有一個精靈或100個使用相同紋理都無關緊要。 CIFiltered紋理可能會創建原始紋理的副本,並複製其內存佔用空間。容易與儀器檢查。 – LearnCocos2D

回答

0

您可以創建一個SKSpriteNode,設置其紋理,並將其filter屬性設置爲您的CIFilter。 Filter的inputImage屬性自動設置爲SKSpriteNode的紋理。但請記住將其屬性shouldEnableEffects設置爲YES。