C++でLuaの使い方

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kai

C++でLuaの使い方

#1

投稿記事 by kai » 15年前

はじめまして。質問させてください。

現在RPGを作っているのですが、イベントに使うスクリプトをLuaにしようと思いました。
そこで、C++にLuaを組み込むにはどうすれば良いのでしょうか。
普通に組み込むなら出来ますが、沢山スクリプトを作るとその度にC++側でスタックしてやる必要があるのですか?
イベントの概念自体もはっきりしてないのでそもそもの勘違いなのかもしれませんが、、、よろしくお願いします。

環境はVC++2008,C++,DXライブラリです。
駄文すみませんでした。

sizuma

Re:C++でLuaの使い方

#2

投稿記事 by sizuma » 15年前

僕もやってみたいな、とは思ってるんですけどね。
本格的にやるなら↓

スクリプト言語による効率的ゲーム開発 C/C++へのLua組込み実践
http://www.amazon.co.jp/%E3%82%B9%E3%82 ... 4797348550

おそらくC++もLuaも使える人用でしょう。 画像

kai

Re:C++でLuaの使い方

#3

投稿記事 by kai » 15年前

返信ありがとうございます。

やる気はありますが、それでも趣味の領域ですし、学生なので流石にそこまでお金は出せません;;
とりあえず明日本屋で探してみます。

softya

Re:C++でLuaの使い方

#4

投稿記事 by softya » 15年前

Luaを使った事が無い事をお断りしておきます。

RPGのオーソドックスな手法としては、マップの指定区間を踏むことやNPCキャラクタと会話することでLuaの関数を呼び出せば良いと思います。
あとはマップの初期化とか、キャラクタの配置とか色々便利なので必要に応じて関数を増やせば良いかなと。
スクリプトはマップごとに作った方が管理が楽だと思います。その場合グローバル変数の持ち回り方法は考えて置く必要がありますね。
あと、Luaから会話メッセージを出す場合などに、ずっとLuaにいるままって訳にもいかないのでメッセージループに戻る方法は考えておく必要があります。Luaだとコルーチンが使えるかもしれません。

Naohiro19

Re:C++でLuaの使い方

#5

投稿記事 by Naohiro19 » 15年前

コンソールで動くサンプルプログラムです。
#include <stdio.h>
#include <lua.hpp>
#pragma comment(lib, "lua5.1.lib")

//add関数の実装
int add( int a, int b)
{
    return a + b;
}

//add関数のグルーコード
int addGlue(lua_State* L)
{
    //引数を取得
    int a = (int)lua_tonumber(L, 1);
    int b = (int)lua_tonumber(L, 2);

    //目的の関数を実行
    int ret = add(a, b);

    //スタックをクリア
    lua_settop(L, 0);

    //戻り値を格納
    lua_pushnumber(L, ret);
    return 1;
}

int main(void)
{
    //luaのVMを開く
    lua_State* L = lua_open();
    lua_openlibs(L);

    //関数をLuaに登録する
    lua_register(L, "add", addGlue);

    //luaの読み込み
    if( lua_loadfile(L, "add.lua") || lua_pcall(L,0,0,0)){
        printf("error: %s\n", lua_tostring(L, - 1));
        return -1;
    }

    //luaを閉じる
    lua_close(L);
    return 0;
}
Luaからは
-- add.lua
local res = add(10, 9)
local fmt = string.format("10 + 9 = %d", res)
print(fmt)
で呼び出せます。
結果は「10 + 9 = 19」と画面に表示されると思います。

kai

Re:C++でLuaの使い方

#6

投稿記事 by kai » 15年前

>softyaさん
> あと、Luaから会話メッセージを出す場合などに、ずっとLuaにいるままって訳にもいかないのでメッセージループに戻る方法は考えておく必要があります。Luaだとコルーチンが使えるかもしれません。
コルーチンですか。使ったことがないですが、便利そうですね。
勉強してみます。

>Naohiro19さん
わざわざ書いていただきありがとうございます。
グルーコードを指定してやれば良かったんですか。知らなかったです。
ありがとうございましたm(__)m


出来そうな気がするので解決にします。
また質問した際にはよろしくお願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る