- 1 名前:デフォルトの名無しさん mailto:sage [2013/03/10(日) 15:10:32.28 .net]
- LuaやSquirrelやAngelScriptなどアプリケーションへの組み込み用途で
使われるプログラミング言語についてのスレッドです まとめwiki(なにか質問する前に必ずみること!) wikiwiki.jp/lua/ その他の参考URLは>2から ■前スレ 【Lua】組み込み系言語総合 その5【Squirrel】 toro.2ch.net/test/read.cgi/tech/1321063450/ ■過去スレ その4 hibari.2ch.net/test/read.cgi/tech/1301414458/ その3 hibari.2ch.net/test/read.cgi/tech/1272643397/ その2 pc12.2ch.net/test/read.cgi/tech/1243210301/ その1 pc12.2ch.net/test/read.cgi/tech/1205208141/ プログラミング言語 Lua その3 pc11.2ch.net/test/read.cgi/tech/1160799232/
- 273 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 09:52:17.93 .net]
- スコープぬけてすぐってのは
newではないコンストラクタを使うからできるんだよ newを使わない保証があるなら参照カウンタもいらないよ
- 274 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 15:21:11.51 .net]
- スコープ抜けてすぐなんて制約条件を勝手に厳しくするなよ
> このlua内の変数のスコープがはずれたりしたときに、
- 275 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 15:38:02.02 .net]
- 質問者の意図はたぶんそれで合ってると思うの。C++使う人がluaで嵌まる典型的ポイントだよね
明示的なリソース廃棄処理つくらないと回避できない
- 276 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 16:24:50.58 .net]
- >>272
あはは、たしかにw スコープがはずれたとき ではなく スコープがはずれたりしたとき であるから 結局GCで事足りるなw
- 277 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 18:42:33.31 .net]
- リソースの解放(例えばファイルのクローズ)をデストラクタで
行うなんてのはGC備えてる言語じゃ禁じ手じゃん。 C++オブジェクトに限らず、Luaオブジェクトでもスコープ外れた タイミングで即解放なんて無理でしょ。 C++と同じようなスコープ外れて即廃棄は無理なので、それの寿命 をLuaオブジェクトで管理しようというなら設計が間違ってる。
- 278 名前:274 mailto:sage [2013/11/04(月) 19:39:14.73 .net]
- やらない ってのと やれない っては大きな違いがある。
このケースは前者でやる必要がないからやらないだけなんだよ。 やればやれるよ? metatableのdestructorで 時限付きにhookONしてそこでcollectすればいいだけでしょ? で、それがなんだよって話。
- 279 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 22:38:46.70 .net]
- AngelScript|Д`)<俺の出番だな
いやマジで
- 280 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 23:06:44.14 .net]
- JavaでGC避けようとするとこんな感じのがある。
www.javafesta.jp/2007/pdf/C1.pdf www.infoq.com/jp/news/2010/11/tc-bigmemory
- 281 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 23:17:12.73 .net]
- squirrelがリファレンスカウントなのもgc動作を嫌ってだな
- 282 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 00:28:39.93 .net]
- リファレンスカウンタの方がマーク&スイープよりも安いからな。
- 283 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 08:03:02.46 .net]
- Javaや.NETのGCくらいになると無茶苦茶高性能だよ
Javaはチューニングがサーバー用だからアレだが まあそこまでいかないと性能が出ないなら個人レベルでは無理があるわな
- 284 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 12:38:56.98 .net]
- AngelScriptは基本的には参照カウントのようだが循環参照時などはGCをする模様
- 285 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 20:08:05.76 .net]
- AngelScript|Д`)<AngelScript2.28.0記念カキコ
- 286 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 20:24:10.43 .net]
- (´\r-、 ┼ + /`/`) +
┼ (\. \! * // ,/) * + * (ヽ、 \ + * / /) + ⊂ニ ) * + ( ニ⊃ * + ⊂、 ( ∩___∩ ノ ⊃ + * (/(/ ヽ | ノ ヽ / 、)ヽ) ┼ + (/ ∨ ● ●レ /⌒) 、)ヽ) * (/' | ( _●_) ミ' /、)、)´ + + (/'ヽ 彡、 |∪| ノ / AngelScript!! + / __ヽノ / * + ┼ (___) / + / / (_ ⌒丶.. | /ヽ }. し )) ソ トントン
- 287 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 23:42:30.14 .net]
- 参照カウントってGCとちがうものなの?
- 288 名前:デフォルトの名無しさん mailto:sage [2013/11/06(水) 09:10:15.25 .net]
- 知ったかに構うなよ
- 289 名前:デフォルトの名無しさん mailto:sage [2013/11/07(木) 07:39:13.29 .net]
- でもまあ一般的にGCと言えばマーク&スイープじゃね
参照カウンタって単なるコーディングテクニックみたいなもんだから注釈なしでGCと呼ぶのは抵抗ある
- 290 名前:デフォルトの名無しさん mailto:sage [2013/11/07(木) 09:59:04.25 .net]
- 全然違う
- 291 名前:デフォルトの名無しさん mailto:sage [2013/11/07(木) 12:43:45.41 .net]
- >>285
GCの実装の仕方の一つとして、参照カウントを使うものがある、といった感じ
- 292 名前:デフォルトの名無しさん mailto:sage [2013/11/07(木) 15:16:54.50 .net]
- 広義ではGCに含まれる。
狭義では参照カウントとtracingに分けて、tracing型のみをGCとすることもある。 まだ一般的ではないが "A unified theory of garbage collection" という論文によれば、 参照カウントとtracingは双対なんだそうだ。
- 293 名前:デフォルトの名無しさん mailto:sage [2013/11/07(木) 20:06:48.85 .net]
- Squirrelの人が熱弁してたなあ
- 294 名前:デフォルトの名無しさん mailto:sage [2013/11/15(金) 18:43:55.94 .net]
- 当方素人で疑問なのですが、スクリプトでゲームを作るということが、
つまりどういうことなのかっていうのがイマイチ掴めません 例えば、C/C++コード(DxLibやSDLなど)で適当にゲームウインドウを表示したら あとはスクリプトコードを呼び出すだけ、という状態のことなのでしょうか? このときに、最低限としてスクリプト側からC側の ・メインループ毎に必要な処理(DxLibのProcessMessageなど) ・キーボード・マウス・ジョイパッドなどの入力を取得する機能 ・画像を表示する機能 など、呼び出すことができれば最低限ゲームっぽいことはできそうでしょうか? そして、速度の問題がある処理はその都度C側で記述していく、とか あるいは、あるタイミングの数値計算処理であるとか、RPGのイベントだとか 再コンパイルせずに調節したい場合にスクリプトを用いるということもあると思いますが この場合、スクリプトを実行するVMをどのインスタンスで保持するのが良いのでしょうか
- 295 名前:デフォルトの名無しさん mailto:sage [2013/11/15(金) 19:49:12.61 .net]
- ネイティブで書きにくいところをスクリプトで書く
それだけの話であって何から何までスクリプトということは無い
- 296 名前:デフォルトの名無しさん mailto:sage [2013/11/15(金) 20:47:11.59 .net]
- 自分はゲーム内のオブジェクトの動きや描画の指定にスクリプト使ってるよ。
- 297 名前:デフォルトの名無しさん mailto:sage [2013/11/15(金) 21:58:13.61 .net]
- スクリプト言語による効率的ゲーム開発 新訂版 (LuaとC/C++連携プログラミング)
とか、luaとゲームみたいな本には序章あたりにそういうこと書いてあるから、何冊か本屋でみてみたら?
- 298 名前:デフォルトの名無しさん mailto:sage [2013/11/15(金) 22:02:34.14 .net]
- >>293 >>294 >>295
どうもありがとうございます! いつもいつもプログラミングのみでミニゲーム作る止まりなので スクリプト組み込みを勉強してに中規模以上のゲームを作れるようにがんばります
- 299 名前:デフォルトの名無しさん mailto:sage [2013/12/04(水) 01:39:29.32 .net]
- iPadで動くCodeaって、内部でLua使ってるみたいだね。
- 300 名前:デフォルトの名無しさん mailto:sage [2013/12/15(日) 20:30:59.57 .net]
- ゲームの会話シーン(ノベルゲーム風)をスクリプトで記述したいんですが、
やり口としてはどういうのが良いでしょうか? 今考えているのは ・会話イベントのひとまとまりごとに1ファイルで記述する ・文章を記述する前に置換文字や会話に使用するキャラクターを定義できる ・会話シーンに必要なアクション(立ち位置、表情変更など)を記述できる 想像してるイメージとしては↓な感じです (使用スクリプト未定なので文法やメソッド名は適当です。雰囲気が伝わればいいですが・・・) //event1.txt //最初に置換文字や、使用キャラクターを定義 player = data.getCharacter("主人公"); //キャラ自体を取得 sub = data.getCharacter("サブキャラ"); city = data.getString("街の名前"); //置換文字として定義 //イベント開始 startEvent(); setCharacter(sub); message( "いらっしゃい " + player + "さん。" + BR + city + "にようこそ。"); //キャラクタークラスはそのまま文字置換にも使えるようにする。 //BRには改行を定義しておく。 endEvent(); // これだとダブルクォーテーションがクドい気がするので "ようこそ$[player]さん" みたいなやり方にすべきでしょうか?
- 301 名前:デフォルトの名無しさん mailto:sage [2013/12/15(日) 20:51:22.29 .net]
- そんなのは簡単な独自言語のほうが使いやすいしツールも作りやすい
安直に汎用スクリプト使おうじゃなくて、まずはユースケースを洗い出してみろ それほどいろんな機能も自由度もいらないことがわかるはず
- 302 名前:デフォルトの名無しさん mailto:sage [2013/12/16(月) 00:21:21.85 .net]
- セーブの実現性考えてつくるべし
下手に高級言語にすると死ぬ 人に使わせること考えると、プレーンテキストにタグ埋めるスタイル以外はあり得ない
- 303 名前:デフォルトの名無しさん [2013/12/16(月) 00:49:52.86 .net]
- 同意
セーブや細かい制御のことを考えると、汎用言語を使っても結局 言語内DSL的なものでデータとして埋め込むような形にしかならん 汎用言語の機能をほとんど活かせず、インタプリタを作る手間も無くならず、 ただスクリプトを書くのが面倒になるだけ
- 304 名前:デフォルトの名無しさん mailto:sage [2013/12/16(月) 01:33:50.36 .net]
- 途中セーブって鬼門だしな…
- 305 名前:デフォルトの名無しさん mailto:sage [2013/12/16(月) 18:01:34.83 .net]
- >>299-302
ありがとうございます、セーブ完全に考えてませんでした。 途中セーブ考えると難易度かなり上がりますね。
- 306 名前:デフォルトの名無しさん mailto:sage [2013/12/16(月) 21:48:48.52 .net]
- 独自スクリプトなら好きなように出来るから、どうとでもなるよ
ADVゲームなんて保存しておくデータは少ないしな
- 307 名前:デフォルトの名無しさん mailto:sage [2013/12/19(木) 20:06:48.55 .net]
- if文の中のwhile文の中のif文のさらに中のwhileの途中でスクリプトを停止してセーブ、ロードしてそこから再開、とか。
- 308 名前:デフォルトの名無しさん mailto:sage [2013/12/19(木) 21:22:15.85 .net]
- stateパターンでも使えば?
- 309 名前:デフォルトの名無しさん mailto:sage [2013/12/19(木) 21:35:40.70 .net]
- >>305
ADVは普通そんなとこでセーブする必要ないよ もし必要になってしまってるなら設計がおかしい
- 310 名前:デフォルトの名無しさん mailto:sage [2013/12/19(木) 21:54:56.69 .net]
- DSL専用の言語ってあってもいいのにな
ADVのスクリプトみたいなプル型のインタプリタを作りやすい簡単な言語仕様で ライブラリにソース渡したら構文解析だけやってくれればいい
- 311 名前:デフォルトの名無しさん mailto:sage [2013/12/19(木) 22:41:18.53 .net]
- 「設計がおかしい」ってさ、
言うのは簡単だしいかにもそれっぽいけど単なる思考停止くさいよね
- 312 名前:デフォルトの名無しさん mailto:sage [2013/12/19(木) 23:00:23.25 .net]
- >>308
EclipseのXtext/Xtendみたいなのでネイティブアプリに組み込める ものがあったら俺も欲しいな。
- 313 名前:デフォルトの名無しさん mailto:sage [2013/12/19(木) 23:01:36.14 .net]
- ターン制と言うか、区切りよく設計しない?
大枠のwhileループとifはあるにせよ、更にその中のwhileの中でセーブはともかくロードはやろうと思わない。
- 314 名前:デフォルトの名無しさん mailto:sage [2013/12/19(木) 23:38:35.63 .net]
- 任意のObjectをセーブ、ロード
↓ Object is a String ←設計がおかしい
- 315 名前:デフォルトの名無しさん mailto:sage [2013/12/20(金) 01:55:56.71 .net]
- >>305
フラグでメッセージが変わる、とかいうのを複雑にしちゃったらそういうのが発生しそう。
- 316 名前:デフォルトの名無しさん mailto:sage [2013/12/20(金) 12:14:01.98 .net]
- フラグで文章が変わるなら、変わる文章の手前で条件分岐するだけじゃね?
- 317 名前:デフォルトの名無しさん mailto:sage [2013/12/20(金) 17:12:52.37 .net]
- 変わるのがメッセージだけなら、
flg ? "msg-a" : "msg-b" って書けるならそのほうがシンプル。
- 318 名前:デフォルトの名無しさん mailto:sage [2013/12/20(金) 21:11:54.76 .net]
- それだと既読フラグがめんどい
- 319 名前:デフォルトの名無しさん mailto:sage [2013/12/21(土) 08:21:18.69 .net]
- シンプルだけど読みにくい
- 320 名前:デフォルトの名無しさん mailto:sage [2013/12/22(日) 12:54:39.25 .net]
- 慣れの問題
- 321 名前:デフォルトの名無しさん mailto:sage [2013/12/23(月) 08:32:10.39 .net]
- 慣れないとダメというのがそもそもおかしい
- 322 名前:デフォルトの名無しさん mailto:sage [2013/12/23(月) 11:28:02.04 .net]
- 逆だよ
時間がかかってはダメというのがおかしい だからゆっくり時間をかけて慣れることが許される
- 323 名前:デフォルトの名無しさん mailto:sage [2013/12/23(月) 12:34:02.63 .net]
- >>319
俺が慣れてないからforもwhileも禁止、全部ifとgotoで、って言ってた人が昔いたぞ。 >>316 既読を管理する関数 mng_read ってのを作って、 flg ? mng_read("msg-a") : mng_read("msg-b") とするのはどう?
- 324 名前:デフォルトの名無しさん mailto:sage [2013/12/23(月) 22:24:13.34 .net]
- >>321
ADVで文章部分に関数使うとか論外だろ… それにスクリプト打つのはド素人も想定するもんだ
- 325 名前:デフォルトの名無しさん mailto:sage [2013/12/23(月) 22:49:00.75 .net]
- >>321
そんなBASICでプログラミングを覚えたジジイなんて、 玉切り落としてグズの家系を根絶やしにしてしまえ。 GOTO LESSが推奨されて何年立ってると思っているんだ
- 326 名前:デフォルトの名無しさん mailto:sage [2013/12/24(火) 09:54:37.59 .net]
- IFとGOTO以外理解できないド素人も想定しなきゃダメですよw
- 327 名前:デフォルトの名無しさん mailto:sage [2013/12/24(火) 13:19:00.89 .net]
- そりゃシステムの部分でわざわざGOTO使う事はないけど
シナリオスクリプトと
- 328 名前:オて考えたらはGOTOは大事だろ
IFとGOTOだけで書けばセーブデータの問題も解決するわけだし [] - [ここ壊れてます]
- 329 名前:デフォルトの名無しさん mailto:sage [2013/12/24(火) 13:43:33.10 .net]
- チャートの類をつくろうとすると、たとえADVのスクリプトでもgotoもifも禁止だね。バグの温床になる
そういった場合は、遷移は別ファイルにまとめて定義が妥当
- 330 名前:デフォルトの名無しさん mailto:sage [2013/12/24(火) 17:08:31.18 .net]
- プログラムではまずありえないけど、ループのド真ん中に外から飛び込むジャンプって、
ゲームのシナリオ的にはありそうじゃない。そういうのってどうしてるの?
- 331 名前:デフォルトの名無しさん mailto:sage [2013/12/24(火) 19:11:38.28 .net]
- gotoは、終了タグを省略したhtmlとか、breakしないswitchと同じだと思う
逆に言えば終了タグを必ず書くgotoなら使っていいんじゃね
- 332 名前:デフォルトの名無しさん mailto:sage [2013/12/24(火) 19:40:46.56 .net]
- come from文?
- 333 名前:デフォルトの名無しさん mailto:sage [2013/12/24(火) 20:16:45.26 .net]
- 途中でセーブしてそこから続きが出来るようにしないのなら、どんな組み方してもOKだけどな。
- 334 名前:デフォルトの名無しさん mailto:sage [2013/12/24(火) 21:28:56.06 .net]
- >>326
条件分岐使わずどうやってフラグ分岐するんだ? >>327 そんなの見たことないが、どういうのだよ?
- 335 名前:デフォルトの名無しさん mailto:sage [2013/12/24(火) 23:30:35.65 .net]
- >>331
だから別ファイル どのシーンの次にどのシーンになるのかの 状態遷移だけを記述する言語というか データ構造を別に準備するのさ
- 336 名前:デフォルトの名無しさん mailto:sage [2013/12/24(火) 23:50:48.99 .net]
- 想定してるのがどういうゲームかで違うのかも
例えばLiveMakerのシナリオ部分は文章とか画像とかの指定で 条件分岐は別になってる シナリオ書き変えたら分岐も変わってた…なんてことはない 単純に選択肢で話が大きく分岐していくノベル用にはわかりやすくていい でも細かいフラグ管理やパラメータ要素を入れると難しい 分岐ごとにいちいち分けて考えてたら バグは出ない以前に途中で投げ出す可能性大
- 337 名前:デフォルトの名無しさん mailto:sage [2013/12/25(水) 01:12:07.86 .net]
- 適当にシナリオ用のVM作ってステートセーブさせれば良いんじゃないかな・・
- 338 名前:デフォルトの名無しさん mailto:sage [2013/12/25(水) 07:14:27.71 .net]
- プレーンテキストに命令タグを挟む方式だとあかんのですか
ノベルゲーって基本テキスト主体でしょ? 逐次処理できるし、ステートの保存はフラグ一式と行番号の保存でいいし ループ処理の構文をわざわざ用意する必要ないと思うんだけど・・・
- 339 名前:デフォルトの名無しさん mailto:sage [2013/12/25(水) 10:33:19.18 .net]
- >>332
あぁ、なるほどね。 確かにそういう作り方をしてるゲームを見た事があるわ。
- 340 名前:デフォルトの名無しさん mailto:sage [2013/12/26(木) 01:56:07.59 .net]
- ノベルゲーのスクリプトに、Cレベルの制御構文、クラスやコルーチンとかまで入れて欲しいとか言われた事あるわ。
- 341 名前:デフォルトの名無しさん mailto:sage [2013/12/26(木) 10:34:40.60 .net]
- 文章やマクロを使う部分のスクリプトはオリジナルで
クラスやコルーチンのスクリプトは組み込み言語使えば良かろ
- 342 名前:デフォルトの名無しさん mailto:sage [2013/12/26(木) 10:38:32.16 .net]
- プログラミング知識がある奴用なら
爆速コンパイルのFPCでいいと思うな
- 343 名前:デフォルトの名無しさん mailto:sage [2013/12/26(木) 10:48:29.28 .net]
- コルーチンはプログラミング言語では直接のサポートがない言語も多いけど、
ゲームのスクリプトとしては需要あるんじゃないかな。 たとえば、ある場所に来るたびに、その場所での「さっきの続き」とか。
- 344 名前:デフォルトの名無しさん mailto:sage [2013/12/26(木) 11:18:48.57 .net]
- stateパターンでいいじゃん
オーソドックスにフラグ立てていくなりstackでやるなりでいけるでしょ
- 345 名前:デフォルトの名無しさん mailto:sage [2013/12/26(木) 11:41:00.70 .net]
- 手続き的なものは、スクリプトの手続きとして直接記述したいじゃない。
stateパターンというかインタプリタパターンで、その場用のミニ言語を作るんじゃなくて。
- 346 名前:デフォルトの名無しさん mailto:sage [2013/12/26(木) 11:56:29.21 .net]
- コルーチンのことをIteratorと言う人とStateと言う人とInterpreterと言う人がいるけど
気分で名前が変わるくらいなら名前つけない方がよいよね
- 347 名前:デフォルトの名無しさん mailto:sage [2013/12/26(木) 12:15:58.74 .net]
- いきなりどうした
- 348 名前:デフォルトの名無しさん mailto:sage [2013/12/26(木) 12:24:14.01 .net]
- いや全部別のものだし
- 349 名前:デフォルトの名無しさん mailto:sage [2013/12/26(木) 12:28:28.45 .net]
- >>342
> 手続き的なものは、スクリプトの手続きとして直接記述したいじゃない。 すればいいじゃない > stateパターンというかインタプリタパターンで、その場用のミニ言語を作るんじゃなくて。 フラグ立てていくだけだからeval出来るものなら既存の言語で簡単に出来るよ 記述が冗長でという話ならpegかなんかでちょろっとgeneratorを書いてやらいい
- 350 名前:デフォルトの名無しさん mailto:sage [2013/12/28(土) 02:26:08.74 .net]
- 動的型のスクリプトの凄さわからなかったんだけど
クラスじゃなくって、インスタンスをバインドして そいつがファクトリ的な関数いっぱい持ってたら もうスクリプトの中でやりたい放題なんだね
- 351 名前:デフォルトの名無しさん mailto:sage [2013/12/28(土) 13:42:09.78 .net]
- リモートでバッグが容易
かつ、お作法も確立してるので楽ちんなんだよな
- 352 名前:デフォルトの名無しさん mailto:sage [2013/12/29(日) 23:59:20.84 .net]
- 最近VLCビデオプレイヤの機能拡張言語がLuaだったのにやっと気づいた
- 353 名前:デフォルトの名無しさん mailto:sage [2013/12/30(月) 00:02:51.79 .net]
- おめ
- 354 名前:デフォルトの名無しさん mailto:sage [2013/12/30(月) 00:32:29.40 .net]
- DXライブラリでゲーム作ってて、スクリプトを組み込んでみたいんですが、
メインループ中にスクリプトをどのように組み込んでいけばいいのかまったく検討がつきません。 RPGのマップ上のイベントであれば、マップロード時にスクリプトファイルを読み込んで イベントを関数化しておく、などは想像できるのですが・・・ それとも、主要クラスをスクリプトエンジンへバインドしてしまって メインループ自体をスクリプト側で記述するという方法なのでしょうか?
- 355 名前:デフォルトの名無しさん mailto:sage [2013/12/30(月) 01:54:24.29 .net]
- 一般的には各オブジェクトのフレーム毎処理なり、メインループの段階ごとなりにスクリプト用のフックを準備して、それ経由で呼び出しされるようなイベントドリブンな書き方をすればいい。これは別に普通にCで書くのと特に変わらない
luaとかsquirrelのようなコルーチンありのスクリプトなら、メインループから、実行中のコルーチンスレッドのresumeを個別に呼び出しする形も作れる それぞれのスレッドで suspend()するたびに 次のフレームに処理が継続されるので、UI処理書くのにとても便利 両方実装して使い分けるのも有り。いずれの場合も、参照するオブジェクトはスクリプトから見えるようにバインドする必要はでてくる
- 356 名前:デフォルトの名無しさん mailto:sage [2013/12/30(月) 17:04:01.21 .net]
- >>352
ありがとうございます! コルーチン勉強しようと思います
- 357 名前:デフォルトの名無しさん mailto:sage [2014/01/15(水) 01:28:40.37 .net]
- AngelScript|Д`)ノ<遅くなったけどあけおめ。今年もスクリプトエンジョイしよう
- 358 名前:デフォルトの名無しさん mailto:sage [2014/01/15(水) 01:32:56.88 .net]
- おっそーい
- 359 名前:デフォルトの名無しさん mailto:sage [2014/01/15(水) 18:55:31.97 .net]
- ZekamasiScriptの登場が待たれる
- 360 名前:デフォルトの名無しさん [2014/01/16(木) 23:05:15.79 .net]
- C++でクラス定義を公開してバインド。
Suirrelでインスタンスを生成したとき、 boost::shared_ptrを用いたインスタンスにするにはどうすればいいでしょうか。 C++とSquirrelとで共通の参照カウンタを持たせたいと考えています
- 361 名前:デフォルトの名無しさん mailto:sage [2014/01/16(木) 23:29:03.57 .net]
- luaならレジストリを使ってやるから同様の逃げ道はあるだろうけど
そういうのが必要なケースってあるのかな? 設計を見なおしたほうがいいかも
- 362 名前:デフォルトの名無しさん [2014/01/17(金) 00:50:30.25 .net]
- luabind使ってる時は自然と出来たものですから、
こっちでも使いたいなーと思ってました。 ・C++でHogeクラス定義、公開 ・Squirrelでインスタンス生成 ・C++から公開しているオブジェクトマネージャへ登録 ・C++側でさっきのHogeインスタンスを更新 みたいな構造を考えてました。 Hogeを継承したFooクラスとかも登録したいと考えてました。 設計考えてきます。
- 363 名前:デフォルトの名無しさん mailto:sage [2014/01/17(金) 02:10:14.78 .net]
- 対応したバインダかくだけじゃね?
squirrel側の参照カウンタとはダブるだけで共通にはならんけど動作自体は問題ない
- 364 名前:デフォルトの名無しさん mailto:sage [2014/01/17(金) 04:46:37.29 .net]
- HogeをC++で定義、公開。
g_HogeManagerをC++で定義、インスタンスをSquirrelへ公開。 で、次のスクリプト関数実行。 function Func(){ local inst = Hoge() g_HogeManager.add(inst) } で、C++側でg_HogeManagerの要素に対してupdateとか呼び出したいです。 Funcのスコープ抜けた時点でSquirrel側のinstの参照カウンタが0になり、 望まない形でインスタンスが破棄されてるようです。 ので、共通の形を取りたいと考えてました。 設計が悪いってのは、この周りの考え方が怪しいのかと。
- 365 名前:デフォルトの名無しさん mailto:sage [2014/01/17(金) 04:48:04.70 .net]
-
- 366 名前:デフォルトの名無しさん mailto:sage [2014/01/17(金) 08:09:28.29 .net]
- //
/ / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
- 367 名前:デフォルトの名無しさん mailto:sage [2014/01/17(金) 16:23:55.46 .net]
- >>361
そりやsquirrel側はC++側の参照を知らないもの。当然かと squirrelから渡されたものは、HSQOBJECT のかたちで取得して、保持するときには sq_addref()して、不要になったら sq_release() するのが正解
- 368 名前:デフォルトの名無しさん mailto:sage [2014/01/17(金) 18:31:37.39 .net]
- あ、gHogeManagerがなんのためのものかにもよるけど、addrefしたものは当然C++側でもreleaseしないと消えなくなるから注意な
メモリリークの原因になりやすい
- 369 名前:デフォルトの名無しさん mailto:sage [2014/01/22(水) 20:05:40.98 .net]
- AngelScript|Д`)<ASの得意分野の話をしてると聞いて
- 370 名前:デフォルトの名無しさん mailto:sage [2014/01/31(金) 16:55:15.38 .net]
- squirrelって文字列比較できないんでしょうか?
自分で関数を作るしかない?
- 371 名前:デフォルトの名無しさん mailto:sage [2014/02/01(土) 23:19:13.62 .net]
- Squirrelのthreadを外部からidle状態にさせることはできるのでしょうか。
現在、threadをidle状態にさせるために、wakeupで終了条件を渡して threadとして実行する関数内でreturnなりさせてidle状態にさせていますが面倒です。
- 372 名前:368 mailto:sage [2014/02/02(日) 00:01:58.47 .net]
- 手法変えて自己解決しました
- 373 名前:デフォルトの名無しさん mailto:sage [2014/02/02(日) 00:31:12.85 .net]
- (´\r-、 ┼ + /`/`) +
┼ (\. \! * // ,/) * + * (ヽ、 \ + * / /) + ⊂ニ ) * + ( ニ⊃ * + ⊂、 ( ∩___∩ ノ ⊃ + * (/(/ ヽ | ノ ヽ / 、)ヽ) ┼ + (/ ∨ ● ●レ /⌒) 、)ヽ) * (/' | ( _●_) ミ' /、)、)´ + + (/'ヽ 彡、 |∪| ノ / AngelScript!! + / __ヽノ / * + ┼ (___) / + / / (_ ⌒丶.. | /ヽ }. し )) ソ トントン
|

|