2014-01-25 55 views
0

我遇到了我們應該爲我的java類創建的Ping Pong程序的問題。我們正在給文件,它需要編輯。它的自動乒乓遊戲,所以它需要任何輸入,這一切偶然由計算機。我只需要槳就可以上下。我已經得到它移動和一切。修復Ping Pong程序的Y軸運動

這裏我的問題是Y範圍是從20 - 465.它從465倒數到20,然後不是從20到465的數從上到下,它只是一直跳到465,並從20開始倒數,從而使墊從底部到頂部消失很快。如果有人想爲我檢查,我將附上該項目。

我不只是找人幫我找出爲什麼它的跳躍和不計數。 這裏的代碼,如果問題可以從它單獨弄清楚。 我正在使用edgeCheck和Update方法。

import java.awt.Point; 
import javax.swing.ImageIcon; 
public class CharlesPaddle extends Paddle { 
    /************************************************** ***************/ 
    public CharlesPaddle(int _x) { 
     super(_x); 
     ImageIcon iiPaddle = new ImageIcon(this.getClass().getResource("paddle.png")); 
     paddleImage = iiPaddle.getImage(); 
    } //end CharlesPaddle 
    /************************************************** ***************/ 
    public void update() { 
     if (edgeCheck() == false) 
      do { 
       paddleLocation.y -= 1; 
       System.out.println(paddleLocation.y); 
      } 
      while (paddleLocation.y >= 21); 
     else if (edgeCheck() == true) 
      do { 
       paddleLocation.y += 1; 
      } 
      while (paddleLocation.y <= 465); 

    } //end update 

    /************************************************** ***************/ 
    public void init() { 
     paddleLocation = new Point(); 
     paddleVector = new Point(); 
     paddleVector.x = 0; 
     paddleVector.y = speed; 
     paddleLocation.x = xLocation; 
     paddleLocation.y = 200; 
    } //End init 
    /************************************************** ***************/ 
    public boolean edgeCheck() 
    { 

     boolean check = false; 
     if (paddleLocation.y >= 465) 
      check = false; 
     else if (paddleLocation.y <= 20) 
      check = true; 
     return check; 

    } // End edgeCheck 
} 
+1

您的代碼沒有多大意義。當你可以設置'paddleLocation = 20'時,爲什麼你有一個do/while循環?它做同樣的事情。與下面的一樣。 edgeCheck()應該做什麼?它只在右邊緣返回true ... – sachleen

回答

0

我不只是在找人幫我找出爲什麼它的跳躍和不計了。

那麼,對我來說這將是非常困難的,無論如何。

你有兩個選擇,因爲我看到它

正弦函數(更好)

如果你的頂部是465,和利潤是20,那麼你的幅度應爲(465 - 20)/ 2或222.5。你的y相交應該是你的幅度加上底部,所以242.5。聲明一個double t,並在更新這樣做:

public void update() { 
    paddleLocation.y = (int)((222.5) * Math.sin(t) + (242.5)) 
    t += Math.PI * .01; // This number is arbitrary 

} 

修正你的代碼(我可能錯過了一些東西,但嘗試一下)

你的代碼是非常草率和不直觀,對不起。但我會盡力引導你。

我認爲問題在於您的update方法中存在不必要的循環。這導致了「跳躍」。應該頻繁地調用update方法,並且你只是在這裏處理一個變量,所以你不需要循環。相反,試試這個:

import java.awt.Point; 
import javax.swing.ImageIcon; 
public class CharlesPaddle extends Paddle { 
    /************************************************** ***************/ 
    public CharlesPaddle(int _x) { 
     super(_x); 
     ImageIcon iiPaddle = new ImageIcon(this.getClass().getResource("paddle.png")); 
     paddleImage = iiPaddle.getImage(); 
    } 
    /************************************************** ***************/ 
    public void update() { 
     goingUp = updateDirection(goingUp); 
     if (goingUp) 
      paddleLocation.y += 1; 
     else 
      paddleLocation.y -= 1; 

     System.out.println("y position: " + paddleLocation.y); 
    } 

    /************************************************** ***************/ 
    public void init() { 
     paddleLocation = new Point(); 
     paddleVector = new Point(); 
     paddleVector.x = 0; 
     paddleVector.y = speed; 
     paddleLocation.x = xLocation; 
     paddleLocation.y = 200; 
    } 
    /************************************************** ***************/ 
    public boolean updateDirection(boolean goingUp) // This name makes more sense 
    { 
     if (goingUp && paddleLocation.y >= 465)  // It's just peaked, 
      return false;       // so return false (going down) 
     else if (!goingUp && paddleLocation.y <= 20) // It's just gone to the bottom, 
      return true;        // so return true (going up) 
     else           // It's somewhere in between, 
      return goingUp;       // so don't change anything!    
    } 
} 

這些都應該工作。

我重命名了你的方法和變量,因爲它們沒有意義。我還刪除了一些多餘的評論。

在你的主要方法中,你應該使用for或while循環重複調用update()。你也可以在你的更新方法中打印出paddleLocation,或者做任何你想做的事情。

+0

這是我最初開始使用的代碼。當槳到達位置的高度時,我的問題仍然存在。465,它回落到464,它再次變爲真,然後上升到465,並且它是一個恆定的週期。 465,464,465,464,465.任何想法我的下一步應該是什麼? 再次感謝,我實施了您所建議的更改。 – Charles211

+0

嘿,對不起。我甚至沒有檢查自己的代碼工作!我發現了這個問題,如果你正確地給變量命名,這將解決它。 – michaelsnowden

+0

通過「這將解決它」,我的意思是我在'update'和'updateDirection'方法編輯了我的答案 – michaelsnowden