問題タブ [luabind]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
1745 参照

c++ - 派生クラスの関数を luabind でバインドする

私は現在、Lua スクリプト インターフェイスを提供する C++ でプラグイン ベースのシステムを開発しており、そのために luabind を使用することにしました。Lua 5 と luabind 0.9 を使用しています。両方とも静的にリンクされ、MSVC++ 8 でコンパイルされています。関数が派生クラスで定義されているが、その親クラスでは定義されていない場合、関数を luabind にバインドする際に問題が発生しています。

より具体的には、すべてのプラグイン クラスが継承する「IPlugin」という抽象基本クラスがあります。プラグイン マネージャーが初期化されると、そのクラスとその関数が次のように登録されます。

どの効果的なプラグイン クラスが使用可能かは実行時にしか分からないため、プラグインのロードを一種の回り道で解決する必要がありました。プラグイン マネージャーは、ファクトリ関数を Lua に公開します。この関数は、プラグイン クラスの名前と目的のオブジェクト名を受け取ります。次に、ファクトリはオブジェクトを作成し、プラグインのクラスを「IPlugin」基本クラスから継承するものとして登録し、次のように、Lua の状態を持つグローバルとして自身を登録する作成されたオブジェクトで関数をすぐに呼び出します。

Luaがオブジェクトの最も派生したクラスを決定する際に問題があったため、最初にこれを行いました。プラグインマネージャーから登録した場合、特定のサブタイプではなく「IPlugin」のサブタイプとしてのみ知られています。これが必要かどうかはもうわかりませんが、機能し、作成されたオブジェクトはその後「a_name」の下で Lua からアクセスできます。

しかし、私が抱えている問題は、親クラスでまったく宣言されていない派生クラスで定義された関数を使用できないことです。上記の「start」など、基本クラスで定義された仮想関数は正常に動作し、新しいオブジェクトで Lua からそれらを呼び出すと、「PluginExample」クラスからそれぞれ再定義されたコードが実行されます。しかし、「PluginExample」に新しい関数を追加すると、たとえば、引数を取らずに void を返す関数を追加し、次のように登録します。

新しいオブジェクトで「func」を呼び出すと、次の Lua ランタイム エラーが発生します。

「:」構文を正しく使用しているため、「self」引数は必要ありません。突然、Lua がオブジェクトの派生型を判断できなくなったようです。おそらく私のシステム アーキテクチャで必要とされる 2 段階のバインドに関係しているのでしょうが、どこが間違っているのかわかりません。助けていただければ幸いです=)

0 投票する
1 に答える
1011 参照

c# - Luabind を C# に変換しますか?

Luabind を C# に変換しようとした人はいますか? そのようなことは可能ですか?

完全に管理された環境で実行できるように変換したいアプリケーションがありますが、ほとんどのゲーム ロジックは Lua スクリプトに依存しており、アプリケーションは Luabind を使用してやり取りを管理しています。私は Lua や Luabind に詳しくなく、何が関係しているのかを知ることができません。

ここで私は愚かな用事ですか?

0 投票する
1 に答える
2804 参照

c++ - luabind クラス (lua または c++) を反復する方法は?

luabind クラス (lua または c++) を反復する方法は?

ありがとう

0 投票する
1 に答える
575 参照

class - luabindクラスの__finalizeメソッドをオーバーライドするには?

luabindクラスの__finalizeメソッドをオーバーライドするには?

そのような方法でこれをやろうとしています:

しかし、lua はまだ元のファイナライザーしか呼び出しません。ただし、__init メソッドでは機能します。

また、getmetatable(A).__finilize をオーバーライドしようとしました。あまりにも役に立ちません。

どうすれば上書きできますか? 前もって感謝します。

0 投票する
2 に答える
725 参照

c++ - MSVC 10 + Luabind + std::vector == コンパイルを拒否

それで、私はMSVC 9でコンパイルされたコードを持っています.GCC、MingW、Mac上のGCC...

しかし、次の 1 行が MSVC でコンパイルされません。

コメントすると、アプリケーションは正常にコンパイルされます (ただし、実行時に中断します)。このブロックを別の場所 (他のファイルであっても) に移動すると、この特定の行でエラーが発生し続けます... ブロック内の順序を変更しても解決しません。

9 つのエラーが発生します。そのほとんどは .def の引数の数が間違っていることに関するものです (1、3、5 と予想されるときに 2 つの引数があると言う人もいれば、「引数が多すぎる」と言う人もいます)。 1:

エラー 7 エラー C2914: 'luabind::class_::def' : 関数の引数があいまいであるため、テンプレートの引数を推定できません E:\novashellSVN\clanlibstuff\novashell\source\ListBindings.cpp 178

これにより、私は一日中無駄になりました...これを引き起こすためにMSVC 10で何が変更されたのか、誰かが手がかりを持っていますか? 仕事が行き詰まったからといって、もはや私を悩ませることさえありませんが、それがいかに不可解で奇妙であるかという理由で。

編集:MSVC 10の「ベクター」ファイルを他のMSVCおよびGCCと比較しましたが、実際にMSVCには3つのバージョンがあり、特定のバージョンをロードする方法を正確に知っている人はいますか?

3 つのバージョン:

0 投票する
1 に答える
1116 参照

c - Lua シャットダウン/プログラム実行終了コールバック

Luaのモジュールを書いています。ユーザーが暗黙的にシャットダウン ルーチンを呼び出すのを忘れた場合でも、lua インタープリターを閉じるときに、クリーンアップ ルーチンを実行する必要があります。

モジュールはほとんど C で書かれています。

プログラム実行の終了を検出するには、Lua C Api でどのコールバックを使用すればよいですか? 私が思いついた唯一のアイデアは、モジュールを表すテーブルで __gc メタメソッドを使用することです。何か案は?

0 投票する
1 に答える
2543 参照

c++ - 既存のC++オブジェクトをLuaに渡し、渡されたオブジェクトのメンバー関数を呼び出す

私は、Luaを使用して個々のユニット(アリ)の動作を駆動し、Luabindを使用してC++側とLua側を接着する小さなシミュレーションプロジェクトに取り組んでいます。個々のant(基本クラスAntから派生したさまざまなタイプがあります)には、適切なスクリプトを呼び出すRun()関数があります。次に、スクリプトは、実行する必要のあるアクションを実行し、公開されたクラス関数と、場合によってはフリー関数を呼び出します。Run関数(C ++)を取得して、Luaスクリプトで一致するRun関数を正常に実行しました(現時点ではテキストを出力するだけです)。

luaスクリプトから関数を取得する単なるマネージャークラスです。上記はLuaファイルで以下を呼び出しています:

また、Luabindの登録は、AntQueenクラスでは次のようになります。

現在の設定方法では、アリは単純なファクトリ/マネージャを介して作成、削除、および検出されます。static Ant* AntFactory::GetAntByID(const int ID)各アリは、ハッシュマップでアリを見つけてアリへのポインタを返す呼び出しによって取得できます。私がやろうとしているのは、Luaに次のようなことができるようにすることです。

上記は単なる例ですが、うまくいけば、私が達成しようとしていることを示しています。オブジェクトはすでにC++側で管理されているため、Luaがオブジェクトをガベージコレクションすることは望ましくありません。すべてをテストしている間、次のことを実行しようとします。

Luaabort()で呼び出され、プログラムがクラッシュして焼けてしまいました。

すべてが行き来する方法に何かが欠けているようです(これは、おもちゃのプログラムを超えてLuaとC ++を接着するための私の最初の試みです)。プレーンポインタを渡すことはそれを行う方法ではないと確信しています。lightuserdataは私が探しているもののようですが、多くの制限もあります。

要約すると、ここで何が起こっているabortのか、Luabind / Lua C APIを使用して、Luaに渡されたC ++オブジェクトへのポインターを取得し、そのポインターのメンバー関数をオブジェクトであるかのように呼び出すにはどうすればよいですか? (Luaのガベージコレクションを行わせずに)?

0 投票する
2 に答える
666 参照

c++ - luabindはいつ作成されたオブジェクトを解放しますか?

luabindに問題があります。luaで作成されたオブジェクトを割り当てるためにstd::mapを定義します。このマップをluaのグローバルオブジェクトとして次のように公開します。

その後、このオブジェクトはluaの関数に使用され、そこで多くのオブジェクトが作成され、このマップに挿入されます。この問題は、lua関数が終了し、luabindが制御をC ++サイドプログラムに戻すときに発生します。これは、マップのすべてのコンテンツが自動的に失われるためです。

エラーを探していました。luaコンテキストを存続させるため、このオブジェクトが存在する必要があります。

私たちを手伝ってくれますか??

どうもありがとう :)

0 投票する
2 に答える
2170 参照

c++ - lua を C++ ゲームに統合するためのヘルプが必要

ゲームに lua を統合するためのサポートが必要です。スクリプトの学習を始めたばかりなので (一般的に)、lua については少ししか知りません。lua に関するチュートリアルを読んだことがありますが、そのほとんどは、C++ コードで lua をバインドする方法 (LuaBind でそれを行うことができました)、または lua の機能を説明するだけです。

「プレーヤー」クラスと「障害物」クラスがあるとしましょう。障害物クラスには次の機能があります。

onTouchPlayer と onUpdate は、スクリプトに基づいて異なる動作をすることを意図しています。

私を混乱させるのは、スクリプトに何を書くべきか、そしてそれをC ++で呼び出す方法ですか? LuaBind を使用して既に Player クラスを Lua にエクスポートしている場合、たとえば onTouchPlayer() でプレーヤーを殺し、lua の onUpdate 関数で障害物をランダムに移動するにはどうすればよいですか?

0 投票する
2 に答える
992 参照

c++ - ゲーム NPC マルチアクション lua スクリプトの設計

現在のゲーム プロジェクトにスクリプト可能な NPC を配置する必要があります。プロジェクト自体は C++ 言語で開発されています。Lua と C++ をバインドするために Luabind を使用します。

特定の NPC がクリックされたとき、または何かを行うためのタイマーがアクティブになったときに、NPC 関数を呼び出す必要があります。現在、私は 2 つの NPC スクリプト デザインの間で行き詰まっています。

  1. npcname_action の一種を使用して、すべての NPC を区別します。
    NPCごとに名前をつけるのはちょっと面倒。
    私はまだこれを私のプロジェクトに実装する方法を考えています。
    例:

    /li>
  2. 関数の名前を使用します。
    すべての npc には独自の lua ファイルがあります。
    スクリプトをメモリにロードすることを考えており、必要に応じて 例をluaState使用してロードされます:luaL_loadbuffer

    /li>

どちらが優れているのか、その理由は?