从同一个类中绘制多个字符串

时间:2011-12-20 01:12:49

标签: java drawing

我希望这是有道理的。 我正在使用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的新手,所以很可能是一个非常明显的问题。

2 个答案:

答案 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时,该类的所有实例将共享完全相同的属性,如果一个实例更改其值,则所有其他实例将更改为 - 因为它是所有人的相同属性。

这就解释了为什么只画出最后一个矩形 - 事实上,所有这些矩形都是绘制的,但是在完全相同的坐标中。