我正在用Java开发一个简单的游戏,其中的单位是类,它们的名称,健康状况等存储在字段中。从文件中读取这些单位,然后将其存储在哈希图中以形成一个主库,该主库在生成新单位时用作参考。
我正在尝试确定如何在游戏中存储实际单位(不是用作参考的基本单位,而是在地图上移动的实际单位)。实际单位包含的数据要多于参考数据,例如当前的健康状况,助推器等,但是它们仍然需要访问原始统计信息,例如最大健康状况等。对我来说,让一个单元的每个实例都携带一堆已经存储在引用中的不变信息似乎是多余的,所以我想做的是创建另一个类来表示包含诸如当前运行状况之类的数据的衍生单元,等等,以及对引用类的引用,以便它仍然可以访问基本数据。代码看起来像这样(这只是我用来测试概念的测试代码; java的新手):
`//代码开始
public class UnitTest
{
// Main test function.
public static void main(String[] args)
{
System.out.println("\nStarting test.\n\n");
ObjectDefinitions.UnitArchetype Base = new ObjectDefinitions.UnitArchetype("Soldier", 0.8f);
ObjectDefinitions.Unit Product = new ObjectDefinitions.Unit(Base, 9.0f);
Base.UnitArchetypeStats();
Product.UnitStats();
Base.SetUnitMaxHealth(11.0f);
Base.UnitArchetypeStats();
Product.UnitStats();
}
}
class ObjectDefinitions
{
static class UnitArchetype
{
// Fields
private String UnitType;
private float UnitMaxHealth;
// Constructor
UnitArchetype(String UnitType, float UnitMaxHealth)
{
this.UnitType = UnitType;
this.UnitMaxHealth = UnitMaxHealth;
}
// Methods
public void UnitArchetypeStats()
{
System.out.println("UnitType: " + UnitType + "\nUnitMaxHealth: " + UnitMaxHealth + "\n");
}
public void SetUnitMaxHealth(float Health)
{
UnitMaxHealth = Health;
}
}
static class Unit
{
// Fields
private ObjectDefinitions.UnitArchetype BaseUnit; // the reference to the base unit
private float UnitCurrentHealth;
// Constructor
Unit(ObjectDefinitions.UnitArchetype Model, float CurrentHealth)
{
this.BaseUnit = Model;
this.UnitCurrentHealth = UnitCurrentHealth;
}
// Methods
public void UnitStats()
{
System.out.println("UnitType: " + BaseUnit.UnitType + "\nUnitMaxHealth: " + BaseUnit.UnitMaxHealth + "\nUnitCurrentHealth: " + UnitCurrentHealth + "\n");
}
}
}
所以我有两个问题。首先,以这种方式链接到基本单元是否可以正常工作而不会引起任何问题,或者是否有可能破坏代码中的某些内容?
其次,是否值得像这样的事情打扰,还是我应该通过添加所需的额外字段来扩展引用类,然后在每次生成新单位时克隆所有信息,以便每个游戏单位包含所有信息?我正在尝试优化内存,但是老实说,即使有额外的字段用于当前运行状况和其他信息,生成的单元仍然只包含十几个字段。值得尝试调整一下这些东西吗?我来自python背景,在撰写本文时实际上是在学习java,所以我真的不太了解java中什么是“沉重的”。
答案 0 :(得分:0)
以下是一些建议:
this.UnitCurrentHealth = UnitCurrentHealth;
),将其更改为this.UnitCurrentHealth = CurrentHealth;
谢谢:)