2017-07-18 1 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

それは動作しますが、今ではクラスに問題があります。 "タイプボールは既に"メインでも "定義されています。ボールタイプ" –

+0

** "のメソッドペイント(Graphics2D)は定義されていません**タイプボールは既に定義されています**ということは、同じものを2回定義していることを意味します。つまり、同じファイルまたはパッケージに別のBallクラスが存在する必要があります。 –

+0

私はプロジェクトでクラス名が違っていましたが、ちょっと同じものがあり、それが問題でした。 Tyは助けを求めて、私はこれで初心者です –

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 
} 

あなたがあなたのpaint機能でそれを行うとして、それを操作するためにmove機能にそのg要素を渡す必要がありますのでご注意ください。もう1つは、壁、床、天井のいずれの衝突にも色の変化する線を追加する必要があることです。色を無作為にすることについては、少し努力して自分で達成できるはずです

関連する問題