为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

qq_笑_17 2021-07-16 16:05:42
对我想要做的事情的简短描述:我正在构建一个简单的游戏,其中用户控制车辆,一段时间后越来越多的鬼开始跟随玩家,它们遵循与玩家相同的轨迹,但有延迟。为了实现这一点,我创建了一个数组,其中包含玩家位置的历史记录作为点序列。然而,问题是,当我查看存储在该数组中的数据时,我发现在所有索引上只存储了最近的位置。首先,我在 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 类中的更新方法,以防我在这里忘记了一些东西public void update() {    player.update(playerPoint);    botManager.update(playerPoint);}在 bots 类的构造函数中,我传递历史列表 (locationData) 并确定其长度以找出定位延迟。之后以下代码处理机器人的位置。@Overridepublic 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);}回到问题,每当我检查历史数组的内容时,我发现它只包含所有索引上的一个点,并且即使我移动播放器也是最新的,导致鬼总是留在顶部我。所以我的问题是,我在这里做错了什么?
查看完整描述

1 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

从您发布的代码不明确的,但会不会是,你只是修改了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();

    }

}


查看完整回答
反对 回复 2021-07-29
  • 1 回答
  • 0 关注
  • 167 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信