gpt4 book ai didi

Java ArrayList 更新点似乎用最新的点替换所述数组中的所有元素

转载 作者:行者123 更新时间:2023-12-02 10:54:20 26 4
gpt4 key购买 nike

我正在尝试做的事情的简短描述:我正在构建一个简单的游戏,其中用户控制车辆,一段时间后越来越多的鬼魂开始跟随玩家,它们遵循与玩家使用相同的轨迹延迟。

为了实现此目的,我创建了一个数组,其中包含玩家位置的历史记录(作为点序列)。然而,问题是,当我查看此数组中存储的数据时,我发现在所有索引上仅存储最近的位置。

首先,我在 botManager 类中创建数组:

public class BotManager {

private ArrayList<Bots> bots;
private List<Point> history;

BotManager() {
history = new ArrayList<>();
bots = new ArrayList<>();
}

然后在管理器类的更新方法中,我将玩家的当前位置添加到数组中

public void update(Point currLoc) {
history.add(currLoc);

for (Bots bot : bots) {
bot.setLocationData(history);
bot.update();
}
}

看看主 GameView 类中的 update 方法,以防我在这里忘记了什么

public void update() {
player.update(playerPoint);
botManager.update(playerPoint);
}

在机器人类的构造函数中,我传递历史列表(locationData)并确定其长度以找出定位延迟。之后,以下代码处理机器人的位置。

@Override
public void update() {
loc = locationData.get(delay - 1);
this.rectangle = new Rect(loc.x - Constants.BOTSIZE/2, loc.y - Constants.BOTSIZE/2,
loc.x + Constants.BOTSIZE/2, loc.y + Constants.BOTSIZE/2);

}

回到问题上来,每当我检查历史数组的内容时,我发现它在所有索引上只包含一个点,而且即使我移动播放器,它也是最新的,导致幽灵始终保留在我上面。

所以我的问题是,我在这里做错了什么?

最佳答案

从您发布的代码中不清楚,但可能是,您只是修改您要添加的Point,而不是更新您的对象的 Point 对象?

尝试

public void update(Point currLoc) {
history.add(new Point(currLoc)); // new Point object added here

for (Bots bot : bots) {
bot.setLocationData(history);
bot.update();
}
}

关于Java ArrayList 更新点似乎用最新的点替换所述数组中的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51892500/

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