2017-03-19 16 views
0

私は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アクションを少しずつ使用しますが、ノードを特定のポイントに移動する必要があります。

ノードがダウンしたときにノードをポイントに移動させるにはどうすればよいですか?

+1

'update:'の中で 'SKAction'を実行するのは間違った方法です(特にあなたの場合は、アクションの持続時間は2秒、update:は秒あたり60回実行されます)。スプライトをA点からB点に移動するために、 'SKAction'オブジェクトを何度も再作成しているため、これは実行可能ではありません(意味をなさない)。これには1つのSKActionオブジェクトしか作成しないでください...下記の@ nateslagerの答えに述べられているように。 – Whirlwind

+0

もちろん、[homing missile](http://stackoverflow.com/a/36235426/3402095)のようなものを実装しているなら、 'update:'メソッド( 'SKActions'なし)を使いたいかもしれません。ノードをポイントAからポイントBに移動する必要がある場合は、アクションがより便利になります。それでも、ポイントは、アクションを 'update:'メソッドに入れないでください(それぞれのアクションオブジェクトを作成することです)。あなたがまだ立ち往生している場合は、もう少しすべてを記述しようとしてください(例えば、あなたの目標がその位置を変えているのか、それとも静的なのか)、私に教えてください... – Whirlwind

答えて

0

あなたはスプライトキットが完了するまで男のアクションを実行します

guy.run(action) 

を呼び出します。あなたは正しいです、moveGuy()は何度も何度も呼び出されています(フレームが更新されるたびに、つまり〜33msごとに30fpsと仮定)。

moveGuy()をmouseDown()に配置してみてください。あなたがクリックするとすぐに、その男はスムーズに目的地に移動しますが、あなたがクリックを止めると止まらなくなります。何とか行動を止める必要があります。

guy.removeAction(forKey: "moveGuy") 

後:あなたにできることはこれは、あなたが)(のmouseUpの後半で調べることができ、あなたのアクションにキーを関連付けます

guy.run(action, withKey: "moveGuy") 

guy.run(action) 

置き換えるですこれは、あなたのマウスがダウンしているときにだけあなたのノードはポイントに移動します。しかし、あなたが指摘したように、ノードを再クリックすると、ノードの動きはまだ不規則です。 .easeInEaseOut.linearに変更してみてください。開始/停止時には突然の動きになりますが、動きは一貫しています。

使用方法の理解を深めるために、読点documentation on SKActionsを強くお勧めします。

+0

ありがとう!唯一の問題は持続時間に起因しています。マウスアップ後にアクションを開始すると、少し移動した後、徐々に動きが遅くなります。どのように速度を一定に保つことができますか? – skyguy

関連する問題