Chr*_*ris 5 textures tiling ios sprite-kit swift
使用 SpriteKit,我如何平铺一个水平重复的 SKTexture 以填充 SKSpriteNode 的宽度?这就是我到目前为止所拥有的——仅拉伸纹理。
var header = SKSpriteNode()
let headerTexture = SKTexture(imageNamed: "inGameHeader-1.png")
header = SKSpriteNode(texture: headerTexture)
header.position = CGPoint(x: 0, y: CGRectGetMaxY(self.frame)-39)
header.size.width = CGRectGetWidth(self.frame)
header.size.height = 150
header.anchorPoint = CGPoint(x: 0,y: 1)
addChild(header)
Run Code Online (Sandbox Code Playgroud)
小智 1
这是我的解决方案:将图像发送到此函数,其中包含精灵的大小,然后是图块的大小。这将返回平铺的 SKTexture。
-(SKTexture *)tiledTextureImage:(UIImage *)image ForSize:(CGSize)size tileSize:(CGSize)tileSize{
// First we create a new size based on the longest side of your rect
int targetDimension = (int)fmax(size.width,size.height);
CGSize targetSize = CGSizeMake(targetDimension, targetDimension);
// Create a CGImage from the input image and start a new image context.
struct CGImage *targetRef = image.CGImage;
UIGraphicsBeginImageContext(targetSize);
CGContextRef contextRef = UIGraphicsGetCurrentContext();
// Now we simply draw a tiled image
CGContextDrawTiledImage(contextRef, CGRectMake(0,0, tileSize.width,tileSize.height), targetRef);
UIImage *tiledTexture = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// Finally create a texture and return it.
return [SKTexture textureWithImage:tiledTexture];
}
Run Code Online (Sandbox Code Playgroud)