1 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 09:11:41 ] LuaやSquirrelなどアプリケーションへの組み込み用途で 使われるプログラミング言語についてのスレッドです まとめwiki(なにか質問する前に必ずみること!) wikiwiki.jp/lua/ その他の参考URLは>2から ■前スレ 【Lua】組み込み系言語総合【Squirrel】 pc12.2ch.net/test/read.cgi/tech/1205208141/ ■過去スレ その3 pc11.2ch.net/test/read.cgi/tech/1160799232/ その2 pc8.2ch.net/test/read.cgi/tech/1063711237/ その1 pc5.2ch.net/tech/kako/1034/10341/1034182349.html
415 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 14:56:21 ] ファイル名ってUNICODEじゃなくてmbcsだろ mbcsにUTF-8そのまま突っ込んでもファイルは出来るが 望みのものにはならない訳で
416 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 15:05:36 ] www-06.ibm.com/jp/domino01/mkt/cnpages7.nsf/page/default-007ACA9B
417 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 17:13:46 ] >>415 Windowsは内部的には全部 Unicode で NTFS もUnicode。 Win32 API的には、Uincode な API と MBCS な API が両方同時に存在していて任意に選んで使う。 原理的にはエンコードが UTF-8 な Locale を指定すれば MBCS なAPIでそのまま使えるはずだが、 あいにくそんなロケールは定義されてない。もっとも、UTF-8 から Unicode へは単純に変換できるので、 Unicode な API をラッピングして使えば良いだけなので自前プログラム上で問題になることは特にはない。 自分のプログラムで文字列を char ベースで扱ってるなら、MFC の CString のような char <-> wchar_t 変換 対応したクラスを作ってAPI に渡す時はそれを介するようにしておけば良い 一般的にこの手の組み込み言語の場合「Unicode対応 」ってのはワイドキャラ化のこと。変換は全部入出力部で 処理してしまって、内部は全部 char ではなく wchar_t で処理を行うようにする。英数字もひらがなかたかな 漢字も同じ「1文字」として扱えるので、もろもろ概念や処理が楽になる。そのかわりメモリを喰らう。 Windows だと、Unicode な APIがあるのでこれで作業するのが定番。 UNIX 系OSは、Unicode API は存在してないので、API に渡す必要がある部分(ファイル名など)は 逆にMBCS に変換する必要があってそれなりに面倒だったりするが、これが C言語系における正道 「SJIS対応」だとパーサの類をいじって、\ とかの特殊文字のエスケープ対応を行う対応になる。 また、文字列系のクラスに、専用の mblen とか mbsubstr とかSJISとして1文字単位で扱える 専用の処理を足さないと実用上困る。正規表現系をまじめに対応とかすると死ねる。 「UTF-8対応」や「EUC対応」はASCII 的に安全な文字コードなのでパーサ部は通常いじる必要がないが、 文字列処理用に専用の命令系を足さないと実用性が低いのは SJIS対応と同じ。 古いプログラムを wchar_t 化するのは大変だけど、Unicode は扱いたい、といった場合にUTF-8 対応が行われる。
418 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 17:18:13 ] ファイル名の場合、NFDにも注意ね
419 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 17:23:01 ] >>418 OSX はさっさと直せよと思う。まじで
420 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 18:20:29 ] Microsoftのコンパイラは wchar_t は2byteなので、全部一文字って訳にはいかないです サロゲートペアに対応させようとかおもった場合は手動で処理してやらんとダメです。 少なくともVS2008時点では、_tcsincやCharNextといった ポインタを進める関数がサロゲートペアをちゃんと処理してくれない (おそらくOSがサロゲートペアに対応する前のコードとの互換性を気にしてるのだろう) もっとも、クロスプラットフォーム名コード書くなら、CharNextとか使わずに自前で処理してるだろうけど・・・
421 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 19:20:13 ] 書かれてる事の意味が解らないままレスする人多すぎ ここが組み込み系言語のスレな事も考えず読んでる人も多すぎ
422 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:46:16 ] >>420 落ち着いて考えるんだ。 組み込みスクリプトごときでサロゲートペアが関係してくるようなややこしい話がどれくらいある? まあ、議論自体は有意義だとは思うが。
423 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:52:23 ] 素直にTRONコードを使え
424 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 23:33:37 ] とりあえずVSで使う時に、文字セットを「Unicode文字セットを使用する」にしてちゃんと使えればそれでOkだな。 Squirrelはデフォでいけたが。
425 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:17:44 ] 知れば知るほどVSなんぞ捨てた方がマシ UTF8はBOM有り前提とか諸々腐ってるし(VS2005までしか知らんけど) Windows環境で作業しなきゃならんなら gcc、devc++、エディタ、こんだけでいいよ
426 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:23:35 ] >>425 お前……VisualStudioまともに使いこなせてないだけだろ? UTF-8 BOM付きなんて使う機会ほとんどないぞ。
427 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:28:50 ] VSでエンコード付きテキストエディタを指定するとUTF-8はシグネチャ付きとなしと両方選べる。 つまりどっちも扱える。
428 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:47:43 ] IDEの方に問題は出ないが、VCのコンパイラ側がBOM無しだと、 文字コードの認識に失敗する。
429 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:18:43 ] ttp://msdn.microsoft.com/ja-jp/library/xwy0e8f2%28VS.100%29.aspx BOM無しUTF-8の時 文字コードの認識に失敗するんじゃなくて、そもそも対応していないだけ IDEでBOM無しUTF-8で保存可能なのは、ドキュメントとか編集するときのためだろうか?
430 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:42:08 ] Squirrel 2.2.4 stable来てるね 3.0もbeta1になった
431 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:19:38 ] おー、Squirrelのバージョンアップまじか 色々バグ修正されてるのかな BuildとShift-JISパッチ入れるのめんどくさいけど、今夜試してみるわ
432 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 04:33:19 ] >>429 WEBの世界だとそれが標準だからだと思うよ>BOM無しUTF-8で保存可能 Visual Web Developper あわせの対応であって、VC はスルーされてるってことかと。 コンシューマ機が UTF-8 ベースに移ってるのでそれあわせでコード共有しようとするときに地味に困る > VC がUTF-8をまともに扱えない BOM つけると今度は gcc がこけるんだぜ……
433 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 10:47:44 ] LuaでLua_Stateの解放をせずに、グローバル変数等の環境を個別に初期化する サンプルはどこかにないでしょうか?
434 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 11:56:04 ] グローバル環境を空のテーブルに置き換えるのって 普通にできんかったっけ?
435 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 12:37:17 ] じゃあこんな感じで良いのかな? Lua_State *L; 〜 一回load、callして使用 〜 lua_newtable(L); lua_setfenv(L, LUA_GLOBALSINDEX); //グローバル変数だけ初期化される? lua_gc(L, LUA_GCCOLLECT, 0); //念のためにGCも走らせるべき? 〜 Lにまたloadして再利用 〜
436 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 18:16:26 ] 426の読解力に溜息が出るよ
437 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 08:36:36 ] >>429 UTF-8てそもそも既存のシステムに手をなるべく加えないで動かすための文字コードじゃないのか? よくわからんな
438 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 08:45:59 ] そもそも文字列はハードコーディングするべきじゃない。 外部リソースとして、入出力時にコードを調整すればいいだけのこと。
439 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 08:49:56 ] print loadstring(0x34d3a6b8); こんなプログラミングが歓迎されるんですね
440 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 09:00:17 ] >435 を試してみたのですが、lua_setfenvだとグローバル環境の操作は無理なようです。 グローバル環境テーブル全体に対する操作関数って無いのでは?
441 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 09:34:40 ] >>438 スクリプトを読み込んだ際に特定の文字コードに変換して、内部の処理はその文字コードで統一って感じかな? だとすると、何に変換するのがいいんだろう。UTF16?
442 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 09:47:54 ] スクリプトファイルは基本UTF-8、 ネイティブに引き渡すときはUTF-16、面倒ならUCS2にするのが一番問題が少ない。
443 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 11:51:20 ] >>437 その恩恵にあやかれるのはASCIIコードしか使ってない欧米人だけだけどな。 非ASCIIコード圏は、既存のエンコード方式と区別ができないので余計に混乱する。 全てのプレーンテキストがUTF-8に置き換わるまでの過渡期は、BOM付きUTF-8が 一番無難な選択だと思うけどね。 俺はWindows上でgccとか使わないので、FTPクライアントにBOMの有無を変換する 機能さえついてくれればあまり問題ない。 もっとも、MSは独自にBOM付きUTF-8を強行するのではなく、非ASCIIコード圏で 過渡期にはBOMが必要であることを訴えて、規格に盛り込ませるべきだと思うが。
444 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:26:22 ] >>437 「ファイルの中身」自体が最大のレガシーシステム。だから UTF-8 が使われるようになってる。 日本人は一度 SJIS やら EUC やらで通った道をもっかい世界規模で通り直してるだけではある >>438 なにが一番困るって、ファイル名中の「コメント」 コメントに日本語つかうな?ごもっとも(苦笑)
445 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:27:06 ] ファイル名中じゃねえ、ファイル中
446 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:31:33 ] >>443 > 全てのプレーンテキストがUTF-8に置き換わるまでの過渡期は、BOM付きUTF-8が > 一番無難な選択だと思うけどね。 この上の記述はわかるし、それはよくわかるんだが、 実際はBOM付きでトラブることが多くて、俺は折れたわw BOMなしで上手く行くようにすべき
447 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:44:29 ] あ、437 のいってること完全によみちがえてたや。すまん。 動作上は問題ないに決まってるんだから、ツールで対応できない意味がわからんってことだな。 既存エンコードと混在したのを自動判定する必然性は別にないんだから、 ツール側に「MBCSではなくUTF-8として扱う」スイッチだけつければすむことだ。 MS1社が対応するだけで世界は平和になるんだからさっさとそうしてくれってことだな
448 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:56:28 ] >>443 もう手遅れ MSがいまだにSJISを強行している時点で終わってる
449 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 13:38:56 ] SJISを強行しているように見えるのはロケールを日本語にして使っているからなんだが、 なんでそんなに視野が狭いんだろう? ちなみにOSのロケールを英語にすると、UTF-8も無しでコンパイルが通るぞ。
450 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 13:40:42 ] BOM無しで
451 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 13:58:43 ] thx! おまいあたまいいな
452 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:03:05 ] >>449 L"日本語" って正しく通る?
453 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:12:51 ] ロケール変えて見た こりゃええわw まともなアプリと糞アプリの違いが一目瞭然になったw
454 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:16:50 ] やっぱりコマンドプロンプトは糞のままだったw
455 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:23:06 ] boost.cppll.jp/HEAD/ このサイトが初めてエンコード選ばなくても 日本語で文字化けせずに表示されましたw ほんとうにありがとうございましたw
456 名前:デフォルトの名無しさん [2009/11/20(金) 14:24:23 ] 日記はチラ裏で
457 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:41:12 ] >>455 ブラウザの文字エンコードが正しく認識できないって、どこの田舎ものやねん……。
458 名前:デフォルトの名無しさん [2009/11/20(金) 14:42:25 ] >>454 cmd.exeはフォントを日本語にすれば治る cygwinのbashはスクロールがおかしくなるが英語ロケールでインストールし直すと治るのかもしれないがやっていない しかしいかに日本のWindowsアプリケーションが日本語=SJISで決め打ち(mbcs)しているかが良くわかるね 本来はhogehogeW()を呼ばないといけないところをhogehogeA()で済ませちゃってるんだろうな mbcsでもSJISだとそれで動いちゃうから日本語ロケールだと気付かないし気にならないんだね 正しいプログラムの作り方についてもう一度勉強しなおす(日本のMSががんばってアナウンスする)必要があるんじゃないかな
459 名前:デフォルトの名無しさん [2009/11/20(金) 14:47:32 ] >>457 ああごめん ここのことね boost.cppll.jp/HEAD/libs/date_time/doc/BuildInfo.html
460 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 14:50:07 ] スレ違い
461 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 17:39:18 ] 質問どうぞ
462 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 20:08:17 ] >>440 lua_replace(L, LUA_GLOBALSINDEX) ならどう?
463 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 08:14:53 ] >>462 できました! ありがとうございます
464 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 09:04:14 ] Luaのテーブルってキーを使ってアクセスするようになってますが、 キーが分からない場合に全ての項目を調べたい時のサンプルってありますか?
465 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 09:14:26 ] for k,v in pairs(t) do hoge(k,v) end
466 名前:463 mailto:sage [2009/11/21(土) 09:49:37 ] >462 でグローバル環境を空にはできましたが、 これだけだと再使用ができないような? このあとlua_openlibsを使っても標準ライブラリが使用できません。 Lua_Stateをcloseせずに再使用するのは大変みたいですね。
467 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 10:09:26 ] >>465 thx pairsやnextでなめれるんですね
468 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 10:14:16 ] lua_openlibは副作用でレジストリにも変更加えるからじゃね? 走らせたいチャンクを一旦スタックに積んで そいつの環境を置き換えるのはどう?
469 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 10:56:34 ] >>468 具体的なやり方が今一思いつきません。 load〜で積んだあとに空の環境に置き換えるって意味じゃないですよね?
470 名前:469 mailto:sage [2009/11/21(土) 11:03:04 ] そもそもスクリプト側で使ったグローバル"変数"だけ初期化して ライブラリ等のテーブルは使いまわせたらlua_Stateの再構築の コストを減らせて、細かいスクリプトの連続呼び出しに良いのではと 考えていたんですが、Luaは変数も関数もその他色々もテーブル分けて ないので、選択的に変数だけで消すのに無理がある気が・・・
471 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 11:04:51 ] 何でデフォの宣言がglobalなんだろうかね・・・
472 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 11:52:21 ] >>469 いや、そういう意味。走らせるチャンク毎に独自の環境を差し込む。 luaL_openlibsに関しちゃ対象がグローバル環境決め打ちのサポート関数でしかないんで どのみち使えないんだけど、そこはチャンクの環境に差し替えるテーブルの__indexにフックかけて グローバル環境に委譲してしまうって感じでどうか。 これならlocalをつけない変数宣言はチャンク毎の独自の環境に登録されるだけなので グローバル環境の汚染も防げる。やってることはmodule関数と大体いっしょ。 コード書いて検証したわけじゃないのでうまくいくかは知らんw
473 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 13:01:22 ] --ライブラリ等のテーブル_Gと、スクリプト側のenvironmentを分ける local metatable = { __index = _G } local chunk = loadfile(filename) local environment = {} setmetatable(environment, metatable) setfenv(chunk, environment) --Cを使えばなんでもできるので、ダイナミックリンク禁止 environment.require = function() end environment.package = {} return chunk()
474 名前:469 mailto:sage [2009/11/21(土) 13:11:20 ] >>473 なるほど、こうやるのですか。 ありがとう!
475 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 10:32:35 ] ゲーム内にN個のオブジェクトが存在する。 それぞれのオブジェクト固有の状態を保存するために、Cプログラム側でN個のテーブルを用意する。 オブジェクトの行動を定義したluaファイルをロードしてlua_Stateインスタンスを作る。 オブジェクトはN個だが、このインスタンスは1つしか作らない(みんな行動パターンは共通なので) で、個々のオブジェクトの状態を更新するときに、そのオブジェクトに対応するテーブルを引数にして lua関数を呼び出し、テーブルを更新させる。 というのをやりたいのですが、N個のテーブルを作るのが「?」です。 テーブル作ってスタックに積むのはいいんですが、なんせスタックに積むわけですから、 どこかの操作で勝手にPOPされたり、消えたりしませんかね??
476 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 12:35:08 ] >>475 そういう用途のためにレジストリとリファレンスの機構が存在する。 1. 任意のオブジェクト(この場合はテーブル)を作る 2. int table = luaL_ref(state, LUA_REGISTRYINDEX); でレジストリに該当テーブルを格納してリファレンスを取得。 オブジェクトはスタックからは解放されて、レジストリテーブルでのみ保持された状態になる。 リファレンス値は全体でユニークで、C 側でそのままオブジェクトを区別しつつ単純保持するのに使える 3. 使いたい場面(この場合は引数として渡す時)では、 lua_rawgeti(state, LUA_REGISTRYINDEX, table) としてレジストリからスタックに取り出してきて使う 4. 最後破棄する場合は luaL_unref(state, LUA_REGISRYINDEX, table) として解放させる N個つくるならこんなかんじで // テーブル確保 int table[N]; for (int i=0;i<N;i++) { lua_newtable(state); table[i] = luaL_ref(state, LUA_REGISTRYINDEX); } // 例えば table[0] をわたして関数を呼ぶ lua_getfield(state, LUA_GLOBALSINDEX, "func"); // 関数取得 lua_rawgeti(state, LUA_REGISTRYINDEX, table[0]); // 引数としてつむ lua_call(state, 1, 0); // 引数1戻り値無し // テーブル解放 for (int i=0;i<N;i++) { luaL_unref(state, LUA_REGISTRYINDEX, table[i]); } ちなみに squirrel だとオブジェクトのリファレンスを、直接C側から HSQOBJECT としてスタックから取得して 保持できる。概念としてはこっちのがシンプル。
477 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 03:18:07 ] ぶった切りすいません luaは組み込みに最適だと思うんですが、 lua単独でGUIを表示してゲームを作り、実行ファイル(exe)に変換はできるのでしょうか? もしできるなら、教えてください。 ぐぐっても探すことができなかったので・・・
478 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 04:22:36 ] 自前で組み込むの前提の言語でそういうもの作ってもあまり嬉しくないのでだれも作ってないと思います
479 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 05:02:50 ] 言ってることが良く分からないが、Lua単独ではGUIは無理だと言っておく そもそもこのスレで紹介されてる言語は、用途を特定しないスクリプトであって組み込んでどのように動かすかはその人次第 そういう用途なら○○ツクールやHSPにしておきなさいな
480 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 08:23:05 ] 厳密には単独ではないけど、Luaのモジュールか何かでSDL使うのとか無かったっけ?
481 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 09:34:33 ] 自分でGUI処理の組み込み部分を作り、スクリプトリソースをリンクすれば、 単独exeに出来るだろ。
482 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 10:12:43 ] >>477 その用途なら、Pythonじゃね?
483 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 12:08:15 ] I think so.
484 名前:477 mailto:sage [2009/11/23(月) 16:28:01 ] みなさん、レスありがとうございます。 どうしてもluaでゲームを開発しなくてはいけない状況なのです。 ウィンドウの表示がわからないため、苦戦しています。 どの参考書を読んでも書いてなくて。 別の言語にウィンドウを作らせて、動作はLUAだけで、などでできますでしょうか?
485 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:30:06 ] >>484 なんでできないと思うの?
486 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:38:15 ] >>485 レスありがとう みんなやってないし、コマンドプロンプト上か ほかの言語に組み込むだけのものかと思いまして・・・
487 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:46:43 ] aims.dna-softwares.com/ こことか見てみ Luaを主体にしたゲームエンジン作って、このサークルのソフトは殆どLuaで作られてる それにしても、その知識量からどうしてもLuaで作らなきゃいけない状況が発生するなんて いったいどんな大見得切ったんだよ
488 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:53:23 ] 参考書読んだのなら、Luaを使っている人がどのような目的と仕組みで走らせるのかは理解した? あくまで組み込みスクリプトなんだよ? ウィンドウズを表示するという関数を組み込んでもらって、 Luaにインターフェース提供してもらわないとprintやscanすらままならないよ ゲーム開発でスクリプタとして働くのならLuaの言語仕様を覚えるのと、PGからバインドした関数一覧もらってこれば良いよ
489 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:00:01 ] レスありがとう 正直、大学のゼミでこの言語を使うということに決めたんです いくつもある言語から選んで、luaを選んだのは自分だけ。 頼る人もいないので、本とネットで勉強してるかんじです。 >>487 サンプルをdlして参考にしていますが、難しい。 もっとじっくり読んでみます。 >>488 用途は理解しているつもりですが、これをメインにしてプログラムを組んでいかなくてはいけなくて・・・ やはり、ウィンドウを表示する関数をCなどで書いて、luaからその関数を持ってくることが一番楽なんですかね。
490 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:11:31 ] 明日、学校でごめんなさいして もっと詳しくて質問できる奴のいる言語で 最初からやり直す方がましのような気がする。
491 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:13:36 ] >>490 それはしたくないというか、結構この言語は気に入っているので辞めたくないんですよ
492 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:17:17 ] それでここきてなんとかしようなんてあますぎる
493 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:18:29 ] C側とのデータのやり取りがめんどいから余り良い言語とは・・・
494 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:26:23 ] >>489 > やはり、ウィンドウを表示する関数をCなどで書いて、luaからその関数を持ってくることが一番楽なんですかね。 Lua を使うと言って、こういったバインド系の作業はしたくないとか、意味がわからん。 もともとそうやって使う言語だろうに。 「みんなやってない」とか言ってるが、何個のプロジェクトを見て言ってるのか怪しいもんだ。
495 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:26:36 ] Luaの言語を理解して使えるようになる手間を1とすると、 ゲーム用のC/C++ライブラリを組むのが最低10倍〜ぐらい手間も時間かかるよ Win32APIからDirectXかOpenGLまで使えるようにならないと話にならない ゲームライブラリは既存のものでいいならC素人ならDXライブラリを組み込むのが多分もっとも最短だと思う ゼミテーマが「組み込みスクリプト研究」で実例として「ゲーム」を選んだのなら、外部ライブラリにどっぷり頼っていったほうが幸せだとは思う
496 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:27:39 ] 怒られたくなくて嘘を付いている幼児じゃあるまいし 無理せず諦めておけよ
497 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:33:10 ] >>493 つまりAngelScriptがいいって事ですね。 わかります。
498 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:42:29 ] 自分の実力より遙かに上の事をやろうとしても無駄になるだけだぞ ちょっと上ならともかく分不相応すぎ。諦めろ
499 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:48:07 ] Luaじゃ宿題スレも使えないしねえ。 (答える奴はどうせこのスレも見てる)
500 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 18:23:45 ] HSPスレに逝けよ
501 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 21:35:31 ] とりあえず、この本みてみて、何とかなるか考えてみたら。 スクリプト言語による効率的ゲーム開発 C/C++へのLua組込み実践 www.amazon.co.jp/dp/4797348550 サポートページ lua.mine.nu/w/LuaBookSupport どうなんだろうなあ。
502 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 21:46:36 ] ttp://en.wikipedia.org/wiki/Category:Lua-scriptable_game_engines Luaでルーチンいじれるゲームとかゲームエンジンとかあるけど 日本語の資料があんまりないと思う
503 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 10:46:49 ] Lua for Windows: A batteries included Lua installation on Windows. luaforwindows.luaforge.net/ これいっこダウンロードしてインストールすれば、 GUI から OpenGL から DB 接続までなんでもはじめから入ってるよ。 ウィンドウ作る程度なら、サンプルそのまま使える。
504 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 07:48:34 ] Pawn始める人への組み込みメモ(修正版) // .amxファイル(コンパイル済みPawnバイナリ)を実行するための最小コード。 // 必要ファイル: amx.c/h amxaux.c/h amxcons.c/h amxcore.c osdefs.h #include "amx.h" #include "amxaux.h" #include <stdio.h> AMX_NATIVE_INFO console_Natives[]; AMX_NATIVE_INFO core_Natives[]; int main(int argc, char *argv[]) { AMX amx; cell ret = 0; if (aux_LoadProgram(&amx, "test.amx", NULL) != AMX_ERR_NONE) exit(1); if (amx_Register(&amx, console_Natives, -1)) exit(1); if (amx_Register(&amx, core_Natives, -1)) exit(1); if (amx_Exec(&amx, &ret, AMX_EXEC_MAIN)) exit(1); printf("%ld\n", (long)ret); aux_FreeProgram(&amx); return 0; }
505 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 07:49:39 ] // Pawnコンパイラの最小プロジェクト // 必要ファイル: libpawnc.c lstring.c/h memfile.c/h sc1.c〜sc7.c sc.h sc5.scp sc7.scp scexpand.c sci18n.c sclist.c scmemfil.c scstate.c scvars.c svnrev.h // それに加えて ../amx でアクセスできる場所に osdefs.h amxdbg.h が必要 // 実行時にsc1.cのsetconfig()あたりでNULLエラーが発生するなら[プロジェクトの設定->構成プロパティ->全般->文字セット]でUnicodeを無効にしておく #include "sc.h" int main(int argc, char *argv[]) { return pc_compile(argc, argv); }
506 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 14:11:52 ] luabindを使っていて気になったのですが、 //cpp struct A { int x; }; A *ptr; A& ref() { return *ptr; }; A a; luabind::module(L) [ luabind::def("ref", &ref), luabind::class_<A>("A") .def_readwrite("x", &A::x) ]; ]; --lua v = ref() v.x = 1 --参照なのでC側のaにアクセスできる クラスのインスタンスの参照を渡すときに、上の様に一度staticかglobalな変数 (上の場合ptr)を経由させる方法しか思いつかなかったのですが、ダイレクトに 渡す方法は無いものでしょうか?
507 名前:506 mailto:sage [2009/11/25(水) 14:14:17 ] 訂正 A a; ptr = &a; luabind::module(L) [ luabind::def("ref", &ref), luabind::class_<A>("A") .def_readwrite("x", &A::x) ];
508 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 17:56:07 ] Lua詳しくないんでアレだが、lua_pushlightuserdataではダメなの?
509 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 09:43:19 ] Luaで実行状態を全部ファイルに保存して、また復帰するようなことは可能ですか?
510 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 10:10:30 ] >>509 Lua側でioで記録、読み込みするコード書くしかないかも
511 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 10:18:51 ] Smalltalkなら可能です
512 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 11:32:21 ] >>509 言語機能としてはないので、無理やりやることになる。 一応こういうのはあるけど、安定してるかどうかは不明。 lua-users.org/wiki/PlutoLibrary
513 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 13:19:28 ] >>508 試してみましたが、luabindではligthuserdataではなくuserdataを使用して 独自の型ID等を付加してチェックしているようで、無理でした。 luabindのソースを追ってみたところ、luabind::detail::convert_to_luaで C++側の変数の参照をluaのスタックに積めることが分かったので、 これでどこかのテーブルに置くとか引数で渡すとかの方法が使えそうです。 luabindのドキュメントにもサンプルにも、こういったスタックを使う方法が 記載されていないので、本来の使い方とは違う気もしますが。
514 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 13:24:32 ] >>513 通常、スクリプトにはC++クラス型のインスタンスのポインタを渡してポインタで操作させる。 C++の参照はC++固有の機能なので他の言語では使えないと考えたほうがいい。 別の変数に代入した瞬間(参照で無く実体のコピーとして)にコピーコンストラクタが発動したって文句言えないぞ。 まあバインダがエラー吐いてコンパイルの段階で失敗すると思うが。
515 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 13:29:57 ] 休止モードを呼び出せばいいんだよ。