Java 创建和添加对象(使用抽象方法)到;ArrayList“;它来自一种方法

Java 创建和添加对象(使用抽象方法)到;ArrayList“;它来自一种方法,java,object,arraylist,Java,Object,Arraylist,我正在尝试创建一个基本的蛇游戏。我有一个非常基本的2D Java游戏引擎。以下是所有更新和渲染的过程: 我有一个GameObjects的ArrayList,这是我创建的一个类,有两个抽象方法,叫做“update”和“render”(还有一些变量,它们与问题无关,但告诉它可能会减少回答问题时的混乱)。我在game类中创建对象,如下面的示例代码所示,然后将这些对象添加到ArrayList。然后我基本上使用一个增强的for循环来更新和渲染ArrayList中的所有对象 我基本上想在游戏运行时用方法创建

我正在尝试创建一个基本的蛇游戏。我有一个非常基本的2D Java游戏引擎。以下是所有更新和渲染的过程:

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

我基本上想在游戏运行时用方法创建一个对象(每次吃“食物”时都会创建一个身体部位)

当我使用下面的代码在方法中创建主体部分时,我在“渲染”部分中使用的每个变量都会出错

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

另外,如果我没有在rendering方法中放入任何内容,基本上将所有内容都保留为空,并尝试使用相同的方法将此“head”添加到
GameObjects
ArrayList
中,我会得到
java.util.ConcurrentModificationException
异常

进一步资料:

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

    • 在Game类中创建(而不是在任何类型的方法中创建)
    • Game
      类的构造函数中调用的方法中,添加到
      GameObjects
      ArrayList
编辑-更多信息:

  • 当我将body设置为final时,我会得到一个错误,即
    局部变量
    正文可能尚未初始化
问题是:

  • 我应该在哪里以及如何定义“body”对象
  • 在何处以及如何将其添加到对象的ArrayList中
谢谢你的考虑

When I make body final, I get an error saying The local variable
body may not have been initialized.  
当您将一个变量声明为final时,必须立即为其赋值,或者在构造函数中赋值,否则将出现错误

我建议您将
游戏对象
图形
分开,至少在
游戏对象
对象初始化后修改
图形
对象

对于
GameObject
,在子类(Body)中实现render()和update,您可以在每次创建
Body
对象时调用它。例如,将您的GameObject类设置为抽象类,将这两个方法保持抽象,创建类主体以从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

您编写了一个匿名类,将新实例分配给body,然后在重写的render方法中使用刚刚创建的body实例,这是不正确的。只有“render”和“update”方法是抽象的。那还会被称为匿名类吗?我也明白这并不重要,因为我使用的部分是抽象的。那么什么是正确的方法呢?
    void render(Graphics g) {
                g.fillRect(this.pixelPosX, this.pixelPosY, this.pixelSizeX, this.pixelSizeY);
   }