以编程方式沿SkScene Width分配4个SKSpriteNodes

时间:2016-11-24 19:55:48

标签: ios swift sprite-kit

我知道场景坐标是(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 个答案:

答案 0 :(得分:0)

您可以使用场景的宽度除以节点数减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-loop中使用一个计数器变量来放置节点。确保在每次运行循环之前将其设置为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.