从方法创建对象(使用抽象方法)并将其添加到“ArrayList”

时间:2014-05-09 21:19:50

标签: java object arraylist

我正在尝试创建一个基本的Snake游戏。我有一个非常基本的2D Java游戏引擎。这就是所有更新和渲染的发生方式:

我有一个ArrayList GameObjects这是我创建的一个类,它有两个抽象的方法,名为" update"和"渲染" (还有一些变量与问题无关但告诉它可能会减少回答时的混乱)。我在游戏类中创建对象,如下面的示例代码中所示,然后将它们添加到ArrayList。然后我基本上使用增强的for循环来更新和渲染ArrayList中的所有对象。

我基本上想要在方法中创建一个对象,而游戏正在运行(每次创建一个正文部分"食物"是吃掉)。

当我使用以下代码在方法中创建一个正文部分时,我在" render"中使用的每个变量都会出错。部分说

  

不能引用内部类中的非final变量体   用不同的方法定义

GameObject body = new GameObject(DOT_SIZE, DOT_SIZE, food.boardPosX, food.boardPosY) {

    @Override
    void update() { 
    //MOVE PART
    }

    @Override
    void render(Graphics g) {
        g.fillRect(body.pixelPosX, body.pixelPosY, body.pixelSizeX, body.pixelSizeY);
    }
};

此外,如果我没有在渲染方法中添加任何内容,并且基本上将所有内容都留空,并尝试添加此内容,并且#34; head"使用同一方法ArrayList GameObjects我获得java.util.ConcurrentModificationException例外。

更多信息:

  • 从一开始就存在的物体(头部和食物);

    • 在Game类中创建(而不是任何方法)
    • ArrayList类的构造函数中调用的方法中添加到GameObjects的{​​{1}}。

编辑 - 更多信息:

  • 当我让身体最终时,我收到错误Game

问题是:

  • 我应该在哪里以及如何定义" body"宾语。
  • 我应该在何处以及如何将其添加到对象的ArrayList中。

感谢您的考虑。

1 个答案:

答案 0 :(得分:1)

When I make body final, I get an error saying The local variable
body may not have been initialized.  

当您将变量声明为final时,您必须立即为其赋值,或者在构造函数中指定值,否则您将收到错误。

我建议您将GameObjectGraphics分开,在Graphics对象至少初始化后修改GameObject对象。

对于GameObject,实现render()并在子类(Body)中更新,您可以在每次创建body对象时调用它。例如,将您的GameObject类作为抽象类,将这两个方法保持为抽象,创建类Body以从GameObject扩展并实现它们。

根据您提供的以下代码,

    void render(Graphics g) {
        g.fillRect(body.pixelPosX, body.pixelPosY, body.pixelSizeX, body.pixelSizeY);
    }

我想你想要这样的事情:

    void render(Graphics g) {
                g.fillRect(this.pixelPosX, this.pixelPosY, this.pixelSizeX, this.pixelSizeY);
   }

您尝试将当前对象的值分配给fillRect