我是通过做游戏开始学习swift的,遇到了一些问题。
我正在做一个瓷砖游戏。我创建了一 block 带有一些孔的 6x6 白色瓷砖板,在它们上面我创建了可以移动彩色瓷砖的瓷砖。
- 白色瓷砖是静态的
- 彩色瓷砖是动态的
然后我想,为什么不把背景图 block 做成一个完整的 Sprite ,我就去做了,但我遇到了问题。
正如您在第二张图片中看到的,白色方 block 和彩色方 block 与它们的位置不匹配。他们之间有一点差距。我有一个位置数组,瓷砖放置在相同的位置,但是当我创建 Sprite 时,它们会稍微移动一点。
let boardTexture = self.view?.texture(from: backgroundNodes)
boardBackground = SKSpriteNode(texture: boardTexture)
在搜索和阅读之后,我尝试了所有这些但没有帮助:
- 在第一次更新调用后实例化所有内容
- 向 backgroundNodes 添加另一个与屏幕一样大的 Sprite
- 更改 SKTexture 过滤模式
- 裁剪位置例如:1.2345 -> 1.2
最佳答案
你应该总是使用
SKView().texture(from: SKNode, crop: CGRect)
否则你很容易得到伪影。 Crop 通常应该是
CGRect(x:-size.width/2, y:-size.height/2, width:size.width, height:size.height)
如果您的节点具有默认 anchor 0.5 0.5(即中心)。使用它会给你你想要的尺寸。你也不需要这个
self.view?.texture(from:backgroundNodes)
相反,只是说
SKView().texture(from:backgroundNodes)
并且您可以避免在某处保留引用。此外,如果您在 sknode 子类的 init 函数中执行某些操作,则不会有成员“view”,因为它尚未添加到树中。
关于ios - Swift SKView textureFromNode 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29759286/