2016-04-23 17 views
2

スプライトに対してポイントアンドクリックコントロールを実装しようとしています。基本的にはすべての点で問題はありませんが、スプライトが目的地に到着すると、奇妙なアーティファクトが発生します。 180度何度も何度も何度も回転しているように見えます。 Artifactsスプライトがデスティネーションポイントで回転する

比較のための通常の状態です。 Normal state

私はこの機能を使用して、それを避けるために試してみた:

sf::Vector2f GetDirection(const sf::Vector2f& start, const sf::Vector2f& destination) { 
    sf::Vector2f dir = destination - start; 
    if (GetLength(dir) <= 0.1) { 
     return sf::Vector2f(0.0f, 0.0f); 
    } 
    return Normalize(dir); 
} 

しかし、条件がまれ真です。完全なコードis here

私は間違っていますか?

答えて

1

あなたの問題は、あなたが「中断する」方法がないことです。

あなたは300/300になります。あなたは目標をオーバーシュートします。曲がって。あなたは戻ってくる。あなたは目標をオーバーシュートします。すすぎ、繰り返します。

あなたの現在のスピードがターゲットに到達するために必要以上に大きい場合は、必要な速度だけを使用する必要があるというチェックがありません。それ以上はない。

あなたはチェックがいいです。しかし、それはあなたがターゲットからのピクセルの10分の1未満のかどうかをチェックします。たぶんあなたはそれほど細かくチェックしてはいけませ1ピクセルで十分でしょう。

if (GetLength(dir) <= 1.0) { 

if (GetLength(dir) <= 0.1) { 

を交換し、それが動作します。

関連する問題