正如标题所述,我对LuaJava和EnumMap有问题。我试图做一个RPG库,所以我们有一个字符和一些属性和列表。在下面的代码中,我只报告一些重要的事情。
我有一个名为ConcreteAttribute的类,它扩展了AbstractAttribute,它有一个带有字符串和两个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游戏中的stat:
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;
}以及地图中的"put“方法。
为了创建一个新字符,我目前正在这样做("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和大量的字符。所以我想用Lua来创造“具体”的性格,这样(小的例子):
-- 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但是我得到了这个错误:恐慌:调用Lua中的无保护错误(试图调用一个零值)。问题在于最后一行,但我对Lua非常陌生,我甚至不知道Lua是否能处理EnumMap。
有什么解决办法吗?
感谢所有的人,并为我糟糕的英语^^道歉
编辑:我已经编辑了代码,我发现了一个错误
发布于 2014-08-25 15:41:04
枚举常量是其枚举类的公共成员,但您正在访问它,就像使用:的方法一样。
因此,您需要使用的不是attributes:Attacco_Fisico,而是attributes.Attacco_Fisico。
https://stackoverflow.com/questions/25488239
复制相似问题