java - arraylist 中的所有对象都具有相同的值

标签 java arraylist entity slick2d

<分区>

我想要做的就是创建一个简单的 Java 程序,其中包含一个包含对象的数组列表,在本例中为弹跳球,可以将其添加到游戏中。我希望它的工作方式是,你启动程序,它是一个空白屏幕。你按下空格键,它会产生一个从侧面反弹的球,按下空格键会产生更多的球。我遇到的问题是当我添加更多球时,它会将 arraylist 中的每个项目设置为相同的 x 和 y 坐标。我正在使用 slick2D 库,但我认为这不是问题所在。

这是程序的主要部分

public static ArrayList<EntityBall> ballList;

    @Override
    public void init(GameContainer gc) throws SlickException {
        ballList = new ArrayList<EntityBall>();
    }

    @Override
    public void update(GameContainer gc, int delta) throws SlickException {
        String TITLE = _title + " | " + gc.getFPS() + " FPS" + " | " + ballList.size() + " entities";
        frame.setTitle(TITLE);

        Input input = gc.getInput();

        if (input.isKeyPressed(Input.KEY_SPACE)) {
            addBall();
        }
    }

    public void render(GameContainer gc, Graphics g) throws SlickException {
        for(EntityBall e : ballList) {
            e.render(g);
        }
    }

    public static void addBall() {
        ballList.add(new EntityBall(getRandom(0, _width - ballWidth), getRandom(0, _height - ballWidth), 20, 20));
    }

    public static int getRandom(int min, int max) {
        return min + (int) (Math.random() * ((max - min) + 1));
    }

这是 EntityBall 类

package me.Ephyxia.Balls;

import org.newdawn.slick.Color;
import org.newdawn.slick.Graphics;

public class EntityBall {

    public static int x;
    public static int y;
    public static int height;
    public static int width;
    
    public EntityBall(int x, int y, int width, int height) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
    }

    public void render(Graphics g){
        g.fillOval(x, y, width, height);
    }
}

最佳答案

出现问题是因为你在EntityBall中的实例变量x,y等是static,意思是整个类(class)只有一个值。每次创建新实例时,这些值都会被覆盖。从 EntityBall 的字段声明中删除 static,这样创建的每个球都有不同的值。

关于java - arraylist 中的所有对象都具有相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15798022/

相关文章:

java - 如何使用 JPA 和 Hibernate 加入两个不相关的实体

java - jQuery Ajax 错误解决

java - 使用 JAXB 在 Jersey RESTful API 的 JSON 输出中包含空元素

java - 如何拆分字符而不删除它(正则表达式)

java - 尝试在小部件 ListView 上显示 arraylist<string>

Java:在 Arraylist.set 应用后获取旧值

java - 使用 RSA 加密 - ZipException : invalid entry size

java - 通过 ArrayList 正在更新 + Java

java - 为什么要在 Entity 类中添加 super()?

symfony - 如何访问 symfony2 中实体的存储库方法?