ios - Swift SKView textureFromNode 出错

标签 ios iphone swift skview sktexture

我是通过做游戏开始学习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/

相关文章:

ios - 由于未捕获的异常 'NSRangeException' 终止应用程序,原因 : -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array'

iphone - 如何统计coredata(聚合)?

swift - 我如何扩展其值就是字典本身的字典?

iphone - 代码无法在 iPhone 上运行,但可以在模拟器上运行

iphone - 从 UIWebView 检测 window.open()

ios - NSMutableParagraphStyle : Some properties not working on iOS 10. 3.2 和 10.3.3

ios - UITableView 单元格 detailTextLabel 文本对齐不起作用

ios - 是否可以使用 Firebase 安排推送通知?

ios - SwiftValidator - OnValidationSuccessful

ios - 结合 iOS 和 Web 分析