C++ Box2d物理演算ライブラリをlua言語で利用したい

質問内容

lua言語でc++ の物理演算ライブラリのBox2Dを利用したいのですがエラーの対処方法わかりません。
ChatGDPを参考に行ったのですがそもそも含まれていない等の原因はどこで間違えていて何をすればいいのでしょうか?

実現したいこと

SWIGを使ってC++ コードをlua言語に変換?してlua言語で利用する方法が知りたい

知りたいこと

この原因と対処方法が知りたい

> lua Main.lua 18:54:21 lua: Main.lua:5: attempt to index a nil value (field 'World') stack traceback: Main.lua:5: in main chunk [C]: in ?

前提

OS: ubuntu
C++ 言語のライブラリをlua言語で利用

発生している問題・エラーメッセージ

> lua Main.lua 18:54:21 lua: Main.lua:5: attempt to index a nil value (field 'World') stack traceback: Main.lua:5: in main chunk [C]: in ?

該当のソースコード

lua

1-- Box2Dライブラリを読み込む2local box2d = require("box2d")3 4-- 物理世界の作成5local world = box2d.World.new(0, 10)6 7-- 地面の作成8local groundBody = world:CreateBody(box2d.BodyDef.new())9local groundShape = box2d.PolygonShape.new()10groundShape:SetAsBox(10, 1)11groundBody:CreateFixture(groundShape, 0)12 13-- ダイナミックなボックスの作成14local dynamicBodyDef = box2d.BodyDef.new()15dynamicBodyDef.type = box2d.BodyType.DYNAMIC 16dynamicBodyDef.position:Set(0, -5)17 18local dynamicBody = world:CreateBody(dynamicBodyDef)19local dynamicShape = box2d.PolygonShape.new()20dynamicShape:SetAsBox(1, 1)21 22local dynamicFixture = dynamicBody:CreateFixture(dynamicShape, 1)23 24-- シミュレーションの更新25function love.update(dt)26 world:Step(dt, 8, 3)27end28 29-- 物理オブジェクトの描画(表示にLove2Dを使用している例)30function love.draw()31 local x, y = dynamicBody:GetPosition()32 love.graphics.rectangle("fill", x - 0.5, y - 0.5, 1, 1)33end34

行ったこと

SWIGでChatgdtを参考に以下のことを実行
1:.iファイルを作成

%module box2d %{ #include "box2d/box2d.h" %} %include "box2d/box2d.h"

2:コマンドを実行しbox2d_wrap.cppを生成

swig -lua -c++ -o box2d_wrap.cpp box2d.i

3: コマンドを実行してlibbox2.soを作成

g++ -shared -fPIC -I./include -I./src -o libbox2d.so ./include/box2d_wrap.cpp ./src/box2d.cpp`

3:/usr/local/lib/lua/5.4/に生成したlibbox2d.soを配置

> sudo mv libbox2d.so /usr/local/lib/lua/5.4/

4:提示コードを実行 
エラー

> lua Main.lua 18:40:33 lua: Main.lua:2: module 'box2d' not found: no field package.preload['box2d'] no file '/usr/local/share/lua/5.4/box2d.lua' no file '/usr/local/share/lua/5.4/box2d/init.lua' no file '/usr/local/lib/lua/5.4/box2d.lua' no file '/usr/local/lib/lua/5.4/box2d/init.lua' no file './box2d.lua' no file './box2d/init.lua' no file '/usr/local/lib/lua/5.4/box2d.so' no file '/usr/local/lib/lua/5.4/loadall.so' no file './box2d.so' stack traceback: [C]: in function 'require' Main.lua:2: in main chunk [C]: in ?

5:名前をlibbox2d.soからbox2d.soに変更してサイド実行

> lua Main.lua 18:54:21 lua: Main.lua:5: attempt to index a nil value (field 'World') stack traceback: Main.lua:5: in main chunk [C]: in ?
5について

Chatgdtに質問したことこ

このエラーは、box2dモジュールが World という名前のテーブル(またはクラス)を含んでいないことを示しています。可能性としては、Worldの代わりに別の名前が使われているか、またはbox2dモジュールが期待通りにロードされていない可能性があります。

という回答を得たのですがこれはおそらくSWIGを使った時の上記の行った事番の.iファイルの作成に問題があると思うのですが対処方法がわかりません。

補足情報(FW/ツールのバージョンなど)

Box2D(ダウンロードしてきたサイト): https://github.com/erincatto/box2d

コメントを投稿

0 コメント