2013-12-23 92 views
0

我想弄清楚Java如何知道從哪裏開始根據此圖形代碼,當我運行此代碼它顯示球從頂部向下移動,但我不明白爲什麼從頂部和爲什麼從這個地方,我知道java使用math.random()設置值,但它如何設置x和y當我試圖把任何隨機數由我自己它給出的數字是比寬它的自我(我以準確瞭解pos.x和pos.y)根據此代碼如何java知道從哪裏開始

這第一類大

package movingball; 

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Point; 

/** 
* 
* @author isslam 
*/ 
public class Ball { 
    private final int RADIUS = 10; 
    private final Point pos; 
    private final Color ballColor = Color.red; 
    private final int CHANGE = 3; 
    private final int height, 
    width; 

    public Ball(int frameWidth, int frameHight) { 
     width = frameWidth; 
     hight = frameHeight; 

     pos = new Point(); 
     pos.x = (int)(Math.random() * (width - RADIUS)) + RADIUS; 
     pos.y = (int)(Math.random() * (height/2 - RADIUS)) + RADIUS; 
    } 
    public void paint(Graphics g) { 
     g.setColor(ballColor); 
     g.fillOval(pos.x - RADIUS, pos.y - RADIUS, 2 * RADIUS, 2 * RADIUS); 
    } 
    public void move() { 

     if (pos.y < height - RADIUS) { 
      pos.translate(0, CHANGE); 
     } 

    } 

} 

這是第二類

package movingball; 
import java.awt. * ; 
import javax.swing. * ; 
/** 
* 
* @author isslam 
*/ 
public class ClassOfMoving extends JFrame { 
    protected final int FRAME_WIDTH = 240; 
    protected final int FRAME_HIGHT = 320; 
    private final Ball myBall = new Ball(FRAME_WIDTH, FRAME_HEIGHT); 

    public ClassOfMoving(String title) { 
     super(title); 
     setSize(FRAME_WIDTH, FRAME_HEIGHT); 
     setDefaultCloseOperation(ClassOfMoving.EXIT_ON_CLOSE); 
    } 

    public void paint(Graphics g) { 
     super.paint(g); 
     myBall.paint(g); 
    } 

    public void move() { 
     while (true) { 
      myBall.move(); 
      repaint(); 
      try { 
       Thread.sleep(50); 
      } catch (InterruptedException e) { 
       System.exit(0); 
      } 
     } 
    } 
} 

主類

package movingball; 

/** 
* 
* @author isslam 
*/ 
public class MovingBall { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     ClassOfMoving is = new ClassOfMoving("isslam"); 
     is.setVisible(true); 
     is.move(); 

    } 

回答

2

我不完全確定問題是什麼,你似乎有點困惑。

這條線代表實際的移動。

pos.translate(0, CHANGE); 

Ball位置pos被翻譯在y維度CHANGE像素。 CHANGE在其他地方被定義爲3。計算機屏幕上的左上角位置通常爲(0,0),因此位置會增加3,而Ball會向下移動3個像素*

Math.random()返回一個介於0和1之間的數字。以下行將球放置在0 + r和width-r之間的隨機位置上。

pos.x = (int)(Math.random() * (width - RADIUS)) + RADIUS; 

如果要指定特定位置,請直接設置pos.x而不是替換Math.random()。

y位置定義爲窗口的上半部分,因爲最大值定義爲height/2

pos.y = (int)(Math.random() * (​​- RADIUS)) + RADIUS;

*:計算機顯示器的座標系被上下翻轉相比於常規座標系,其中正面是向上。原因可能在於多大的陰極射線管塗料(從左上角)以及行數打印機上線數的增加,以及隨後的字符顯示系統。

0

編譯和在一個應用程序不會做任何事情執行,因爲它不必須要麼主方法或靜塊時獨立地這兩個類。但是如果您將它與任何框架,罐子或任何其他代碼結合使用,可能會通過創建對象來幫助執行它。希望它回答。

+0

我將主要方法添加到代碼 –

+0

我需要解釋代碼而不是如何修復代碼抱歉 –