swift - 平铺背景图像

标签 swift sprite-kit

尝试为自上而下的游戏创建平铺背景图像。 SKScene 是 8000,8000,我没有创建几个非常大的 Sprite ,而是尝试平铺它以提高性能。

 var coverageSize = CGSizeMake(8000,8000); 
    var textureSize = CGRectMake(0, 0, 100, 100); 
    var backgroundCGImage = [UIImage imageNamed:@"bg"].CGImage; //this line returns several errors.
    UIGraphicsBeginImageContext(CGSizeMake(coverageSize.width, coverageSize.height));
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextDrawTiledImage(context, textureSize, backgroundCGImage);
    UIImage *tiledBackground = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    SKTexture *backgroundTexture = [SKTexture textureWithCGImage:tiledBackground.CGImage];
    SKSpriteNode *backgroundTiles = [SKSpriteNode spriteNodeWithTexture:backgroundTexture];
    backgroundTiles.yScale = -1; 
    backgroundTiles.position = CGPointMake(0,0);
    [self addChild:backgroundTiles];

最佳答案

制作图 block 的一种方法是创建一个用于绘制图 block 的节点

您将适合屏幕的图 block 数量绘制到此特殊图 block 中

使用:

 var texture = self.view!.textureFromNode(drawingTile, crop: CGRectMake(-column.width, -row.height, self.frame.width + column.width , self.frame.height + row.height));

将此节点转换为纹理 现在从绘图节点中删除所有节点

使用此纹理将新节点添加到绘图节点。

现在我们的背景就在一个节点了。

当您需要滚动时,移动绘图节点,然后绘制缺失的 1 行 1 列图 block 。仅当您需要绘图模式发生很大变化以至于屏幕上有间隙需要填充时才执行此操作。再次使用上面的代码创建新的绘图模式纹理。冲洗,重复

关于swift - 平铺背景图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38318281/

相关文章:

ios - UITableViewAutomaticDimension 以及 heightForRow

swift - 碰撞检测 Spritekit 位掩码

ios - Sprite 套件 | swift 3 |将 SKWarpGeometry 应用于节点

ios - spriteKit 中的常规碰撞错误

swift - 如何使用继承创建节点?

ios - 在太空入侵者中生成 Sprite

swift - Objective-C 中的私有(private) Setter,从 Swift 3.2+ 访问

ios - 如何从父 View 中删除 uiview?

swift - UIScrollView 显示 subview 不正确

ios - 如何设置UIDatePicker仅几个月