2011-12-09 11 views
2

固定位置からゲーム内のクリック点に移動する矩形を取得しようとしています。マウスリスナークラスのe.getXメソッドとe.getYメソッドから良い座標を取得しています。私はまた、直線の横または上下にpositionXとYの値を増減して移動する矩形を持っていますが、私はそれをクリックする任意のポイントに移動する方法が必要です、基本的に私はxの変更を設定する必要がありますとy。私が考えていた方法は、クリック点と開始点から線の立ち上がりと立ち上がりを計算し、次にxとyの値を立ち上がりと実行に設定することです。もし私がこのようにすれば、私は上昇を減らし、値を最低限の条件にして流動的に動くようにする方法が必要です。あるいは、それを考えていない方法があれば、あなたは役に立つだろうと示唆することができます。固定開始点からマウスの座標までオブジェクトを移動しようとしています

+0

あなたはスイング右の話をしている:

それのベアボーンは、次のようなものでしょうか? –

+0

はい私は申し訳ありません、指定する必要があります – user519670

+0

正解、私はそれを開始点からクリック点まで固定速度で移動したいです。 – user519670

答えて

5

あなたは今どのようにそれを描いていますか?以下は、私が作った/少しのゲームで弾を撃つのに使った方法です。

これは決して必要なコードのすべてではなく、場合によってはもっと良い方法があります(後でコメントセクションで教えてくれると確信しています:))あなたに働くための基礎を与えてください。

これは、再描画の速度を調整すること(fps)ですが、申し訳ありませんが、私はこれを今すぐ行う簡単な方法を覚えていません(私の実際の仕事に戻る必要があります)。助けてください。

//these set out the current position of your rectangle 
double recX, reYy, recH, recW; 

//this gives something to manage speed 
int speed; 

public void paintComponent(Graphics g) { 
    g.drawRectangle(recX,rexY,recH,recW); 
} 

//here we work out the movement 
public void clickedScreen(double x, double y){ 
    double newX = x; 
    double newY = y; 
    //calculate the speed to move at 
    vX = newX - recX; 
    vY = newY - recY; 
    //get the distance 
    length = Math.sqrt((v1*v1)+(v2*v2)); 
    //make it a unit vector 
    v1 = v1/length; 
    v2 = v2/length; 
} 

public moveRec(){ 
    recX = recX+(v1*speed); 
recY = recY+(v2*speed); 
} 

while(true) { 
    moveRec(); 
    repaint(); 
} 
+0

'Thread.sleep'を使ってアニメーションの速度を制御することができます。イベントディスパッチスレッドを一時停止するので、私はSwingでもこのメソッドを使用するのにいくつか問題がありました。これを克服するには、SwingWorkerを使用する必要があります。しかし、私がちょうど知らない速度を制御するもっと良い方法があるかもしれません... – BitFiber

+0

うん、それはうまくいくかもしれない、または乱雑になる!私は、Javaゲームの本をどこかで入手したループを持っていますが、これは非常にうまくいきます。 –

+0

ありがとうございました。これは私に大きな出発点を与えます。私は本当に感謝しています:-) – user519670

関連する問題