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

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

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

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

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

Lua

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

DirectX

DirectX(ダイレクトエックス)は、 マイクロソフトが開発したゲーム・マルチメディア処理用のAPIの集合です。

Q&A

2回答

2836閲覧

Lua 動的リロード

Malboro

総合スコア18

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

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

Lua

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

DirectX

DirectX(ダイレクトエックス)は、 マイクロソフトが開発したゲーム・マルチメディア処理用のAPIの集合です。

0グッド

1クリップ

投稿2017/05/25 02:58

Luaを昨日から勉強しはじめたのですが、わからないことがあります。

実装したいことは、
ゲームを制作しているのですが、プレイヤーの座標などを毎回C++でコンパイルし直して
実行を確認するのが面倒く感じてきましたので、スクリプト言語のLuaを使用して、

実行画面中にプレイヤーやオブジェクトの座標をリアルタイムで変更したいと思っています。

そこでリアルタイムで◯◯◯.luaファイルから読み込みを行なって、
ゲームに反映させるのを考えてみたのですが、

Lua

1print("Pos = x = 0, y = 0, z = 0")

C++

1 lua_State *L = luaL_newstate(); 2 luaL_openlibs(L); 3 4 /*ゲームループと仮定*/ 5 while(1) 6 { 7 luaL_dofile(L, "/Users/shogon/Desktop/Hello.lua"); 8 } 9 10 11 lua_close(L);

こんな感じでlua_dofileを毎ループ実行してもいいのでしょうか?

lua_dofile関数は重たい関数ですか?
Luaの読み込みを行うのはそれなりに思いでしょうか?

リアルタイムでキャラクターの座標をスクリプト側で更新するために、
最適な方法を教えていただければ幸いです。

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

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

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

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

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

guest

回答2

0

プレイヤーやオブジェクトの座標、特にプレイヤーの座標はキー操作などで変わりますよね。それをLuaファイルに保存するのも確かに一つの手ですが、そういうリアルタイムに変わる値や半固定の値は、別のファイルにデータベース的に持っておいた方が良いと思います。

例えば、INIファイル形式のファイルにするとか、SQLite3のDBファイルにするとか。

Luaはプレイヤーや敵の動きを記述するような形(Luaに定義した関数を呼び出すと次の座標やステータスが戻ってくる)にしたほうが良いと思います。そうすれば、敵の動きなどを変える度にコンパイルし直す必要がなくなります。

INIファイルならテキストファイルでWindows APIを使って簡単に読み出せますし、メモ帳で編集することも簡単にできます。
SQLite3にすれば表形式でいろいろな値を保存することができます。DLLが配布されているのでC/C++とI/Fのするのはさほど難しくはありません。オフラインでの編集にはいくつかフリーのGUIツールがありますし、本家のSQLite3コマンドプロンプトアプリを使用しても可能です。

定義ファイルがない場合は、デフォルト値をプログラムで書き出せばいいと思います。(そういう意味でデフォルト値はプログラム内に書いておいたほうが良い)

SQLite3ダウンロード先
C++ SQLite Wrapperクラス
SQLite GUIツール

投稿2017/05/25 08:13

PineMatsu

総合スコア3579

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

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

0

さすがに毎フレームdofileはコストが高いでしょうね。
ファイルを最初にロードしたら、あとはコールするのみとした方がよさそうです。
ご参考までに、luaL_dofile(lua_State *L, const char *filename)luaL_loadfile(L, filename) || lua_pcall(L, 0, LUA_MULTRET, 0))とマクロ定義されているようです。

投稿2017/05/25 03:41

編集2017/05/25 07:47
Bongo

総合スコア10807

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問