2016-07-31 7 views
1

私は、画面を上下に移動する必要があるオブジェクトを持っています。最初にクリックすると、画面が3秒間エンドポイントに移動します。クリックするといつでもクリックして停止し、別のエンドポイントに移動し始めます(3秒間)。この方法で問題が発生するのは、クリックしてオブジェクトを下に移動した後すぐにもう一度クリックして上に移動すると、オブジェクトは上に移動しますが、移動速度は3秒です。 (私はこれが意味があることを願っています)だから私が望むのは、オブジェクトが動くペース/スピードを設定するために持続時間を使用するのを止めることです。ブランクスピードでポイントx.yに移動する方法はありますか?ありがとうございました。 (オブジェクトがあると持っているどんなに、私はそれが常に同じペースで移動するに移動します。)これは私が今のオブジェクトを移動するために使用するものであるあるスピードで画面を横切ってオブジェクトを移動する(スプライトキット)

func moveObject(){ 
    let endpoint = CGPoint(x: self.size.width/2 , y: self.size.height/1.8888888888) 
    let moveObject = SKAction.moveTo(endpoint, duration: 3.0) 
    let moveObjectSequence = SKAction.sequence([moveLine]) 
    Object.runAction(moveLineSequence) 
} 

コードを修正した後、 :

func dropLine(){ 
    if hookNumber == 1{ 
     let endpoint = CGPoint(x: self.size.width/2 , y: self.size.height/1.8888888888) 
     let moveLine = SKAction.moveTo(endpoint, duration: getDuration(fishLine.position,pointB:endpoint,speed:300.0)) 
     let moveLineSequence = SKAction.sequence([moveLine]) 
     fishLine.runAction(moveLineSequence) 
    } 
} 

func dropHook(){ 
    if hookNumber == 1{ 
     let endpoint = CGPoint(x: self.size.width/2 , y: self.size.height - 2030) 
     let moveLine = SKAction.moveTo(endpoint, duration: getDuration(fishHook.position,pointB:endpoint,speed:300.0)) 
     let moveLineSequence = SKAction.sequence([moveLine]) 
     fishHook.runAction(moveLineSequence) 
      hookNumber = 2 
    } 
} 

func raiseLine(){ 
    if hookNumber == 2{ 
     let endpoint = CGPoint(x: self.size.width/2 , y: 3050) 
     let moveLine = SKAction.moveTo(endpoint, duration: getDuration(fishLine.position,pointB:endpoint,speed:300.0)) 
     let moveLineSequence = SKAction.sequence([moveLine]) 
     fishLine.runAction(moveLineSequence) 
    } 
} 

func raiseHook(){ 
    if hookNumber == 2{ 
     let endpoint = CGPoint(x: self.size.width/2 , y: self.size.height - 3) 
     let moveLine = SKAction.moveTo(endpoint, duration: getDuration(fishHook.position,pointB:endpoint,speed:300.0)) 
     let moveLineSequence = SKAction.sequence([moveLine]) 
     fishHook.runAction(moveLineSequence) 
    } 
} 

答えて

2

計算速度に基づいてアプローチを修正できると思います。 あなたのスピードを知っていれば、ノードがポイントに到着するのにかかる時間を計算し、スピードを合理的な値に変更することができます。

let moveObject = SKAction.moveTo(endpoint, duration: getDuration(node.position,pointB:endpoint,speed:150.0)) 

このアプローチを使用すると、「変更をいけないスピードとあなたはこの嫌な遅さを持っていない:

// #-#-#-#-#-#-#-#-#-#-#-#-#-#-# 
//MARK: - Calculate action duration btw two points and speed 
// #-#-#-#-#-#-#-#-#-#-#-#-#-#-# 
func getDuration(pointA:CGPoint,pointB:CGPoint,speed:CGFloat)->NSTimeInterval { 
    let xDist = (pointB.x - pointA.x) 
    let yDist = (pointB.y - pointA.y) 
    let distance = sqrt((xDist * xDist) + (yDist * yDist)); 
    let duration : NSTimeInterval = NSTimeInterval(distance/speed) 
    return duration 
} 

は、あなたの動きはなりますが150.0

の速度であなたのノードがあるとし。

P.S.大文字をプロパティに変更するのを忘れてはいけません。速やかには、オブジェクトの代わりにオブジェクトを使用してください。

+0

@AlessandroOmano私はこれを行い、その問題を解決しました。ありがとう。しかし、それは奇妙な不具合を作り出しました。グリッチは説明するのが非常に難しいので、私は起こっている不具合を示すビデオにリンクを付けるつもりです。私は必要なコードも含めます。ここでは、起こっている不具合のビデオへのリンクがあります:https://www.youtube.com/watch?v = jHE5RC-mvwU前にグリッチが発生していません。なぜそれが起こっているのか知っていますか?もしそうなら、私は何を止める必要がありますか?元の投稿に新しいコードを追加します。 – james

+0

私はビデオとあなたのコードの両方を見ました。私はあなたのような巨大な価値を使ったとき、このような経験をしています。例えばtopがself.frame.height-20に等しい場合、ボールを隠すために、例えばself.frame.height + 40のエンドポイントを使用しようとすると、巨大な値を使用しないでください。ビデオの典型的なグリッチタイプ、同じことが底部に適用される –

+0

あなたが "巨大な価値"と言うときは、エンドポイントを意味します。もしそうなら、エンドポイントをself.frame.height + 40に変更しましたが、グリッチはまだ発生しました。 – james

関連する問題