gpt4 book ai didi

java - 从方法创建对象(使用抽象方法)并将其添加到 "ArrayList"s

转载 作者:行者123 更新时间:2023-12-01 13:00:04 25 4
gpt4 key购买 nike

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

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

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

当我使用以下代码在方法内创建主体部分时,我在“渲染”部分中使用的每个变量都会收到错误消息

Cannot refer to a non-final variable body inside an inner class defined in a different method

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);
}
};

另外,如果我不将任何内容放入渲染方法中,并且基本上将所有内容留空,并尝试将这个“头”添加到相同的 GameObjectsArrayList 中方法我得到 java.util.ConcurrentModificationException 异常。

更多信息:

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

    • 在 Game 类中创建(而不是在任何类型的方法中)
    • 通过在 Game 类的构造函数中调用的方法添加到 GameObjectsArrayList

编辑 - 更多信息:

  • 当我将 body 设置为最终时,我收到一条错误消息 局部变量
    主体可能尚未初始化

问题是:

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

感谢您的考虑。

最佳答案

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

当你声明一个变量为final时,你必须立即给它赋值,或者在构造函数中赋值,否则你会得到一个错误。

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

对于GameObject,在子类(Body)中实现render()和update,您可以在每次创建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

关于java - 从方法创建对象(使用抽象方法)并将其添加到 "ArrayList"s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23574167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com