2011-10-19 3 views
4

私は反時計回りの方向に回転する画像を持っています。その間、または壁に触れるたびにランダムな方向に移動したい。問題は私がそれをすることができない、この問題について私を助けてください。イメージをランダムな方向に移動するにはどうすればいいですか?

これは私のコードです:

private double x; 
private double y; 
private double speed; 

public void move(long dt) 
{ 
    double dt_s = dt/1e9; 
    double dx = speed * dt_s; 
    double dy = speed * dt_s; 

    final double right_border = 100; 
    final double up_border = 100; 
    final double down_border = 0.0; 
    final double left_border = 0.0; 


    x += dx; 

    if (x >= right_border) 
    { 
     x = right_border; 
     if (y >= down_border) 
     {    
    y += dy; 
     } 

    } 
    if (y > up_border) 
    { 
     y = up_border; 
     if (x >= left_border) 
     { 
      speed *= -1; 
     } 

    } 
    if (x <= left_border) 
    { 
     x = left_border; 
     if (y <= up_border) 
     { 
      y += dy; 
     } 

    } 
    if (y < down_border) 
    { 
     y = down_border; 
     if (x <= right_border) 
     { 
      speed *= -1; 
     } 

    } 

} 
+0

ランダムな方向が欲しいのですか、それとも境界から「バウンス」したいですか? – user995048

+0

ランダムな方向。 – jinHo

+0

ラジアンで方向を指定し、三角関数を使用して、デルタxとデルタyを計算して所定の距離を移動させます。 –

答えて

2

まず、あなたのスピードはありますが、あなたの方向は北東45度に固定されています(増分xとyは同じです)。

次のように自分のクラスに方向を追加します。

... 
private double speed; 
private double angle; // in radians - makes math easier 

public void move(long dt) { 
    ... 
    double dx = speed * dt_s * Math.sin(angle); 
    double dy = speed * dt_s * Math.cos(angle); 
    ... 

を今すぐランダムな方向に向かうことに:

myObject.setAngle(Math.PI * 2 * Math.random()); // Math.PI * 2 = 360 degrees 

ハンガーノックする場合は、だ角度にあなたの角度を制限する必要がありますawayあなたがヒットしている壁から。私はあなたにそれを残しておきますが、それは次の形式をとるでしょう:

myObject.setAngle(minAngle + ((maxAngle - minAngle) * Math.random())); 
+0

コード内の "myObject"とは何ですか? – jinHo

+0

あなたは冗談か?あなたのクラスのインスタンスです!あなたはあなたのクラスの名前が何であるかは言わなかったので、私はちょうどそれを "myObject"と呼んでいました。 – Bohemian

+0

ええ、私はそれを得た。 hehe。そのために残念。ありがとう。 :-) – jinHo

2

これは、1つの可能な解決策です。

境界線の1つ(画像がちょうど当たった境界線以外)でランダムな点(x、y)を生成し、その点に向かって画像を移動させます。あなたがしなければならないことは、ちょうどヒットしたポイントP1(x1、y1)と、ちょうどP2(x2、y2)で生成されたランダムポイントとの間の勾配を見つけることです。斜面を使うと、線の方程式を見つけることができます。旅行する必要があります。

関連する問題