Swift SKView textureFromNode 出错了

Posted

技术标签:

【中文标题】Swift SKView textureFromNode 出错了【英文标题】:Swift SKView textureFromNode goes wrong 【发布时间】:2015-06-27 20:26:06 【问题描述】:

我是通过做游戏开始学swift的,遇到了一些问题。 我正在做一个瓷砖游戏。我创建了一块 6x6 的白色瓷砖板,上面有一些孔,在它们上面我创建了可以移动彩色的瓷砖。

白色瓷砖是静态的 色块动态

然后我想,为什么不让背景图块成为一个完整的精灵,我就去做了,但我遇到了问题。

正如您在第二张图片中看到的那样,白色瓷砖和彩色瓷砖的位置不匹配。他们之间有一点差距。我有一个位置数组,并且图块放置在同一位置,但是当我创建精灵时,它们会移动一点。

let boardTexture = self.view?.texture(from: backgroundNodes)
boardBackground = SKSpriteNode(texture: boardTexture)

搜索和阅读后,我尝试了所有这些但没有帮助:

在第一次更新调用后实例化所有内容 向 backgroundNodes 添加另一个屏幕更大的精灵 更改 SKTexture 过滤模式 作物位置例如:1.2345 -> 1.2

【问题讨论】:

【参考方案1】:

你应该总是使用

SKView().texture(from: SKNode, crop: CGRect) 

否则你很容易得到工件。 Crop 通常应该是

CGRect(x:-size.width/2, y:-size.height/2, width:size.width, height:size.height)

如果您的节点的默认锚点为 0.5 0.5(即中心)。使用它会给你你想要的大小。你也不需要这个

self.view?.texture(from:backgroundNodes)

相反,直接说

SKView().texture(from:backgroundNodes)

并且您可以避免在某处保留参考。此外,如果您在 sknode 子类的 init 函数中执行某些操作,则不会有成员“视图”,因为它尚未添加到树中。

【讨论】:

以上是关于Swift SKView textureFromNode 出错了的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3.0:当给定非 SKView 父级时,SKSpriteNode 作为 Button 不起作用?

Swift SKView textureFromNode 出错了

如何从 SKView 转换到 SCNView?

如何使用 Swift 在 Playground 中获取用户交互事件

无法将“UIView”(0x112484eb0)类型的值转换为“SKView”(0x111646718)

Swift 中的 viewWillLayoutSubviews