1

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

  • 白色瓷砖是静态的
  • 彩色瓷砖是动态的

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

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

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

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

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

1 回答 1

4

您应该始终使用

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

否则你很容易得到文物。作物通常应该是

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 函数中执行某些操作,则不会有成员“视图”,因为它尚未添加到树中。

于 2016-02-14T04:42:51.897 回答