【发布时间】:2019-12-06 04:12:14
【问题描述】:
我设置了一个 SKScene,我用一堆块填充。触摸后,我想将随机块移动到 SKScene 的 0,0 位置。 0,0 不是最终目标,但我用它来测试。我的节点被称为 bixel,我自然认为使用 SKAction.move(to: ...) 会将其移动到绝对坐标,如文档中所述,但是我必须遗漏一些东西,因为移动到 0,0 确实什么都没有,但是移动到 100,0 会将其向右移动 100 个像素。
我已经尝试了所有的 move(to: ...) (moveTo(x: ...) 等。我已经尝试了 move(by: ...) ,它应该可以正常工作。
使用下面提供的代码,如果我在 action 和 action2 之间切换(通过重建项目),结果总是相同的,它向右移动了 100 像素。
我也尝试过点转换:
let point = self.convert(CGPoint(x: 0, y: 0), to: bixel)
但结果是一样的。
let bixel = bixels[Int.random(in: 0..<bixels)] bixel.fillColor = .red
let action = SKAction.move(to: CGPoint(x: 100, y: 0), duration: 0.1)
let action2 = SKAction.move(by: CGVector(dx: 100, dy: 0), duration: 0.1)
bixel.zPosition = 1000
bixel.run(action)
编辑:您是完全正确的@Martin R。正如我在对您的回答的评论中所写的那样,每个 ShapeNode 都认为他们的位置是 0,0。这是因为我如何初始化它们。 我这样做了:
let bixel = SKShapeNode(
rect: CGRect(
x: xOffset + (xF * shapeSize.width),
y: self.size.height - yOffset - (yF * shapeSize.height),
width: shapeSize.width - space,
height: shapeSize.height - space
),
cornerRadius: 2
)
这使它认为它的位置是 0,0。所以当我把它改成这样时:
let bixel = SKShapeNode(rectOf: shapeSize, cornerRadius: 2)
bixel.position = CGPoint(
x: xOffset + (xF * shapeSize.width),
y: self.size.height - yOffset - (yF * shapeSize.height)
)
一切正常。谢谢!
【问题讨论】:
-
第二种方法指定相对于当前位置的移动。如果当前节点位置为 (0, 0),则没有区别。
标签: swift sprite-kit skaction