我希望这是有道理的。 我正在使用Java和Slick2d库,但这可能无关紧要。
我的问题是,我正在尝试从同一个子类渲染多个矩形和字符串,但是当我这样做时,只有最后一个实际渲染。
这是我的Entity类中的代码:
public class Entity {
public static String name;
public static int health, x, y;
public Entity(String n, int h, int posx, int posy) {
name = n;
health = h;
x = posx;
y = posy;
}
public static void render(Graphics g) {
g.drawString(name, x-20, y-16);
g.drawRect(x, y, 16, 16);
}
}
以下是我试图从我的主要课程中调用它的方法:
public void render(GameContainer gc, Graphics g) throws SlickException {
new Entity("Monster1", 100, 400, 200);
new Entity("Monster2", 100, 500, 200);
Entity.render(g);
}
我做错了什么?请记住,我还是java的新手,所以很可能是一个非常明显的问题。
答案 0 :(得分:3)
问题是你不应该使用静态变量修饰符。在实体类中的所有三个位置删除它,然后使用新的实体类,如下所示。
Entity m1 = new Entity("Monster1", 100, 400, 200);
m1.render(g);
答案 1 :(得分:1)
首先从变量中删除static
修饰符:
public String name;
public int health, x, y;
在Java中,当您将属性声明为static
时,该类的所有实例将共享完全相同的属性,如果一个实例更改其值,则所有其他实例将更改为 - 因为它是所有人的相同属性。
这就解释了为什么只画出最后一个矩形 - 事实上,所有这些矩形都是绘制的,但是在完全相同的坐标中。