【Lua】組み込み系言語総合 その6【Squirrel】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2013/03/10(日) 15:10:32.28使われるプログラミング言語についてのスレッドです
まとめwiki(なにか質問する前に必ずみること!)
http://wikiwiki.jp/lua/
その他の参考URLは>2から
■前スレ
【Lua】組み込み系言語総合 その5【Squirrel】
http://toro.2ch.net/test/read.cgi/tech/1321063450/
■過去スレ
その4 http://hibari.2ch.net/test/read.cgi/tech/1301414458/
その3 http://hibari.2ch.net/test/read.cgi/tech/1272643397/
その2 http://pc12.2ch.net/test/read.cgi/tech/1243210301/
その1 http://pc12.2ch.net/test/read.cgi/tech/1205208141/
プログラミング言語 Lua
その3 http://pc11.2ch.net/test/read.cgi/tech/1160799232/
0340デフォルトの名無しさん
2013/12/26(木) 10:48:29.28ゲームのスクリプトとしては需要あるんじゃないかな。
たとえば、ある場所に来るたびに、その場所での「さっきの続き」とか。
0341デフォルトの名無しさん
2013/12/26(木) 11:18:48.57オーソドックスにフラグ立てていくなりstackでやるなりでいけるでしょ
0342デフォルトの名無しさん
2013/12/26(木) 11:41:00.70stateパターンというかインタプリタパターンで、その場用のミニ言語を作るんじゃなくて。
0343デフォルトの名無しさん
2013/12/26(木) 11:56:29.21気分で名前が変わるくらいなら名前つけない方がよいよね
0344デフォルトの名無しさん
2013/12/26(木) 12:15:58.740345デフォルトの名無しさん
2013/12/26(木) 12:24:14.010346デフォルトの名無しさん
2013/12/26(木) 12:28:28.45> 手続き的なものは、スクリプトの手続きとして直接記述したいじゃない。
すればいいじゃない
> stateパターンというかインタプリタパターンで、その場用のミニ言語を作るんじゃなくて。
フラグ立てていくだけだからeval出来るものなら既存の言語で簡単に出来るよ
記述が冗長でという話ならpegかなんかでちょろっとgeneratorを書いてやらいい
0347デフォルトの名無しさん
2013/12/28(土) 02:26:08.74クラスじゃなくって、インスタンスをバインドして
そいつがファクトリ的な関数いっぱい持ってたら
もうスクリプトの中でやりたい放題なんだね
0348デフォルトの名無しさん
2013/12/28(土) 13:42:09.78かつ、お作法も確立してるので楽ちんなんだよな
0349デフォルトの名無しさん
2013/12/29(日) 23:59:20.840350デフォルトの名無しさん
2013/12/30(月) 00:02:51.790351デフォルトの名無しさん
2013/12/30(月) 00:32:29.40メインループ中にスクリプトをどのように組み込んでいけばいいのかまったく検討がつきません。
RPGのマップ上のイベントであれば、マップロード時にスクリプトファイルを読み込んで
イベントを関数化しておく、などは想像できるのですが・・・
それとも、主要クラスをスクリプトエンジンへバインドしてしまって
メインループ自体をスクリプト側で記述するという方法なのでしょうか?
0352デフォルトの名無しさん
2013/12/30(月) 01:54:24.29luaとかsquirrelのようなコルーチンありのスクリプトなら、メインループから、実行中のコルーチンスレッドのresumeを個別に呼び出しする形も作れる
それぞれのスレッドで suspend()するたびに
次のフレームに処理が継続されるので、UI処理書くのにとても便利
両方実装して使い分けるのも有り。いずれの場合も、参照するオブジェクトはスクリプトから見えるようにバインドする必要はでてくる
0353デフォルトの名無しさん
2013/12/30(月) 17:04:01.21ありがとうございます!
コルーチン勉強しようと思います
0354デフォルトの名無しさん
2014/01/15(水) 01:28:40.370355デフォルトの名無しさん
2014/01/15(水) 01:32:56.880356デフォルトの名無しさん
2014/01/15(水) 18:55:31.970357デフォルトの名無しさん
2014/01/16(木) 23:05:15.79Suirrelでインスタンスを生成したとき、
boost::shared_ptrを用いたインスタンスにするにはどうすればいいでしょうか。
C++とSquirrelとで共通の参照カウンタを持たせたいと考えています
0358デフォルトの名無しさん
2014/01/16(木) 23:29:03.57そういうのが必要なケースってあるのかな?
設計を見なおしたほうがいいかも
0359デフォルトの名無しさん
2014/01/17(金) 00:50:30.25こっちでも使いたいなーと思ってました。
・C++でHogeクラス定義、公開
・Squirrelでインスタンス生成
・C++から公開しているオブジェクトマネージャへ登録
・C++側でさっきのHogeインスタンスを更新
みたいな構造を考えてました。
Hogeを継承したFooクラスとかも登録したいと考えてました。
設計考えてきます。
0360デフォルトの名無しさん
2014/01/17(金) 02:10:14.78squirrel側の参照カウンタとはダブるだけで共通にはならんけど動作自体は問題ない
0361デフォルトの名無しさん
2014/01/17(金) 04:46:37.29g_HogeManagerをC++で定義、インスタンスをSquirrelへ公開。
で、次のスクリプト関数実行。
function Func(){
local inst = Hoge()
g_HogeManager.add(inst)
}
で、C++側でg_HogeManagerの要素に対してupdateとか呼び出したいです。
Funcのスコープ抜けた時点でSquirrel側のinstの参照カウンタが0になり、
望まない形でインスタンスが破棄されてるようです。
ので、共通の形を取りたいと考えてました。
設計が悪いってのは、この周りの考え方が怪しいのかと。
0362デフォルトの名無しさん
2014/01/17(金) 04:48:04.700363デフォルトの名無しさん
2014/01/17(金) 08:09:28.29/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ Lua!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
0364デフォルトの名無しさん
2014/01/17(金) 16:23:55.46そりやsquirrel側はC++側の参照を知らないもの。当然かと
squirrelから渡されたものは、HSQOBJECT のかたちで取得して、保持するときには sq_addref()して、不要になったら sq_release() するのが正解
0365デフォルトの名無しさん
2014/01/17(金) 18:31:37.39メモリリークの原因になりやすい
0366デフォルトの名無しさん
2014/01/22(水) 20:05:40.980367デフォルトの名無しさん
2014/01/31(金) 16:55:15.38自分で関数を作るしかない?
0368デフォルトの名無しさん
2014/02/01(土) 23:19:13.62現在、threadをidle状態にさせるために、wakeupで終了条件を渡して
threadとして実行する関数内でreturnなりさせてidle状態にさせていますが面倒です。
0369368
2014/02/02(日) 00:01:58.470370デフォルトの名無しさん
2014/02/02(日) 00:31:12.85┼ (\. \! * // ,/) *
+ * (ヽ、 \ + * / /) +
⊂ニ ) * + ( ニ⊃
* + ⊂、 ( ∩___∩ ノ ⊃ + *
(/(/ ヽ | ノ ヽ / 、)ヽ) ┼
+ (/ ∨ ● ●レ /⌒) 、)ヽ)
* (/' | ( _●_) ミ' /、)、)´ +
+ (/'ヽ 彡、 |∪| ノ / AngelScript!!
+ / __ヽノ / * +
┼ (___) / +
/ /
(_ ⌒丶..
| /ヽ }.
し ))
ソ トントン
0371デフォルトの名無しさん
2014/02/03(月) 05:51:52.940372デフォルトの名無しさん
2014/02/05(水) 23:25:39.46sqstd_printcallstackをラップしたのをバインドしてthreadの関数内で呼び出しても、
thread.callとかthread.wakeupんとこまでのスタックしか見れなくてデバッグが面倒
0373デフォルトの名無しさん
2014/02/06(木) 01:00:28.570374デフォルトの名無しさん
2014/02/06(木) 13:14:51.80ってことはsq_getthreadとかと組み合わせれば出来んのかな。
助かったよ、ありがとう
0375デフォルトの名無しさん
2014/02/06(木) 16:31:10.120376デフォルトの名無しさん
2014/02/06(木) 16:34:11.87スレッド制御してるVMがグローバルに一つなら、そのwakeup呼び出ししてる間は
とくに変化無いから、もうグローバルに直接参照して表示してしまうってのも一つの手だね
俺はそれぞれのスレッドのwakeupは、全部C++のメインの一カ所からしか呼ばない(親VMは登録とかにしか使わない)から上をたぐる必要は特に無い
0377デフォルトの名無しさん
2014/02/06(木) 19:41:13.19で、早速また分からんことが。
・スクリプトでnewthreadで生成したスレッドをC++にてsq_getthreadで取得
・取得したvmに対してsq_newclosure,sq_seterrorhandlerで
ランタイムエラーハンドラを設定したんだけど、
スレッド実行中にエラー出ても呼ばれないんですが原因なんでしょう。
同じノリでC++からsq_setprintfuncで出力関数をセットすると期待通りに動作するんだけど。
0378デフォルトの名無しさん
2014/02/06(木) 20:13:41.720379デフォルトの名無しさん
2014/02/06(木) 20:42:06.750380デフォルトの名無しさん
2014/02/10(月) 11:35:20.59トゥイッターで「#squirrel」を検索するとマジもんのリスばっか出てくる。
どのハッシュタグならココで扱ってるSquirrel拾えるの?
0381デフォルトの名無しさん
2014/02/10(月) 11:43:35.220382デフォルトの名無しさん
2014/02/28(金) 21:55:32.80アイテムデータを打ち込むためのフォームなどを自作しておかないと、
スクリプトの良さを生かせないなぁ、というところに行き着いてしまうのですが、
個人製作の方々はそういったものを自作していたりするんでしょうか?
むしろ、そんなところに拘るくらいならUnityや他のゲーム製作ツールについて
勉強してた方がマシでしょうか?
0383デフォルトの名無しさん
2014/02/28(金) 22:11:10.98一般的なものならinport/exportで定番どころのフォーマットは対応してるので困ることはないのではないかな
対応してないとしてもconverterを書くだけだから簡単に書ける
0384デフォルトの名無しさん
2014/02/28(金) 22:15:28.12既に道を踏み外している
ゲームを完成させたいなら計画を立て直せ
そうでないなら合理性なんか考えず好きなように楽しめ
0385デフォルトの名無しさん
2014/02/28(金) 22:17:33.95まあいいや
0386デフォルトの名無しさん
2014/02/28(金) 22:31:38.48既存のモノで、マップエディタならJsonあたりで出力できるものや、
データ入力ならCSVエディタや、既存DB用ファイルを出力するエディタあたりでしょうか?
>>384
確かに、そうですね・・・
まだ数回しかチャレンジしてないのですが、どうしても毎回、
「プログラムで直書きしたのと変わらんやんけ!」か、
「CSVで十分やんけ!」という状況ばかりになってしまって、
そこから一歩ステップアップできない感じなのです
0387デフォルトの名無しさん
2014/02/28(金) 23:01:28.08RegisterObjectType に asOBJ_POD を渡すとコンストラクタ、
代入演算子その他諸々が自動生成されるって話だけど、
asOBJ_POD | asOBJ_APP_CLASS_CONSTRUCTOR みたいにして
コンストラクタだけ独自拡張する使い方は仕様的にできるようになってるの?
0388デフォルトの名無しさん
2014/03/01(土) 07:44:24.61目的と手段が逆になってんじゃないの?
0389デフォルトの名無しさん
2014/03/01(土) 10:43:43.37普通にコンストラクタも登録できるから
公式リファレンス見ろ
0390デフォルトの名無しさん
2014/03/01(土) 11:25:09.70もしC++を使ってる人がLuaは不要だと言えば、C++の方が不要だと言い返される気がする
0391デフォルトの名無しさん
2014/03/01(土) 12:09:22.88コンシューマだったり、プログラマ以外の作業員がいたり
アドベンチャーゲームみたいなジャンルだったらメリットが大きいと思うけど
個人製作だったら別に無理して活かす必要は無いような
0392デフォルトの名無しさん
2014/03/01(土) 13:21:37.93個人製作だとスクリプトファイルとかその他リソースを再読み込みする時間の方が
長かったりするのは俺だけ?てかみんなはスクリプトファイルどれくらい分割してる?
0393デフォルトの名無しさん
2014/03/01(土) 15:07:27.08ゲームは再起動するんだから、
他のリソースふくめたロード時間は
スクリプトつかっててもつかってなくても大差ないかと
スクリプト単体のロード時間は誤差の範囲だよ。確実にコンパイル&リンク時間のが長い
0394デフォルトの名無しさん
2014/03/01(土) 15:08:56.520395デフォルトの名無しさん
2014/03/01(土) 15:29:29.09修正したファイルだけ再読み込みできるようにしておくといい感じ
0396デフォルトの名無しさん
2014/03/01(土) 15:29:47.45392じゃないけど
どのリソースを読み込むかスクリプトで指示されているから
スクリプトの再読み込みはその他リソースの再読み込みとほぼ同義で
時間がかかるって話じゃないの
だから
スクリプト単体のロード時間が誤差の範囲なのは自明で
それをコンパイル&リンク時間と比較するのはこの文脈ではナンセンス
0397デフォルトの名無しさん
2014/03/01(土) 15:47:17.62スクリプトがコンパイル時間がかからなくて便利って話は、そもそもその単純比較の場合の話だから、そのメリットが得られてないならそれは作りが悪いってことだよね。結局のところ
0398デフォルトの名無しさん
2014/03/01(土) 15:47:27.35それを実現するためには副作用を減らす設計が重要で
とりあえずスクリプトで実装して
重い処理はホスト言語で実装しなおす
みたいなボトムアップな作り方してると困っちゃうんだよね
というか困った
0399デフォルトの名無しさん
2014/03/01(土) 15:57:47.84それは「スクリプトがコンパイル時間がかからなくて便利」ってのが
真である前提の結論だろ
実際は単なる謳い文句だよねって話じゃないの?
てかスクリプト言語使う動機なんて一つじゃないんだから
そんなことで作りの良し悪し評価されたくないよな
0400デフォルトの名無しさん
2014/03/01(土) 16:47:42.14リファレンス見てもPODで自動生成されたコンストラクタに
独自拡張のコンストラクタが上書きされるとか書いてなくね?
スレの趣旨には反するけどAlcantarea使えば諸々の問題解決できるよね。
実行中のプログラムの関数を再コンパイルして差し替えてくれるVSのアドイン
ttp://alcantarea-cpp.com/
0401デフォルトの名無しさん
2014/03/01(土) 16:57:41.84副作用を減らすんじゃなくて寿命を減らせばいいと思う
修正前の古いデータが生き残らないようにする
0402デフォルトの名無しさん
2014/03/01(土) 17:09:03.44良い悪いって言葉が気に入らないなら、
設計思想が合ってない、ってことでひとつ
宝の持ち腐れにしてまで使う意味はないな
0403デフォルトの名無しさん
2014/03/05(水) 17:03:30.70C++で使えますか?
Cでの導入方法を教えて下さい
0404デフォルトの名無しさん
2014/03/05(水) 23:29:20.69冷やし中華を?
0405デフォルトの名無しさん
2014/03/06(木) 03:15:58.29何を?
0406デフォルトの名無しさん
2014/03/06(木) 04:44:07.89インクルードファイルとライブラリファイルを設定して、プロジェクトのプロパティで追加の依存ファイルにlua5.1.libを追加すればいいんですね。
後、クラスのメンバ関数をLuaから使う方法が理解できない
local 変数に関数を代入するの?
0407デフォルトの名無しさん
2014/03/06(木) 06:38:39.310408デフォルトの名無しさん
2014/03/20(木) 17:29:02.65ID:Moc5bE7b0409デフォルトの名無しさん
2014/03/20(木) 17:29:20.35ID:Moc5bE7b0410デフォルトの名無しさん
2014/03/20(木) 17:38:01.94ID:cnVVzBAE┼ (\. \! * // ,/) *
+ * (ヽ、 \ + * / /) +
⊂ニ ) * + ( ニ⊃
* + ⊂、 ( ∩___∩ ノ ⊃ + *
(/(/ ヽ | ノ ヽ / 、)ヽ) ┼
+ (/ ∨ ● ●レ /⌒) 、)ヽ)
* (/' | ( _●_) ミ' /、)、)´ +
+ (/'ヽ 彡、 |∪| ノ / AngelScript!!
+ / __ヽノ / * +
┼ (___) / +
/ /
(_ ⌒丶..
| /ヽ }.
し ))
ソ トントン
0411デフォルトの名無しさん
2014/04/06(日) 22:57:21.17ID:OYl5erDzコード補完が出来るオススメエディタありませんか?
cocos2d-x2.x 時代は tolua++のpkgファイルあったから
Eclipseプラグインでコード補完出来たけど
3.x は探してもpkgみつからないの・・
0412デフォルトの名無しさん
2014/04/07(月) 00:09:17.03ID:wNleVxO30413デフォルトの名無しさん
2014/04/08(火) 23:44:03.23ID:tbmdAmxpintypeってテキストエディタではダメ?
0414デフォルトの名無しさん
2014/05/11(日) 10:08:02.17ID:w7YBCIUPコードに戻す方法しらない?
0415デフォルトの名無しさん
2014/05/11(日) 11:14:07.30ID:FPHyRsPYない
0416デフォルトの名無しさん
2014/05/11(日) 12:58:32.06ID:ahIxA60ohttps://github.com/bobsayshilol/luajit-decomp
https://github.com/NightNord/ljd
0417デフォルトの名無しさん
2014/05/12(月) 21:27:31.11ID:Jr9LnoLr整数型なんていらんかったんや! というこれまでの解説は間違いだったのか?
それとも、ゲームだけでなく、カーネルに近いところでも使われ始めたからなのか?
0418デフォルトの名無しさん
2014/05/12(月) 22:45:02.79ID:rRKhLlHVテーブルの整数添え字の要素を特殊化したりとかその関係で
記憶違いだったらごめん
0419デフォルトの名無しさん
2014/05/12(月) 23:06:44.25ID:fjbQFkov満を持して登場したと思ったらさっそくdeprecatedにされたbit32ライブラリさんかわいそう
0420デフォルトの名無しさん
2014/05/12(月) 23:22:03.10ID:fjbQFkov0421デフォルトの名無しさん
2014/05/13(火) 01:10:36.92ID:1hVKdVzYNetBSDはカーネル内部でLua使えるらしいぞ
それの関係かどうかまでは知らんが
ttp://news.mynavi.jp/news/2013/10/21/016/
0422デフォルトの名無しさん
2014/05/13(火) 09:56:07.37ID:htOfSQyE/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ Lua!!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
0423デフォルトの名無しさん
2014/05/18(日) 06:43:02.86ID:cy7ef2kl0424デフォルトの名無しさん
2014/05/18(日) 14:03:13.72ID:HDWDipXQhttp://www.eluaproject.net
0425デフォルトの名無しさん
2014/06/08(日) 18:05:42.02ID:3LWaPBPWGoogleCodeのは2008年で止まってるし
0426デフォルトの名無しさん
2014/06/08(日) 20:03:09.73ID:RRJgBzCOttps://code.google.com/p/xtal-language/source/list
履歴見たら2013年11月13日が最終更新日だけど、どこ見てるんだ?
0427デフォルトの名無しさん
2014/06/08(日) 22:43:44.01ID:3LWaPBPW本当だ・・・
Downloadsのパッケージしか見てませんでした
ごめんなさい
0428デフォルトの名無しさん
2014/06/11(水) 12:26:03.22ID:nbPEp42H0429デフォルトの名無しさん
2014/06/11(水) 16:57:16.91ID:mGpoQXd/┼ (\. \! *=@ // ,/) *
+ * (ヽ、 \ + * / /) +
⊂ニ ) * + ( ニ⊃
* + ⊂、 ( ∩___∩ ノ ⊃ + *
(/(/ ヽ | ノ ヽ / 、)ヽ) ┼
+ (/ ∨ ● ●レ /⌒) 、)ヽ)
* (/' | ( _●_) ミ' /、)、)´ +
+ (/'ヽ 彡、 |∪| ノ / AngelScript!!
+ / __ヽノ / * +
┼ (___) / +
/ /
(_ ⌒丶..
| /ヽ }.
し ))
ソ トントン
0430デフォルトの名無しさん
2014/06/19(木) 01:32:25.81ID:wnpllGmUNLuaをSJISに対応させる方法はないでしょうか?
NLua同梱のlua52.dllをSJIS対応版に差し替えればいいかと思ったんですが、
このdllは公式配布のものとは違うようで、ビルド方法が分かりませんでした。
dllのビルドさえできれば、Luaの字句解析部(llex.c)へのパッチの当て方は分かっているんですが…
0431デフォルトの名無しさん
2014/06/19(木) 13:05:43.69ID:CumbCiDKhttps://github.com/NLua/lua
これでしょ?
cmake->buildするだけでは?
0432デフォルトの名無しさん
2014/06/20(金) 17:24:54.94ID:N64lKT9Jビルドできました。
https://github.com/NLua/NLuaしか見てなかった・・・
0433デフォルトの名無しさん
2014/06/20(金) 17:32:59.29ID:TUABdWdOgit clone https://github.com/NLua/NLua.git
cd NLua
git submodule update --init --recursive
で入るんだけどね
0434デフォルトの名無しさん
2014/06/29(日) 14:59:39.60ID:SaBki4ZJmrubyのprint出力をホスト側で受けるにはmrb_define_methodで"__printstr__"に
関数を設定すればいいと聞いたのでそのようにしているのですが、標準出力と
標準エラー出力の区別ってできないんでしょうか?
0435デフォルトの名無しさん
2014/06/30(月) 15:10:51.45ID:02CSsGE4mruby-print/src/print.c 内の printstr で stdout とハードコーディングされてるので、stderr に出したいときはここを書き換えるか、新たに stderr に出すメソッドを追加すればいいのでは?
0436デフォルトの名無しさん
2014/06/30(月) 23:03:22.29ID:FuMPZ5KZprintstrのフックでは受け取れないメッセージがあったのでエラー出力には別のフックがあるのかと
思ったんですが、ソース見てみたらそこかしこでfwrite使って直接出力してますね。
確かにこれだと自分でソースいじらないとならないですね。
0437デフォルトの名無しさん
2014/07/02(水) 16:59:10.88ID:JkuzDLMY4、5年ぐらい前の奴なら英語サイトの奴があるけど、最近はどうなのかなと思って。
0438デフォルトの名無しさん
2014/07/02(水) 21:40:33.67ID:z0TOEu0hpythonだとpypy?
luajitは今後5.3移行にちゃんと追従してくれるか心配だね。
組み込み用としてのメリットはluaには他にもいろいろあるだろうけど
jit環境が追従していかないとmrubyあたりに追い抜かれる?
0439デフォルトの名無しさん
2014/07/03(木) 07:39:27.54ID:FjTkZ2C10440デフォルトの名無しさん
2014/07/05(土) 14:29:38.02ID:MeYLeon+■ このスレッドは過去ログ倉庫に格納されています