C/C++ と lua で組もうとしています。
そこで、C/C++ で線を引き、毎フレームごとに座標を加算していく
ということをluaのファイルでおこないたいのです。
今の方法だと、毎フレーム lua スクリプトを呼び出し、そのつどluaで
使用する変数を初期化しています。
なので、毎回luaで使用する変数は初期値だけが適応されてしまいます。
ではなくて、2フレームにluaスクリプトを呼び出したら、1フレーム時の座標から
すこしずれて(加算されて)処理したいのです。
伝えづらいのでソースコードを貼ります。
--- C/C++ ---
// DxLib_骨組み.cpp : アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
#include "DxLib_骨組み.h"
lua_State *L;
void DrawLine( int x1, int y1, int x2, int y2, int r, int g, int b )
{
DrawLine( x1, y1, x2, y2, GetColor(r,g,b) );
}
int DrawLineGlue( lua_State *L )
{
// 引数を取得
int x1 = (int)lua_tonumber( L, 1 );
int y1 = (int)lua_tonumber( L, 2 );
int x2 = (int)lua_tonumber( L, 3 );
int y2 = (int)lua_tonumber( L, 4 );
int r = (int)lua_tonumber( L, 5 );
int g = (int)lua_tonumber( L, 6 );
int b = (int)lua_tonumber( L, 7 );
int color = GetColor(r,g,b);
// 目的の関数を実行
DrawLine( x1, y1, x2, y2, color );
// 戻り値を格納
lua_pushnumber( L, 0 );
// 戻り値の数(0)
return 0;
}
template <typename T1, typename T2, typename T3, typename T4> void DrawLine( T1 t1, T2 t2, T3 t3,T4 t4, int color )
{
DrawLine( (int)t1, (int)t2, (int)t3, (int)t4, color );
}
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine,int nCmdShow)
{
L = lua_open();
luaL_openlibs(L);
luaL_dofile( L, "start.lua" );
// 関数を登録
lua_register( L, "DrawLine", DrawLineGlue );
// ウィンドウモードで起動
ChangeWindowMode( TRUE );
DxLib_Init();
// Zキーの入力待ち
while( CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
ClearDrawScreen();
if( luaL_dofile( L, "start.lua" ) )
{
// エラー時のメッセージ表示
string error_message = lua_tostring( L, -1 );
DrawString( 0, 0, error_message.c_str(), GetColor(255,0,0) );
}
// やりたいこと
static double x1 = 100, y1 = 100, x2 = 300, y2 = 200;
DrawLine( x1, y1, x2, y2, GetColor(128,128,0) );
x1 += 0.1; y1 += 0.1; x2 += 0.1; y2 += 0.1;
// メッセージ処理
if( ProcessMessage() == -1 )
{
break ; // エラーが発生したらループを抜ける
}
}
DxLib_End();
lua_close( L );
}
x1 = 100;
y1 = 100;
x2 = 300;
y2 = 200;
r = 128;
g = 255;
b = 255;
function DrawLine_test( x1, y1, x2, y2, r, g, b )
DrawLine( x1, y1, x2, y2, r, g, b );
return x1+1, y1+1, x2+1, y2+1;
end
x1, y1, x2, y2 = DrawLine_test( x1, y1, x2, y2, r, g, b );
問題のluaファイルは、呼び出すごとに初期値が入りますので、
どうやって更新しても、初期値で処理されてしまいます。
2フレーム以降、上のluaスクリプトでは、x1 = 100 が x1 = 100.5 , 101 , 101.5 , 102 ,,,,
となっていってほしいのですが、どのような方法があるのでしょうか?
それとも、このやり方(毎フレームごとにluaスクリプトを呼び出す方法)では
無理なのでしょうか?
詳しい方いらっしゃいましたら、教えていただけると幸いです。