对我想要做的事情的简短描述:我正在构建一个简单的游戏,其中用户控制车辆,一段时间后越来越多的鬼开始跟随玩家,它们遵循与玩家相同的轨迹,但有延迟。为了实现这一点,我创建了一个数组,其中包含玩家位置的历史记录作为点序列。然而,问题是,当我查看存储在该数组中的数据时,我发现在所有索引上只存储了最近的位置。首先,我在 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 回答
![?](http://img1.sycdn.imooc.com/5458689e000115c602200220-100-100.jpg)
守着星空守着你
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();
}
}
添加回答
举报
0/150
提交
取消