今、LuaとC/C++を組み合わせてゲームを組んでいます。
そこで、どうにもLuaから C/C++の関数が呼び出されていない状態になってしまいました。
ちょっといじるまえまでは動いていたのですが・・・・
ソースコード全部は載せきれないので、部分的にのせますので、どこかおかしいところはないでしょうか?
LuaからC/C++の関数が呼び出されないというのは、ブレークポイントをセットしていてて、
そこに、ヒットしないのです。
(GetenemyIndex関数でブレークポイントを設定しても、ここで止まらない よびだされていない)
なので、luaの記述に問題があるのでしょうか?
ステージ.cpp
// =========================================================================
// g_tInfo.m_enemyIndex の取得
int GetenemyIndex()
{
return g_tInfo.m_enemyIndex;
}
int GetenemyIndexGlue( lua_State *L )
{
// 目的の関数を実行
int enemyIndex = GetenemyIndex();
// スタックをクリア
lua_settop( L, 0 );
// 返り値を格納
lua_pushnumber( L, enemyIndex );
// 返り値の数1
return 1;
}
// =========================================================================
void Cステージ::メインステージ()
{
DrawFormatString( 0, 60, GetColor(0,0,0), "enemyIndex:%d", g_tInfo.m_enemyIndex );
DrawFormatString( 0, 80, GetColor(0,0,0), "m_frame:%d", m_frame );
static int stage_mode = 0;
if( 0 == stage_mode )
{
// 敵リストを読み込む
char szLua[80];
sprintf_s( szLua, "stage%02d.lua", g_tInfo.m_stage_count);
FILE *file;
fopen_s( &file, szLua, "rt" );
if( file )
{
luaL_dofile( L, szLua );
fclose( file );
stage_mode = 1;
m_frame = 0;
// もし敵リストが有効で、敵が追加されたら
if( g_tInfo.mv_Enemy.size() > 0 )
{
g_tInfo.m_enemyIndex++;
}
}
else
DrawFormatString( 100, 0, GetColor(0,0,0), "%s がありません", szLua );
}
else
{
// 通常の処理
プレイヤーの処理();
プレイヤーの弾の処理();
敵リストの処理();
敵の処理();
敵の弾の処理();
あたり判定処理();
if( 0 == g_tInfo.mv_Enemy.size() )
stage_mode = 0;
}
}
main.cpp
// LuaのVMを作成する
L = lua_open();
// Luaの標準ライブラリを開く
luaL_openlibs( L );
// C関数を登録
lua_register( L, "L_DrawString", L_DrawStringGlue );
lua_register( L, "L_DrawString2", L_DrawString2Glue );
lua_register( L, "L_SelectIndex", L_SelectIndexGlue );
lua_register( L, "L_ChangeState", L_ChangeStateGlue );
lua_register( L, "L_DrawStringEnd", L_DrawStringEndGlue );
lua_register( L, "EnemyCreate", EnemyCreateGlue );
lua_register( L, "EnemySet", EnemySetGlue );
lua_register( L, "SetenemyIndex", SetenemyIndexGlue );
lua_register( L, "GetenemyIndex", GetenemyIndexGlue );
stage01.lua
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
function EnemyScript01()
-- Create( frame, x, y, kind, v, a, angle, shoot );
EnemyCreate( -1, 0, 0, 1, 2, 0, 0, 1 );
-- Set( start, end, v, a, angle, shoot );
EnemySet( 0, 200, 4, -0.1, 45, 0 );
EnemySet( 0, 700, 1, 0, 0, 1 );
EnemySet( 0, 900, 4, 0.01, -45, 0 );
-- Create( frame, x, y, kind, v, a, angle, shoot );
EnemyCreate( 300, 100, 0, 1, 2, 0, 0, 1 );
-- Set( start, end, v, a, angle, shoot );
EnemySet( 0, 200, 4, -0.1, 45, 0 );
EnemySet( 0, 700, 1, 0, 0, 1 );
EnemySet( 0, 900, 4, 0.01, -45, 0 );
end
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
function EnemyScript02()
-- Create( frame, x, y, kind, v, a, angle, shoot );
EnemyCreate( -1, 0, 0, 1, 2, 0, 0, 1 );
-- Set( start, end, v, a, angle, shoot );
EnemySet( 0, 200, 4, -0.1, 45, 0 );
EnemySet( 0, 700, 1, 0, 0, 1 );
EnemySet( 0, 900, 4, 0.01, -45, 0 );
-- Create( frame, x, y, kind, v, a, angle, shoot );
EnemyCreate( 300, 100, 0, 1, 2, 0, 0, 1 );
-- Set( start, end, v, a, angle, shoot );
EnemySet( 0, 200, 4, -0.1, 45, 0 );
EnemySet( 0, 700, 1, 0, 0, 1 );
EnemySet( 0, 900, 4, 0.01, -45, 0 );
end
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
function EnemyScriptEnd
L_DrawString( 100, 0, "EnemyScriptの最後です", 1, 0 );
end
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
functionTable = {}
functionTable[1] = EnemyScript01;
functionTable[2] = EnemyScript02;
functionTable[3] = EnemyScriptEnd;
function CreateEnemy( index )
end
index = GetenemyIndex();
functionTable[index]();
--CreateEnemy( index );