2017-07-18 66 views
0

我的球代碼在這裏: 我不知道如何讓球在撞到牆上時變色。如果我們想每次從牆上彈起時隨機更改球的顏色,該怎麼辦?嗨,如何改變球的顏色每次從牆上反彈?

//Ball.java 
import java.awt.Color;    
import java.awt.Graphics2D; 
import java.awt.Rectangle; 
import java.awt.Color; 
import java.awt.Graphics; 


public class Ball { 
private static final int DIAMETER = 30; //diametrul mingii 
private static final int RECTANGLE = 30; 
private static final int WIDTH = 50; //Pallet width 
private static final int HEIGHT = 50; //Pallet height 

int x = 0;  //The initial position of the ball, up 
int y = 0;  //The initial position of the ball, left 
int xa = 1; 
int ya = 1; 

private Game game; 
private int score=0; 
public Ball(Game game) { 
    this.game= game; 
} 

void move() { 
    //Each if limits a border of the window 
    if (x + xa < 0) 
     xa = 1;  //The ball moves to the right with one pixel each round 

    if (x + xa > game.getWidth() - DIAMETER) //When the ball exceeds the edge, we change direction 

     xa = -1; 

    if (y + ya < 0) 
     ya = 1;  
    if (y + ya > game.getHeight() - DIAMETER) // When the ball exceeds the bottom edge of the window, 

    if (collision()){  //mingea se deplaseaza in sus, daca se intersecteaza cu jucatorul 
     ya = -1;         
     y = game.player.getTopY() - DIAMETER; //plasam mingea deasupra jucatorului, 
       //For the rectangles they are in, do not intersect 

    } 
    x = x + xa;  //Make the trips above 
    y = y + ya;  
} 
private boolean collision() { 
    return game.player.getBounds().intersects(getBounds()); //returneaza true daca dreptunghiul 

} 

public void paint(Graphics2D g) { 
    g.fillOval(x, y, DIAMETER, DIAMETER); 
} 
public void paintComponent(Graphics g) { 
    g.fillRect(x, y, RECTANGLE, RECTANGLE); 
} 

    public Rectangle getBounds() { 
    return new Rectangle(x, y, DIAMETER, DIAMETER); 


    } 

    } 

我很感激幫助。

+0

實現,那將是一個很大的幫助,如果您的評論是用英文 – Hatik

+0

這看起來像功課......看看到您的碰撞無論如何功能 – IsThisJavascript

+0

您可以使用'g.setColor'來更改顏色。 – talex

回答

2

簡單的解決方案:添加一個新的布爾值來知道是否發生了碰撞,例如boolean coll = false。在您的if (collision())聲明中,添加coll = true。然後改變這:

public void paint(Graphics2D g) { 
    g.fillOval(x, y, DIAMETER, DIAMETER); 
} 

這樣:

public void paint(Graphics2D g) { 
    if (coll){ 
     Random r = new Random(); 
     g.setColor(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)); 
     coll = false; 
    } 
    g.fillOval(x, y, DIAMETER, DIAMETER); 
} 

這可能需要你導入的隨機包,東西可能是錯誤的,我不記得了,現在我無法測試它,對不起,但一般來說就是這個想法。

+0

它的工作,但現在我有課堂上的問題。 「之類球已經被定義爲」 ASLO主「的方法油漆(Graphics2D的)是未定義的類型球」的球型已被定義** ** –

+0

意味着你定義兩次同樣的事情。換句話說,在同一個文件或包中必須有另一個Ball類。 –

+0

我在項目中使用不同類名的東西太多了,但有點相同的東西,那就是問題所在。泰幫忙,我所以在這個 –

0

所有你需要它來改變你的圖形的顏色,當球觸及牆壁,根據您的意見與牆壁碰撞發生在這裏:

if (x + xa > game.getWidth() - DIAMETER) //When the ball exceeds the edge, we change direction 
    xa = -1; 

所以,你需要一個額外的動作做這就是:

if (x + xa > game.getWidth() - DIAMETER) { //When the ball exceeds the edge, we change direction 
    xa = -1; 
    g.setColor(Color.red); //or any other color 
} 

請注意,你需要的是g元素傳遞到move功能,以操縱它,因爲你在paint功能做到這一點。還有一件事是,您需要將顏色變化線添加到牆壁,地板或天花板的任何碰撞中。作爲使顏色隨機,你應該能夠用自己的努力一點