正如标题所说,我对 LuaJava 和 EnumMap 有疑问。我正在尝试做一个 RPG 库,所以我们有一个带有一些属性的角色和它们的列表。在下面的代码中,我将只报告重要的事情。
我有一个名为 ConcreteAttribute 的类,它扩展了 AbstractAttribute,它有一个带有 String 和两个 int 的构造函数。
public abstract class AbstractAttribute {
protected String name;
protected int baseValue;
protected double baseMolt;
public AbstractAttribute(String name, int valoreBase, double moltBase){
this.name = name;
this.baseValue = valoreBase;
this.baseMolt = moltBase;
}
/*Getters and Setters*/
}
然后我有一个名为 StatType 的 Enum,它代表你在 RPG 游戏中的统计数据:
public enum StatType {
HP, MP, Attack, Defense;
}
我还有一个名为 PlayableCharacter 的类,它有(我只会报告重要的事情):
public abstract class PlayableCharacter extends Character{
protected EnumMap<StatType, ConcreteAttribute> statistiche;
//Constructor
public EnumMap<StatType, ConcreteAttribute> getStatistiche(){
return statistiche;
}
和 Map 的“放置”方法。
为了创建一个新角色,我目前正在这样做(“Eroe”扩展了 PlayableCharacter):
public static void main(String[] args) {
PlayableCharacter pers = new Eroe("Eroe 1");
ConcreteAttribute atk = new ConcreteAttribute("Attacco", 20, 0);
pers.getStatistiche().put(StatType.Attacco_Fisico, atk);
}
并且工作正常,但是当你有很多 ConcreteAttribute 和很多 Character 时,我认为这不是最好的解决方案。所以我想用 Lua 来创建角色的“具体” istance,这样(小例子):
-- Eroe 1.lua
function create(eroe)
eroe:setName("Eroe 1")
attributes = luajava.bindClass("personaggi.attributi.StatType")
attacco = luajava.newInstance("personaggi.attributi.ConcreteAttribute", "Attacco", 20, 0)
eroe:getStatistiche():put(attributes.Attacco_Fisico, attacco)
end
但我收到此错误:PANIC: unprotected error in call to Lua API (attempt to call a nil value)。问题出在最后一行,但我对 Lua 真的很陌生,我什至不知道 Lua 是否可以处理 EnumMap。
有什么解决办法吗?
谢谢大家,对不起我的英语不好^^
编辑:我已经编辑了代码,我发现了一个错误