gpt4 book ai didi

ios - CGContextDrawTiledImage 超过一定尺寸显示黑色背景

转载 作者:行者123 更新时间:2023-11-28 08:31:56 25 4
gpt4 key购买 nike

完全是 Swift 和 SpriteKit 的新手,所以请保持温柔。

我正在开发一个简单的游戏,目前它只不过是一个游戏世界和一个向下移动直到到达游戏世界边缘然后死亡的玩家(嘿!我在这里学习并开始了解游戏物理等)。

无论如何,我用下面的代码渲染了我的背景,我想创建一个半径为 2000 的圆形 map ,我想平铺背景图像来填充空间,下面的代码创建平铺背景:

let coverageSize = CGSizeMake(8000, 8000)
let textureSize = CGRectMake(0, 0, 599, 519)
let backgroundCGImage = UIImage(named: "background")?.CGImage
UIGraphicsBeginImageContext(CGSizeMake(coverageSize.width, coverageSize.height))
let context = UIGraphicsGetCurrentContext()
CGContextDrawTiledImage(context, textureSize, backgroundCGImage)
let tiledBackground = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

let backgroundTexture = SKTexture(image: tiledBackground)
let backgroundTiles = SKSpriteNode(texture: backgroundTexture)
backgroundTiles.yScale = 0.5
backgroundTiles.xScale = 0.5

let cropNode = SKCropNode()
let mask = SKShapeNode(circleOfRadius: 2000)
mask.fillColor = UIColor(red: 0/255, green: 0/255, blue: 255/255, alpha: 1.0)
cropNode.maskNode = mask
cropNode.addChild(backgroundTiles)
self.world?.addChild(cropNode)

注意 coverageSize 的大小,如果我将 coverageSize 留在停机坪,我必须创建它来覆盖圆半径的大小。 2000 然后背景图像正确显示,一旦我超过 2000 然后背景显示为黑色。如果我将 coverageSize 保留为 2000,那么我会在纹理边缘和圆圈边缘之间显示蓝色背景。

谁能看出我做错了什么?有没有更好的方法来绘制在特定半径内平铺的图像?

最佳答案

只需从一个简单的蓝色图像开始,并确保您的裁剪在继续组合裁剪和图 block 节点之前首先起作用。此外,虽然在 CoreGraphics 中制作图 block 会起作用,但它会很慢并且会占用大量内存。在我的 blog post 上可以找到一个大大改进的 impl ,您可以直接在 SpriteKit 着色器中进行平铺,然后裁剪结果。一定要用白色裁剪,裁剪是一个简单的 0/1 阈值测试,你不应该使用颜色。

关于ios - CGContextDrawTiledImage 超过一定尺寸显示黑色背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38681283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com