Swift 3 - 当 bool 为真时如何移动 sprite 节点?
Swift 3 - how to move sprite node when a bool is true?
好的,我在 Swift 3 个游乐场工作,需要仅在用户按下鼠标时将精灵节点移动到某个点,松开鼠标时停止。到目前为止我有:
override func mouseDown(with event: NSEvent) {
mouseIsDown = true
}
override func mouseDragged(with event: NSEvent) {
}
override func mouseUp(with event: NSEvent) {
mouseIsDown = false
}
func moveGuy() {
let action = SKAction.move(to: CGPoint(x: size.width / 2,y: 200), duration: 2)
action.timingMode = .easeInEaseOut
guy.run(action)
}
//UPDATE
override func update(_ currentTime: CFTimeInterval) {
if(mouseIsDown)
{
moveGuy()
}
}
这有点管用,问题是在我释放鼠标(mouseIsDown 为 false)后 SKAction 实际上 运行(顺利)。我认为这是因为它被一次又一次地调用。
通常我会以小增量使用 moveBy 动作,但我需要我的节点移动到特定点。
如何让我的节点仅在鼠标按下时移动到某个点?
当你打电话时
guy.run(action)
sprite-kit 会 运行 对这个家伙的动作直到完成。你是对的,moveGuy() 被一次又一次地调用(每次帧更新时,即假设 30fps 每 ~33ms)。
尝试将 moveGuy() 放在 mouseDown() 中。只要你点一下,小家伙就会很顺利地移动到目的地,但你不点,他就不会停下来。您需要以某种方式停止操作。你可以做的是替换
guy.run(action)
和
guy.run(action, withKey: "moveGuy")
这会将一个键与您的操作相关联,您稍后可以在 mouseUp() 中查找:
guy.removeAction(forKey: "moveGuy")
在此之后,只有当您按下鼠标时,您的节点才会移动到一个点。但是正如您所指出的,如果您重新单击,节点的移动仍然是不规则的。尝试将 .easeInEaseOut
更改为 .linear
。然后运动将是一致的,尽管在 starting/stopping.
时是突然的
我强烈推荐阅读 documentation on SKActions 以更好地了解如何使用它们。
好的,我在 Swift 3 个游乐场工作,需要仅在用户按下鼠标时将精灵节点移动到某个点,松开鼠标时停止。到目前为止我有:
override func mouseDown(with event: NSEvent) {
mouseIsDown = true
}
override func mouseDragged(with event: NSEvent) {
}
override func mouseUp(with event: NSEvent) {
mouseIsDown = false
}
func moveGuy() {
let action = SKAction.move(to: CGPoint(x: size.width / 2,y: 200), duration: 2)
action.timingMode = .easeInEaseOut
guy.run(action)
}
//UPDATE
override func update(_ currentTime: CFTimeInterval) {
if(mouseIsDown)
{
moveGuy()
}
}
这有点管用,问题是在我释放鼠标(mouseIsDown 为 false)后 SKAction 实际上 运行(顺利)。我认为这是因为它被一次又一次地调用。
通常我会以小增量使用 moveBy 动作,但我需要我的节点移动到特定点。
如何让我的节点仅在鼠标按下时移动到某个点?
当你打电话时
guy.run(action)
sprite-kit 会 运行 对这个家伙的动作直到完成。你是对的,moveGuy() 被一次又一次地调用(每次帧更新时,即假设 30fps 每 ~33ms)。
尝试将 moveGuy() 放在 mouseDown() 中。只要你点一下,小家伙就会很顺利地移动到目的地,但你不点,他就不会停下来。您需要以某种方式停止操作。你可以做的是替换
guy.run(action)
和
guy.run(action, withKey: "moveGuy")
这会将一个键与您的操作相关联,您稍后可以在 mouseUp() 中查找:
guy.removeAction(forKey: "moveGuy")
在此之后,只有当您按下鼠标时,您的节点才会移动到一个点。但是正如您所指出的,如果您重新单击,节点的移动仍然是不规则的。尝试将 .easeInEaseOut
更改为 .linear
。然后运动将是一致的,尽管在 starting/stopping.
我强烈推荐阅读 documentation on SKActions 以更好地了解如何使用它们。