質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Lua

Luaは、汎用のスクリプト言語の一つで、 移植性が高く、高速な実行速度などの特徴を持ち 手続き型・オブジェクト指向言語としても利用可能で 関数型言語、データ駆動型の要素も併せ持っている言語です。

Q&A

0回答

245閲覧

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

samidare_chan

総合スコア16

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Lua

Luaは、汎用のスクリプト言語の一つで、 移植性が高く、高速な実行速度などの特徴を持ち 手続き型・オブジェクト指向言語としても利用可能で 関数型言語、データ駆動型の要素も併せ持っている言語です。

0グッド

0クリップ

投稿2024/03/01 10:38

質問内容

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) 27end 28 29-- 物理オブジェクトの描画(表示にLove2Dを使用している例) 30function love.draw() 31 local x, y = dynamicBody:GetPosition() 32 love.graphics.rectangle("fill", x - 0.5, y - 0.5, 1, 1) 33end 34

行ったこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問