如何创建两个相同的对象但处于不同的状态

时间:2014-08-13 06:14:08

标签: java eclipse slick2d

我正在尝试使用同一个类创建至少两个独立的对象。这意味着我希望他们每个人都使用相同的类,但独立使用它中的变量。我不确定这是否可能,但这就是我在这里的原因。

两个骨架(skeleton1和skeleton2)是我想要彼此独立的两个对象。

@Override
public void render(GameContainer gc, StateBasedGame gm, Graphics g)
        throws SlickException {

    background.draw(0, 0, Constants.WIN_WIDTH, Constants.WIN_HEIGHT);

    g.drawImage(ccb, mkX, mkY);

    Skeleton skeleton1 = new Skeleton(g, gm);
    Skeleton skeleton2 = new Skeleton(g, gm);

    score = new DeathScreenButton(scoreCounter, (Constants.WIN_WIDTH / 2) / 2, 0, g, Color.transparent);

}

更具体地说,我希望他们的x和y轴在这里显示独立(它们是sX和sY):

public class Skeleton {

private Graphics g;
private StateBasedGame gm;

private int mkX = InGame.getmkX();
private int mkY = InGame.getmkY();

// This makes them spawn on each other :(
// "static" prevents them from popping around the screen
private static int sX = (int)(Math.random() * Constants.WIN_WIDTH) + 1;
private static int sY = (int)(Math.random() * Constants.WIN_HEIGHT) + 1;

private Image skele;

public Skeleton (Graphics g, StateBasedGame gm) {

    this.g = g;
    this.gm = gm;

    try {
        init();
    } catch (SlickException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    render();

    try {
        update();
    } catch (SlickException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

2 个答案:

答案 0 :(得分:0)

你的骷髅已经独立了。 面向对象的编程目的之一是类实例。这样,同一个类的两个实例可能具有相同的属性,但它们永远不会相同。 它可能在开始时有点混乱,但目标是开发可重用的代码,然后你可以实例化1..n Skeletons,它们将是独立的。

Skeleton skel1 = new Skeleton(Graphics g, StateBasedGame gm);

希望它有用。 谢谢。

答案 1 :(得分:0)

写入/覆盖update方法,如果您还没有。用这种方法更新你的位置。

将变量sXsY的初始化放在构造函数中。

删除static。通过标记sXsY static,您的类的所有实例将始终共享这些值,因此您永远不会拥有具有不同坐标的Skeletons。如果更改一个实例的值,则为所有实例更改它。

  

同一个班级,但独立使用其中的变量

这基本上意味着:我想使用实例变量。标记为static的变量是 class 变量。