2

タイトルが示すように、LuaJava と EnumMap に問題があります。私は RPG ライブラリを実行しようとしているので、いくつかの属性とそれらのリストを持つキャラクターがあります。以下のコードでは、重要なことだけを報告します。

AbstractAttribute を拡張する ConcreteAttribute というクラスがあります。これには、String と 2 つの 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*/

}

次に、RPG ゲームでの統計を表す StatType という Enum があります。

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 の「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 と多くの Character がある場合、これが最善の解決策ではないと思います。だから私は、このように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

しかし、次のエラーが表示されます: PANIC: Lua API の呼び出しで保護されていないエラーが発生しました (nil 値を呼び出そうとしました)。問題は最後の行にありますが、私は Lua に本当に慣れていないので、Lua が EnumMap を処理できるかどうかさえわかりません。

これに対する解決策はありますか?

皆さんありがとう、そして私の下手な英語でごめんなさい^^

編集: コードを編集しましたが、エラーが見つかりました

4

1 に答える 1

0

列挙型定数はその列挙型クラスのパブリック メンバーですが、を使用してメソッドのようにアクセスしています:

したがって、代わりにattributes:Attacco_Fisicoを使用する必要がありますattributes.Attacco_Fisico

于 2014-08-25T15:41:04.323 に答える