2011-12-09 41 views
2

我試圖讓一個矩形從固定的位置移動到我的遊戲中的點擊點。我已經開始使用鼠標監聽器類中的e.getX和e.getY方法獲得良好的座標。我也有通過增加和減少位置X和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

相關問題