私はSwift 3のプレイグラウンドで作業しています。ユーザーのマウスが停止しているときにのみスプライトノードを特定のポイントに移動する必要があります。これまでのところ私が持っている:これはやや作品Swift 3 - boolがtrueのときにスプライトノードを移動する方法は?
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アクションを少しずつ使用しますが、ノードを特定のポイントに移動する必要があります。
ノードがダウンしたときにノードをポイントに移動させるにはどうすればよいですか?
'update:'の中で 'SKAction'を実行するのは間違った方法です(特にあなたの場合は、アクションの持続時間は2秒、update:は秒あたり60回実行されます)。スプライトをA点からB点に移動するために、 'SKAction'オブジェクトを何度も再作成しているため、これは実行可能ではありません(意味をなさない)。これには1つのSKActionオブジェクトしか作成しないでください...下記の@ nateslagerの答えに述べられているように。 – Whirlwind
もちろん、[homing missile](http://stackoverflow.com/a/36235426/3402095)のようなものを実装しているなら、 'update:'メソッド( 'SKActions'なし)を使いたいかもしれません。ノードをポイントAからポイントBに移動する必要がある場合は、アクションがより便利になります。それでも、ポイントは、アクションを 'update:'メソッドに入れないでください(それぞれのアクションオブジェクトを作成することです)。あなたがまだ立ち往生している場合は、もう少しすべてを記述しようとしてください(例えば、あなたの目標がその位置を変えているのか、それとも静的なのか)、私に教えてください... – Whirlwind