我知道场景坐标是 (0,0) 在中心,所以我如何使用 for 循环沿宽度分布 4 个 SKNode
for index 1...4 {
let node = SKNode()
node.postion = evenly distribute along the scene width. who can i do it?
}
最佳答案
您可以使用场景的宽度除以节点数减 1。然后乘以索引减 1,然后添加到场景的最小 x 值。
let widthRange = scene.frame.maxX - scene.frame.minX
for index 1...4 {
let node = SKNode()
node.postion = scene.frame.minX + widthRange/(4-1) * (index-1)
}
这应该使每个节点沿着场景的宽度彼此等距离放置,从每条边开始。
如果 for 循环的索引不是从 1 开始,则需要将代码修改为如下所示:
let widthRange = scene.frame.maxX - scene.frame.minX
var counter = 0
for index 352...356 {
let node = SKNode()
node.postion = scene.frame.minX + widthRange/(4-1) * counter
counter+=1
}
如果您不确定要使用哪个版本,请使用第二个版本,因为它对 for 循环格式的依赖较小(只要您在每次执行之前将 counter
重置为 0用这个)。
如果您需要任何关于什么做什么的说明,请随时询问。
编辑
这应该阐明代码的实际作用。
let widthRange = scene.frame.maxX - scene.frame.minX
用于获取场景的大小,然后将其设置为一个变量,用于之后。将其设为变量是可选的,因为您可以只使用场景大小,但我这样说是为了不那么困惑。
var counter = 0
只是创建一个用于 for 循环的计数器变量来放置节点。确保在每次运行循环之前将其设置为 0。 counter+=1
随后会被使用,因此每个节点都乘以一个递增的值,从而创建不同的 x 位置。 (稍后再讲)
node.postion = scene.frame.minX + widthRange/(4-1) * counter
是复杂的线。首先,我使用 scene.frame.minX
从最低宽度/x 位置开始放置。 widthRange/(4-1)
有点难理解。它使用场景宽度(从前面开始),然后除以节点数量减一。理解这一点的最好方法是切割一个矩形(仅在一个方向上)以便它有 2 个切割(2 个节点)和 2 个边(其他 2 个节点),您需要 3 个部分。 (矩形将被切成 3)。这得到每个节点之间的距离。 #ofNodes-1
的模式适用于每个节点数量。 * counter
部分是使节点的 x 位置实际发生变化的部分。由于每次循环结束时,计数器都会增加 1(从 0 开始),因此之前 (widthRange/(4-1)
) 的“部分”数量会增加 1。
关于ios - 以编程方式沿 SkScene 宽度分布 4 个 SKSpriteNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40793741/