Java 为什么不是';它不是在渲染同一对象的多个对象吗?
我正在尝试使用LinkedList创建10块砖块,并将它们随机渲染到屏幕上。为什么不起作用?我已经想了三天了,请给我答案。我真的很感激。多谢各位 Game.javaJava 为什么不是';它不是在渲染同一对象的多个对象吗?,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
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);
}
}