Luaで2回目以降の呼び出しで変数を保持する方法

このQ&Aのポイント
  • LuaとC/C++での開発において、2回目以降の呼び出しで変数を保持する方法について説明します。
  • グローバル変数を使用する方法や、外部ファイルに変数を保存する方法などがありますが、一番簡単な方法は、Luaの環境変数を使用することです。
  • Luaの環境変数は、Luaの実行環境で共有される変数であり、値を保持することができます。2回目以降の呼び出しでは、前回の処理結果を環境変数に保存し、再度呼び出す際にその値を取得することで変数の保持が可能です。
回答を見る
  • ベストアンサー

luaで2回目以降の呼び出しで変数を保持しておく

C/C++とLua言語で開発しています。 メインはC/C++言語でつくっていてて、補助的なスクリプト部分はLuaです。 そこで、たとえば、F1キーを押したらLuaのスクリプトAを起動するとします。 そしたら、LuaのスクリプトAが処理され、またC/C++に処理がもどってきます。 そのあと、また別の機会にF1を押したら、前回のLuaスクリプトAの 処理で使用した変数を保持したままの状態から、再度Luaスクリプトを 実行したいのです。 グローバル変数を使って実現しようとしましたが、うまくできませんでした。 ファイル:hoge.lua [START] _G[switch] = 0; if _G[switch] == 0 then _G[value] = 100; end _G[value] = 120 [END] と、作ったのですが、2回目以降呼び出しても _G[switch] = 0 をとおるので どうしても _G[value] = 100 となってしまいます。 したい処理としては、2回目以降の呼び出しで、_G[switch] = 0 とならずに _G[value] の1回目の処理の結果を保持したままの状態で、処理したいのです。 条件として、F1キー(指定したキー)でLuaスクリプトを呼び出せて、 C/C++言語の方は、処理を続行 処理を続行中にF1キー(指定したキー)を押すと、前回の状態(変数)を保持したまま Luaスクリプトを処理するというものです。 上の実装した例でいうところでは、_G[value] が 120 の状態でスクリプトを処理したいのです。 どのような実装方法があるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • honor
  • ベストアンサー率35% (25/71)
回答No.1

c/c++側が引数と戻り値を使って値を保持すればいいのではないでしょうか。

dic_567
質問者

お礼

別の実装方法がわかりました ありがとうございました。

関連するQ&A

  • 変数の保持

    変数の保持 1.PHP $pst=$_POST; if(is_array($pst)){ foreach($pst as $key => $value) {$$key=$value;global $$key;} } if($action==""){ require_once 'index.html'; } elseif($action=="login2"){ require_once 'top.html'; } elseif($action=="top2"){ require_once 'top2.html'; } **.html <form method="post" action="1.php"> <input type="hidden" name="action" value="login2"> <input type="text" size="10" name="uusid"> <input type="submit" value="submit"> </form> htmlはすべてのページでform記述です。 例として、5ページある場合に、現在のところ、$uusidを5ページ目まで保持できないのですが、どうしたらいいのでしょうか? もしかして、グローバル関数化は可変変数ではできなかったんでしょうか? ・1p目:$uusid入力 ・2p目:print($uusid);で確認 ・3p目:<?=$uusid?>を使用するも消えてる

    • ベストアンサー
    • PHP
  • C言語のStatic変数について

    現在、C言語の勉強しながらゲームプログラムにチャレンジしています。 二つの関数で利用する変数を作りたかったので、Static宣言された変数を容易しました。 ですが、この変数、一度処理が終わると当面使わない変数なのです。 (ただし、処理途中は何度も呼び出されるので値は保持しなければいけません) よって、メモリ上に延々居座られるのが邪魔に思えて仕方ありません。 実際、大したことないだろうとは思うのですが。 このStaticで宣言された変数を、自分の好きなタイミングでメモリ上から解放するような処理はできませんか? もしくはメモリ上に居座ることのない処理の仕方などありましたら、 考え方を教えていただけるとうれしいです。よろしくお願いします。

  • 変数とデータ型のことで。

    C言語の変数とデータ型の勉強をしているのですが、 %5.2fがどうしたら1.26になるのと あと %05.2fが01.26になることが全くわかりません; どなたか詳しく教えてくれませんか??

  • 変数を複数ページにわたって保持するには?(Smarty)

    メール送信画面を作成しています。 まだPHP・Smarty初心者なので四苦八苦です。 Smartyに関する質問です。 画面A→画面B→画面C・・・ のように、複数ページにわたって変数を保持するにはどうしたらよいのでしょうか? 画面BやCになったときに <input type="hidden" value="{$smarty.post.NAME}"> のように、毎回hiddenを用いる方法しか思いつきません。 もっと簡単な方法があれば、どなたかご教授お願いいたします。

    • ベストアンサー
    • PHP
  • 変数に保持している値はどうやったら確認できるの?

    Publicで宣言した変数はブックを閉じるまで値を保持すると言うけど、 その保持している値はどうやったら確認できるのですか? 例えば標準モジュールに ++++++++++++++++++++++++++++++ Option Explicit Public a As String Sub test() a = "こんにちは" End Sub ++++++++++++++++++++++++++++++ とした場合、 1回testを実行すると、a には "こんにちは"が入りますよね。 この時例えばトイレに行って、パソコンの前に戻ってきたときに、 「aに何の値がはいってたっけ?」ってどうやって確認すればいいのでしょうか? testを実行する前に、ウォッチ式にaを登録しましたが、 testを実行し終わるとaの値は「対象範囲外」になっています。 でもこの状態でもaの値は保持されてるのですよね? 発見したのは、testをF8でステップインをすると、 2行目のa = "こんにちは"を通過する前に、aにすでに値が入ってる事がわかりました。 こういう方法で確認するしかないのでしょうか?

  • 参照型変数へのポインタに関してです。

    参照型変数へのポインタに関してです。 たとえば int _v[10]; int &v = &_v[0]; int *pv; pv = &v;  // 参照型変数のアドレスをポインタに代入 こうすると、pv[n]と、_v[n]は同値になります。(VC++とG++では確認) これ(この使い方)で同値なのは ・c++の言語仕様 ・コンパイラの実装依存 のどちらでしょうか? WEBを漁ると「参照型変数はエイリアス(別名)」とかかれているページがヒットするので、C++の言語仕様かなと思っています。 #もちろん配列に置き換えずに単純な参照型変数として使った場合の、値の同一性は言語仕様でしょうが。

  • ポインタ変数を変数に渡す方法

    (int * 型)ポインタ変数に代入されたアドレスを、(普通の)int 型変数に代入したいのですが、どのようにするのが正しいのでしょうか。 想定しているケースは、与えられたメモリ番地に対して、アドレスオフセットを加えるなどの操作を施して「補正アドレス」を生成し、メモリアクセスを行う、というような特殊な操作を実現するような場合です。 ※ メモリ番地がポインタ宣言で与えられる、という制約があります。 以下サンプルプログラムを書きました。組み込み系のプログラムを記述していますが、これで正しいでしょうか。 unsigned int *p, *p1; // ポインタ変数宣言 unsigned int value; p= (unsigned int *)0x00001F00; // メモリの0x1F00番地 value = p; // <-- ここが心配 value |= 0xCC << 16; // 与えられたアドレスから value &= 0x4 << 12; // 「補正アドレス」生成 p1 = (unsigned int *)value; *p1 = 0xA5A5_A5A5; // 「補正アドレス」にA5A5... をライト C言語初心者で、いろいろなサイトを見てみたのですが、説明されているページが見つからず質問させていただきました。どうぞよろしくお願いします。

  • ゲームを製作する

    windows向けのPCゲームを、Cで作ろうと思うのですが、 ゲーム(TVゲームも含め)を作る際、スクリプト言語(Lua)を使うのは一般的なのでしょうか。 またC + Lua + Directxの環境とC + Lua + OpenGL + OpenALという環境と、どちらがいいのでしょうか。 ちなみにvisual studioを使用しています。

  • FireFoxで動画(音楽)再生終了をイベントを検知する方法

    お世話になっています。 動画(音楽)ファイル再生終了後に処理を実装したいと考えています。 IEではEndOfStreamで動作するのですが、 FireFoxでは動きません。 FireFoxで再生終了を検知するにはどうしたらよいでしょうか。 -----サンプル----- <object id="p1" classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95"> <param name="FileName" value="movie.mpg"> <param name="AutoStart" value="true"> </object> <script for="p1" event="EndOfStream(lResult)" type="text/javascript"> <!-- 処理を実装・・・ --> </script>

  • CでOpenMP、パラレル内での共有変数の宣言方法

    C言語でOpenMPを利用したとき、parallel構文内で、共有変数を宣言する方法はありますか? OpenMPを利用して、スレッド並列にしたプログラムを書いています。 #pragma omp parallel { ~~ ~~ } この、~~の部分で、大きく分けて二つの処理をしているので、関数に分けました。 #pragma omp parallel private( a, b, c, d, e, f, g, h, i, j ) { func1( a, b, c, d, e, f, g, h ); func2( a, b, c, d, e, f, g, h, i, j ); } このとき、2つ目の関数で共有変数を複数使う必要があります。 しかし、共有変数の数は多く、引数にするとかなりの数の引数になってしまいます。 そこで、できればfunc2()という関数の中で、スレッドで共有できるshared変数を宣言したいのですが、方法がわかりません。 どなたか、知っている方教えてください。

専門家に質問してみよう