Я пытаюсь воссоздать простую версию Brick Breaker для школы, и у меня возникают проблемы при создании кирпичей.(Я также очень новичок в Java и переполнении стека ...)
Моя первая идея при создании кубиков состояла в том, чтобы сделать их ArrayList, а затем использовать цикл for, чтобы добавить больше кирпичных объектов для заполнения.экран.Мне удалось отобразить только один кирпичный объект на экране, и я не уверен, как рисовать другие.Я также пытался создать 2D-массив, чтобы создать карту, но это тоже не сработало.Иногда JFrame просто гаснет, и больше ничего не появляется.
Это мой код для класса Board, в котором находится paintComponent:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
public class Board extends JPanel implements ActionListener {
Ball ball;
Game game;
Paddle paddle;
Timer timer;
Brick brick;
private final int edge = 100;
private List<Brick> brickList;
public Board(Game game){
setPreferredSize(new Dimension(600,800));
setBackground(Color.BLACK);
this.game = game;
ball = new Ball(this, this.paddle);
paddle = new Paddle(this.game, this, this.ball);
brick = new Brick(this.ball);
}
public void init(){
brickList = new ArrayList<Brick>(20);
ball.setPosition(getWidth()/2,getHeight()/2);
paddle.setPosition(getWidth()/2,getHeight()-edge);
brick.setPosition(edge,edge);
timer = new Timer(1000/60,this);
timer.start();
}
public void actionPerformed(ActionEvent e){
ball.move();
paddle.move();
ball.checkCollision(paddle);
brick.checkCollision(ball);
repaint();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.lightGray);
ball.paint(g);
g.setColor(Color.white);
paddle.paint(g);
g.setColor(Color.red);
brick.paint(g);
for(int i = 0; i < brickList.size(); i++){
brickList.add(new Brick(this.ball));
g.setColor(Color.green);
}
}
}
А это мой код для класса Brick:
import java.awt.*;
import java.util.ArrayList;
public class Brick {
/* Four Rows of Five Bricks = Total 20 Bricks */
private int width = 120;
private int height = 80;
private int x,y;
private Ball ball;
public Brick(Ball ball){
x = 0;
y = 0;
this.ball = ball;
}
public void setPosition(int x, int y){
this.x = x - width/2;
this.y = y - height/2;
}
public Rectangle getBounds(){
return new Rectangle(x,y,width,height);
}
public void checkCollision(Ball ball){
if(getBounds().intersects(ball.getBounds())){
/* Will fill in later */
}
}
/* public int getWidth(){return width;}
public int getHeight(){return height;}
public int getX(){return x;}
public int getY(){return y;} */
public void paint(Graphics g){
g.fillRect(x,y,width,height);
}
}
Iподумал, что если я добавлю новый кирпич в список, он создаст новый в зеленый цвет.Я думал, что это будет работать 20 раз, так как это то, что я тоже установил, но ничего не произошлоВ моей программе ничего не изменилось.Только один кирпич все еще появился в углу, и никаких новых кирпичей не появилось.