在我写的安卓游戏中,我的代码组织如下:
我有一个World
对象,其中包含许多Area
个对象。每个Area对象内部都是Place
个对象。它们以多维数组排列,使玩家可以轻松移动。
我还有Player
和Inventory
个对象,我用作World
对象的构造函数,以便ican访问Player / Inventory并根据需要对其进行更改(例如:添加“item”库存;玩家-10健康)。
public class World
Player player;
Inventory inventory;
public World(Player player, Inventory inventory){
this.player=player;
this.inventory=inventory;
}
public Player returnPlayer(){
return player;
}
public Inventory returnInventory(){
return inventory;
}
创建一个Area:我使用World对象作为构造函数
public class StartingArea extends Area
Player player;
Inventory inventory;
World world;
public StartingArea(World world){
this.world=world;
player=world.returnPlayer;
inventory=world.returnInventory;
}
我的Area对象中也有returnPlayer和returnInventory方法。 当我在Area对象中创建Place对象时,我使用Area作为构造函数“:
House house = new house(this);
public class House extends Place
Player player;
Inventory inventory;
public House(Area area){
inventory=area.returnInventory;
player=area.returnPlayer
}
然而,当我向下传递我创建player
对象时创建的inventory
和world
个对象时,会出现混乱。我无法访问inventory
对象,我的应用程序强制关闭。我尝试将我的世界实例设为静态:
Player player = new Player();
Inventory inventory = new Inventory();
public static World world;
world = new world(player,inventory);
当它是静态的时候,我可以成功地改变库存对象 参考:
MainActivity.world.returnInventory().add(item) //add(Item item) is a method in inventory
所以,我不太明白的事情就在这里。也许这是继承问题(扩展)?或者我传递物体的方式可能是非法的还是不合适的?我刚开始学习java,所以这可能是一个简单的修复或概念性的东西,我错过了。
我想避免创建static
对象的World
实例,因为我不确定这会如何影响我游戏中支持多个保存文件。
答案 0 :(得分:0)
如果你只有一个玩家和一个库存,你可以使用单身人士来随时随地访问它们。这样的事情。
public class Player {
private static Player sPlayer;
// variables etc
public static Player getInstance() {
if (sPlayer == null) {
sPlayer = new Player();
}
return sPlayer;
}
// methods etc
}
public class Inventory {
private static Inventory sInventory;
// variables etc
public static Inventory getInstance() {
if (sInventory == null) {
sInventory = new Inventory();
}
return sInventory;
}
// methods etc
}
然后在其他活动和类中,您可以轻松获得参考,而无需将它们作为参数传递
public class StartingArea extends Area {
Player player;
Inventory inventory;
World world;
public StartingArea(World world){
this.world=world;
player=Player.getInstance();
inventory=Inventory.getInstance();
}
}