2017-06-03 9 views
0

私のゲームでは、電球を手に持っているプレイヤーがいます(電球はそのプレイヤーと同じGameObjectです)今はBulbの位置をPlayerの位置に設定しています。球がプレーヤーの手の中にあること。私がしたいことは、プレイヤーが移動すると球がプレーヤーに追従して少し遅れることです。GameObjectスムーズなJavaの次のGameObject

public void tick() { 
    bulbX = playerX + 20; 
    bulbY = playerY - 3; 
} 

任意のアイデア??

多くのおかげで、マキシ

+0

あなたがそれを削除したときにカーソルに向かって弾丸を弾くことに関するあなたの質問に答えていました。それはまたここで助けになると思いますので、それは話題ではありません。まず、(x、y)座標は基本的にベクトルであることに気付く。次に、googleを次のように読み、 "ベクトルを減算する"(位置を引くと、あるオブジェクトから別のオブジェクトへベクトルを提供する、これは "平行移動ベクトル"を取得する)、 "ベクトルの大きさを計算する方法"、 "単位ベクトル "を計算し、変換ベクトルを大きさで除算して単位ベクトルを求め、希望の速度を掛けて(x、y)速度を求め、ティックタイムを掛けます。 – Aaron

+0

あなたは最高です。本当にありがとう。私は本当にあなたのサポートに感謝します。私はそれをやる方法を考え出した。 @Aaron –

答えて

0

は電球が常にプレイヤーに向けて動いているので、それを設定します。

public void tick() { 
    bulbX += (playerX - bulbX)/2; 
    bulbY += (playerY - bulbY)/2; 
} 

このようにして、電球は離れた方が速くプレーヤーに向かって動きます。 1/2パラメーターを調整する必要があるかもしれません。

私は自分のコードに時差を追加したいので、ゲームはフレームレートで減速しません。

long time1 = System.currentTimeMillis(); 
while(running){ 
    long time2 = System.currentTimeMillis(); 
    float timeDiff = (time2-time1)/1000f; 
    time1 = time2; 
    tick(timeDiff); 
} 

とティック法:

public void tick(float timeDiff){ 
    float factor = 2; 
    bulbX += (playerX - bulbX)*factor*timeDiff; 
    bulbY += (playerY - bulbY)*factor*timeDiff; 
} 

このように、十分に高いフレームレートで、電球は指数関数的にプレイヤーをaproachう。

+0

その仕事。大変ありがとうございます。 <3 –

+0

@MaxiKeller私の更新された回答を参照してください、それはあなたのためにさらに良く動作すると思います –

+0

@MaxiKeller ThijsSteeの答えは、上記の私のコメントについての例を提供しています。球の位置ベクトルは(電球X、電球Y)、プレイヤーは(playerX、playerY)です。 'tick()'の最初の例では、球からプレイヤーまでのベクトルは、2つのベクトル 'player - bulb'を減算することによって求められます。答えは速度に関しては奇妙なケースがありますが(状況は合理的です)、2番目のティックの例( 'tick(float)')では 'factor 'は本質的に' velocity * unit_vector'ですが、 。だから、ほとんどの要素がここにあります。あなたの他のQのために欠けている部分は、 "単位ベクトルを得る、速度で乗る" – Aaron

関連する問題