我一直在尝试了解游戏启动时发生的事情。在我的评论中,我遇到了似乎是一个我不明白的循环引用。我遗漏了很多无关的代码来突出我发现令人困惑的区域。让我知道是否有令人困惑的事情,我会尽量提供尽可能多的信息。
游戏数据类(此处简化)包含有关游戏不同元素的信息。这可以包括玩家数据(此处详述),单位信息,地图板信息等。游戏中使用的所有对象都包含对GameData类的引用。
启动程序时,将执行LoadGameData类的load方法。它的目的是查询SQLite数据库并将信息加载到内存中。在下面的示例中,该方法获取对GameData对象中包含的playerList的引用。然后它查询数据库并为返回的每条记录创建一个播放器对象。当每个玩家对象被创建时,它也被赋予对GameData对象的引用,然后被添加到PlayerList,PlayerList本身是GameData对象的成员。
这不代表循环参考吗?
此外,在我看来,使用这个逻辑,游戏中的每个对象都会引用游戏中的所有其他对象。那是对的吗?当然我假设这只是一个指向GameData对象的指针,而不是GameData对象的完整副本。
class GameComponenent {
private GameData m_data;
public GameComponent(final GameData data) {
m_GameData = data
}
}
class Player extends GameComponent {
public Player(String key, GameData data) {
super(data);
}
}
class GameData() {
private PlayerList playerList = new PlayerList(this);
private TerritoryList territories = new TerritoryList(this);
private resourceList resources = new ResourceList(this);
[The list goes on]
public PlayerList getPlayerList() {
return playerList;
}
}
public class PlayerList extends GameDataComponent
public PlayerList(final GameData data) {
super(data);
}
protected void addPlayer(final Player player) {
m_players.put(player.getName(), player);
}
}
class loadGameData() {
GameData data;
public void load() {
data = new GameData();
loadPlayerData(getPlayerDataFromDatabase());
}
public void loadPlayerData(Map<String, Map<String, String>> input) {
PlayerList pl = data.getPlayerList();
foreach (Player p : PlayerXMLNodes) {
Player p = new Player(key, data);
pl.addPlayer(Player);
}
}
}