1
我想在SKSpriteNode
上平鋪一個SKTexture
。從我所看到的,這是不能直接作爲在這裏找到答案: How do you set a texture to tile in Sprite KitSprite Kit瓷磚SKTexture與CIFilter?
經審查,我注意到SKTexture
有textureByApplyingCIFilter
方法的參考。
這怎麼可能用來平鋪某個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];
而且這將是使用此解決方案,而不是使用多個具有相同SKTextures
SKSpriteNode
對象的內存後果?
好吧,可以計算更多的內存:紋理寬度*高度*(顏色深度位/ 8)...以及處理紋理的時間。收益:可能更小的捆綁包大小。 – LearnCocos2D
那麼在這種情況下,整個生成的圖像將在活內存中?例如,如果我們將單個SKTexture加載到內存(tile)中,然後創建一堆引用該紋理的SKSpriteNode對象,則實時內存將只是SKTexture(帶有單個tile)以及其他引用單個tile的SKSpriteNode對象?而不是有一個大的SKSpriteNode對象,它包含一個巨大的實時內存吃圖像,因爲像素數據剛剛被複制? –
不論紋理是如何創建的,無論是否有一個精靈或100個使用相同紋理都無關緊要。 CIFiltered紋理可能會創建原始紋理的副本,並複製其內存佔用空間。容易與儀器檢查。 – LearnCocos2D