2017-01-29 10 views
1

私はSwOSでPanGesture RecognizerをiOS用に使用しています。アクションメソッドの中で、私は移動方向と速度を取る第三者メソッドを呼び出しています。このことから、対象物の位置を計算します。スウィフト - パンジェスチャー認識 - オブジェクトと共に移動 - 動きの速さ

objectPos += normalize(move) * speed 

問題は、私は、特定のオブジェクトの上に私の指を入れて、指で移動した場合、オブジェクトは私の指の下の同じ位置ではないこと、です。それはより遅く/より速く移動し始める。移動方向はOKです。問題は加速/減速です - 私が速く動くと、オブジェクトはより速く動くようになります。ジェスチャーコールバックで

私が試してみました:

let move = recognizer.translation(in: self.view); 
let speed = sqrt((move.x * move.x) + (move.y * move.y)); 

let move = recognizer.velocity(in: self.view); 
let speed = dt * sqrt((move.x * move.x) + (move.y * move.y)); 

通常dt = 1.0/60.0。ジェスチャーのコールバックリフレッシュレートです(コードでは、CFAbsoluteTimeGetCurrent()の差を使って手動でdtを計算しています)。これがなければ、速度を直接計算して速度を計算すると、動きが速すぎます。

私は現在と最後の位置を減算することによって手動で差を計算しようとしましたが、まだ運がありません。

私はまた、現在のビューの幅と高さに合わせて「スピードを変える」ことを試みましたが、作業してもそれはありませんでした。私はおそらく何かが不足していますが、何が分かりません。

答えて

0

Ok ...問題を発見しました。コーナー[0,0]〜[1,1]を持つスクリーン正規化座標でオブジェクトを動かす。したがって、Y軸(高さ)の動きは正しいですが、X軸(幅)では速度は約半分でした。

正しいアスペクト比の乗算move.xは問題を解決しました。基本的に、X軸の動きは手動で拡大されます。

0

ユーザーがオブジェクトに触れなくなったときにアクセラレーションに基づいてオブジェクトの動きを計算した方が簡単です。

ユーザーがオブジェクトに指を置いている限り、オブジェクトの位置をパンジェスチャ認識器から取得した位置に設定するほうがずっと簡単です。

+1

私が使用しているサードパーティライブラリがサポートしていないため、これを行うことはできません。 –

+0

私はこの答えに同意します、ユーザーがタッチを持っている限り速度を中和するための値を送信できませんか? 1.0/60.0の代わりに1.0にdtを設定するのが好きですか? –

+0

あなたはどのライブラリをお使いですか? – muescha

関連する問題