1

この種のエラーについては多くの投稿があり、ほとんどの人はテーブルと配列のインデックスの問題に関連していると言っています。しかし、私はテーブルをまったく使用していません。作成したライブラリ関数を呼び出そうとしているだけで、このエラーが発生します。以下は、Java から呼び出される lua スクリプトです。

String script = new String (  
             "function event_touch (  )"  
            + "   pb.open_form ('view_monster');"
            + "   print ('I ran the lua script');"
            + "end");

PBLUAengine.run_script(script, "event_touch");

これにより、例外をトラップするときに次のエラーが発生します。

"function event_touch ( ) pb.open_form ('view_monster'); print ('I run the lua script');end:1 インデックスの試行 ? (nil 値)"

run_script() 関数は、次のようにスクリプトを呼び出します (私は luaj を使用しています)。

public static LuaValue run_script ( String script )
    {
        try
        {
            LuaValue chunk = s_globals.load( script );
            return chunk.call();
        }
        catch ( Exception e)
        {
           Gdx.app.error ("PBLUAengine.run_script()", e.getMessage() );
        }   

        return null;
    }

ライブラリ メソッドは次のようになり、Java から呼び出されたときに同じコードが機能します。

static class open_form extends OneArgFunction
{
        public LuaValue call (LuaValue formname)
        {           
            String tmpstr = (String ) CoerceLuaToJava.coerce(formname, java.lang.String.class );

            try
            {               
                PBscreen_game.hide_subscreen(PBscreen_game.MENU_SUBS); 
                PBscreen_game.show_subscreen ( PBscreen_game.FORM_SUBS);
                PBsubscreen_form.open_form ( new PBform_regular ( tmpstr ) );   
            }
            catch (Exception e)
            {
                Gdx.app.error("PBLUAlibrary.open_form", e.getMessage());
            }

            return valueOf ( 0 );
        }
    }

基本的に、lua パラメーターを文字列に変換し、新しい from を作成して、パラメーターに文字列を渡します。

ライブラリ関数の宣言は次のようになります。

public LuaValue call( LuaValue modname, LuaValue env )
    {
        LuaValue library = tableOf();
        library.set( "open_form", new open_form() );
        library.set( "open_system_form", new open_system_form() );
        env.set( "pb", library );
        return library;
    }

これは、システム全体で見ることができる唯一の「テーブル」である可能性があります。これは通常、適切なクラスを適切な関数名にリンクするために使用されます。

誰にもアイデアがありますか?

4

2 に答える 2

2

ほとんどの人は、テーブルと配列のインデックス作成の問題に関連していると言っています

これは、テーブルと配列のインデックス付けに関連しています。オブジェクトのインデックスを作成しようとして、そのオブジェクトがnilである場合、次のエラーが発生します。

私はテーブルをまったく使用していません [..] これが lua スクリプトです。

pb.open_form

pbインデックスされています。おそらくnilです。

于 2015-07-28T19:27:44.810 に答える
0

ライブラリを含めるためにrequire行を追加することで問題を解決したようです。したがって、新しいスクリプトは次のとおりです。

String script = new String (
            "require 'com.lariennalibrary.pixelboard.library.PBLUAlibrary'"
            +  "function event_touch (  )"  
            + "   pb.open_form ('view_monster');"
            + "   print ('I ran the next button lua script');"
            + "end");

すべての「pb.*」関数を追加するライブラリ クラスを含めるように求められます。私はおそらくエラーで行を削除したか、それなしで何とか機能させることができました. このライブラリはすべてのスクリプトで必要になるため、実行しようとする各スクリプトの前にデフォルトで追加することがあります。

再度、感謝します

于 2015-07-29T23:49:07.200 に答える