Java 为什么不是';它不是在渲染同一对象的多个对象吗?

Java 为什么不是';它不是在渲染同一对象的多个对象吗?,java,Java,我正在尝试使用LinkedList创建10块砖块,并将它们随机渲染到屏幕上。为什么不起作用?我已经想了三天了,请给我答案。我真的很感激。多谢各位 Game.java public class Game{ private Controller c; public void init(){ c = new Controller(this); } public void run(){ init(); //gameLoop } public void

我正在尝试使用LinkedList创建10块砖块,并将它们随机渲染到屏幕上。为什么不起作用?我已经想了三天了,请给我答案。我真的很感激。多谢各位

Game.java

public class Game{
  private Controller c;

  public void init(){
    c = new Controller(this);
  }

  public void run(){
    init();
    //gameLoop
  }

  public void tick(){
    c.tick();
  }

  public void render(){
   c.render(g);
  }



}
Bricks.java

public class Bricks {

private double x, y;

Game game;
private Image BrickImg;


public Bricks(double x, double y, Game game) {
    this.x = x;
    this.y = y;
    this.game = game;

    ImageIcon bricksImg = new ImageIcon("res\\bricks.png");
    BrickImg = bricksImg.getImage();
}

public void tick() {

}

public void render(Graphics g) {
    g.drawImage(BrickImg, (int)x, (int)y, null);
}

}
Controller.java

public class Controller {


Game game;

private LinkedList<Bricks> b = new LinkedList<Bricks>();

Bricks TempBricks;
Random random = new Random();

public Controller(Game game) {
    this.game = game;

    for (int i = 0; i < 10; i++) {
        addBrick(new Bricks(random.nextInt(500), 50, game));
    }
}

public void tick() {
    for (int i = 0; i < b.size(); i++) {
        TempBricks = b.get(i);
    }

    TempBricks.tick();
}

public void render(Graphics g) {
    for (int i = 0; i < b.size(); i++) {
        TempBricks = b.get(i);
    }

    TempBricks.render(g);
}

public void addBrick(Bricks brick) {
    b.add(brick);
}

public void removeBrick(Bricks brick) {
    b.remove(brick);
}

}
公共类控制器{
游戏;
私有LinkedList b=新LinkedList();
砖块;
随机=新随机();
公共控制员(游戏){
这个游戏=游戏;
对于(int i=0;i<10;i++){
addBrick(新砖块(随机的,nextInt(500),50,游戏));
}
}
公共空白勾号(){
对于(int i=0;i
对不起,这些方法毫无意义:

public void tick() {
    for (int i = 0; i < b.size(); i++) {
        TempBricks = b.get(i);
    }

    TempBricks.tick(); // ticks the **last** brick in the list
}

public void render(Graphics g) {
    for (int i = 0; i < b.size(); i++) {
        TempBricks = b.get(i);
    }

    TempBricks.render(g); // renders only the **last** brick in the list
}
public void tick(){
对于(int i=0;i
你反复浏览列表,但只对最后一个进行操作——疯狂。为什么不对for循环中的项目执行操作

public void tick() {
    for (int i = 0; i < b.size(); i++) {
        b.get(i).tick();  // ticks **every** brick
    }
}

public void render(Graphics g) {
    for (int i = 0; i < b.size(); i++) {
        b.get(i).render;   // renders **every** brick
    }
}
public void tick(){
对于(int i=0;i
同样,板球也恰如其分地建议:摆脱TempBricks球场,因为它所做的一切让你困惑

作为旁白,你需要学习和使用。变量名都应该以小写字母开头,而类名应该以大写字母开头。另外,一个
Brick
是一个单一的对象,类应该这样命名。学习这一点并遵循这一点可以让我们更好地理解您的代码,也可以让您更好地理解其他人的代码


您的问题表明您没有正确调试您的程序,通过使用IDE的调试器并逐步查看代码,您将受益匪浅。也可以在纸上调试——逻辑地遍历代码,看看它是否有意义

您只有一个
TempBricks

public class Controller {

    Game game;
    private LinkedList<Bricks> b = new LinkedList<Bricks>();

    Bricks TempBricks; // Remove this


另外,要使
removeBrick
正常工作,您必须在您的Brick类中实现
equals()
hashcode()
,您调试过这个吗?您的
tick
函数只调用最后一个Brick的tick,其他函数不调用。移动
TempBricks。在循环中勾选
,也应删除
TempBricks
as字段entirely@cricket_007:这是一个很小的问题,可能应该以“打字错误/无法复制”来结束,这就是为什么我以社区维基的形式回答这个问题。但我还要补充一点。
public void render(Graphics g) {
    // renders **every** brick
    for (Brick brick : b) {
        brick.render(g);   
    }
}