トップページgamedev
1001コメント321KB

C/C++ゲーム製作総合スレッド Part6

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2014/07/08(火) 19:30:19.51ID:J+zVqUil
ゲーム製作におけるC/C++全般に関するスレです。

元スレ
DXライブラリ 総合スレッド その17
http://toro.2ch.net/test/read.cgi/gamedev/1383795645/

前スレ
C/C++ゲーム製作総合スレッド Part1
http://toro.2ch.net/test/read.cgi/gamedev/1337516528/
C/C++ゲーム製作総合スレッド Part2
http://toro.2ch.net/test/read.cgi/gamedev/1351015269/
C/C++ゲーム製作総合スレッド Part3
http://toro.2ch.net/test/read.cgi/gamedev/1357899040/
C/C++ゲーム製作総合スレッド Part4
http://toro.2ch.net/test/read.cgi/gamedev/1376262450/
C/C++ゲーム製作総合スレッド Part5
http://peace.2ch.net/test/read.cgi/gamedev/1389798031/
0443名前は開発中のものです。2014/11/01(土) 01:19:56.78ID:/W7J7qqw
>>442
最近読んだのだとこれ
XNAのソースがサンプルであるけど今はXNA自体が使えない
http://www.borndigital.co.jp/book/94.html
04444402014/11/01(土) 01:22:56.00ID:THgSKMXt
>>443
ありがとうございます!
XNAでも参考にはなると思うので買ってみます。
0445名前は開発中のものです。2014/11/01(土) 10:44:08.91ID:oqeDiPeW
AがtrueならB、falseならC
BがtrueならD、falseならE
DがtrueならF、falseなら・・・
という感じで
if (A) {
if (B) {
if (D) {
F();
} else {
G();
}
} else {
E();
}
} else {
C();
}
というようなことになってしまいます
例えばAがゲーム開始フラグ、Bがプレイヤー出現フラグ、Dが敵出現フラグという時
最初にC()でカウントを回してAをtrueにしゲーム開始
E()でカウントを回してプレイヤーを出現
G()でカウントを回して敵を出現
F()でバトル開始
のような感じになるのですが、どうすればいいのでしょう
あまり良くないですがswitch caseなどでもいいのかなと考えてます
0446名前は開発中のものです。2014/11/01(土) 11:05:49.01ID:/W7J7qqw
>>445
ステートパターン使うといいよ
IStateを実装した開始ステート、敵出現ステートなどをつくって、
unique_ptr<IState> state = make_unique<InitialState>();
while ...
state->update();
if (state->next)
state = state->next;
0447名前は開発中のものです。2014/11/01(土) 16:11:10.84ID:XJ9qlDD+
普通のクラスだったらプレフィックスにCってつける?
04484402014/11/01(土) 17:17:01.83ID:THgSKMXt
>>443
買ってきました!
とても詳しく書かれていて大満足です。
ありがとうございました!
0449名前は開発中のものです。2014/11/02(日) 01:02:23.40ID:p7Beypyf
>>446
やっぱりStateパターンが良いですよね
ありがとうございます
0450名前は開発中のものです。2014/11/02(日) 10:54:46.91ID:F1N1A3wT
Stateパターンと
Strategyパターンって
コードの書き方はまったくと言っていいほど同じじゃないですか?
Stateは状態的な切り替え、
Strategyは機能的な切り替え、
というふうに、どういう使い方をするかで名称が別れてるということですか?
0451名前は開発中のものです。2014/11/02(日) 12:52:42.92ID:2+iLF1K9
ストラテジーはアルゴリズムの切り替え
状態遷移はストラテジーっぽい
0452名前は開発中のものです。2014/11/02(日) 13:07:10.08ID:nNeu0fIH
どういう意図で組んでるか?という情報は
後から見た時に結構重要だったりするよね
0453名前は開発中のものです。2014/11/02(日) 13:26:08.13ID:bYY9FFGo
だよなぁ
例えば遷移だと>>446のやり方はそれぞれのStateの中で自分に関係する遷移条件と遷移先だけ指定するから
ソースを見ただけじゃ全体の遷移一覧がぱっと見えてこないんだよなぁ
0454名前は開発中のものです。2014/11/02(日) 20:23:50.79ID:rvNm7bLn
ソースに依存関係が少ないて部分では良い事だろ
偏移状態はUMLなりその他の手段で伝わればいい
0455名前は開発中のものです。2014/11/02(日) 20:58:59.62ID:F1N1A3wT
状態遷移を記述するのに優れた外部ソースを読み込ませれば
その通りに動くっていう仕組みはスマートで憧れるなぁw
動かす側(エンジン側)のC++コードは一切変更しないでいい。
0456名前は開発中のものです。2014/11/02(日) 21:39:22.79ID:2+iLF1K9
何を言ってるのかわからない
0457名前は開発中のものです。2014/11/02(日) 23:03:44.43ID:nU5X7LHx
Lua使えってことだろ
0458名前は開発中のものです。2014/11/02(日) 23:46:34.29ID:bYY9FFGo
WebアプリのフレームワークみたいにXMLでできたら良いなってところか
0459名前は開発中のものです。2014/11/03(月) 11:18:44.11ID:awPRm7Lk
>>445の例みたいに順番に実行するだけの処理でstateパターンはちょっと大袈裟な気がする
各処理に番号付けてswitchで振り分けながら順番に処理した方がまだ見通しよくなりそう
0460名前は開発中のものです。2014/11/03(月) 12:22:49.27ID:h2Nq+Bdg
内容と関連の無い連番の関数名て最悪のパターンじゃないか
0461名前は開発中のものです。2014/11/03(月) 12:27:51.68ID:DUvfBBxq
まぁ、単純なステートで、かつ、再利用も考えないなら、ハードコーディングしちゃってもいいと思うけどね。
0462名前は開発中のものです。2014/11/03(月) 13:23:55.34ID:EKtPAmoI
関数ポインタの配列とかステートパターンとか
1行ですっきり書けてかっこいいと思ってやってるんだろうけど
結局デバッグするときにどの関数が実際に呼ばれてるのか
分かりにくくなったりするだけなんだよなあ
状態変数使ってifelseとかswitchの方が分かりやすいし
そもそも状態遷移の処理なんかそんなに頻繁に書き換えないし
状態遷移の処理で致命的なバグになって開発が頓挫なんてしないし
結局プログラマーのオナニーでしかないんだよなあ
ファミコンなんかクラスどころか関数すらないのに神ゲーいっぱいあったわけで
オナニーに精力を出すくらいならもっと内容に力入れてよ
0463名前は開発中のものです。2014/11/03(月) 13:31:20.68ID:DUvfBBxq
デザインパターンとか、スマートさと複雑さのトレードオフなところあるし、バランスが難しいよね。
ベタな書き方で十分なら、それでいいところは多いね。
0464名前は開発中のものです。2014/11/03(月) 13:33:27.09ID:Haa+1SS6
まあ気分よく作業できるってことも重要だよ
他人と共同で作業してたりコードレビューしたりしないなら好きにすればいいさ
多少のわかりにくさはコメントでカバーすることもできるし
それが原因で時間かかっていつまで経っても完成しないとかだと目も当てられないが
0465名前は開発中のものです。2014/11/03(月) 13:33:31.87ID:TMDXQf53
でもOOP楽しいじゃん?
0466名前は開発中のものです。2014/11/03(月) 13:36:09.35ID:DUvfBBxq
>>465
楽しいねw
ポリモーフィズムで、ほとんどコードをいじることなくなった基幹クラスがあることが嬉しいw
場合によってはベタ書きのほうが総合的にイイなぁ、と思うところも多々あり。
0467名前は開発中のものです。2014/11/03(月) 15:20:17.50ID:awPRm7Lk
>>460
関数名じゃなくて数値と対応付けてswitchで処理するって事
複数のboolで分岐してるのをintひとつでやる感じ
列挙型でやればコードも見やすいかも
そもそも関数名でswitchなんて出来ないしね
0468名前は開発中のものです。2014/11/03(月) 15:42:10.04ID:LRPNDOfH
簡単なトランスレータ(プリプロセッサ)を挟む事で、列挙型と感数名を
自動的に対応付けてCのソースコード生成とか、昔からよくあるサボりテク

STGの敵キャラや弾みたいな、簡易なシーケンシャル制御では重宝するかと
0469名前は開発中のものです。2014/11/03(月) 15:42:40.12ID:LRPNDOfH
感数名→関数名
0470名前は開発中のものです。2014/11/03(月) 16:29:35.49ID:almwUFeG
関数ポインタじゃなくて関数オブジェクトにしてメンバに名前を持たせればいいだけの話だと思うがなぁ
0471名前は開発中のものです。2014/11/03(月) 16:38:51.58ID:w8rbKk4K
C++の話だよね
Cならまだしも、C++で関数ポインタって使いにくいと思うんだけど
非staticなメンバ関数使おうとしたらめんどくさいし(function<...>とかあるけど)

あと一口に状態遷移っていっても
アクションゲームの敵とか、個々のゲーム内オブジェクトの動作みたいな規模と
RPGでのフィールド/メニュー/先頭シーンの切り替えみたいな規模のものがあるけど
それによっても求められる要件は結構違ってくるんじゃないか
0472名前は開発中のものです。2014/11/03(月) 16:47:13.78ID:6bdXEtlk
関数ポインタの配列とenumで分岐するくらいならC++やめて純粋なCでやったら?
関数付き構造体としてしかC++使えていないだろうし
0473名前は開発中のものです。2014/11/03(月) 17:15:54.38ID:awPRm7Lk
c++はマルチパラダイムだしむしろOOPしか認めないならJAVAでやったら?
少なくとも>>445の例でstateパターンが最適とは思えない
0474名前は開発中のものです。2014/11/03(月) 17:30:10.15ID:s5EHYVPL
例えば
http://boost.cppll.jp/HEAD/libs/mpl/doc/paper/mpl_paper.html
の、「5. 例: コンパイル時 FSM ジェネレータ」の辺りを読んでみると
>>445が抱いた疑問に対して、わりと明瞭に答えているような気が
しないでもない

「ネストしたif(またはswitch-case)を使ってFSMの構造を実装する
ことは特に間違いではないが」というように、状況によって最適な
実装は変わるんだよね
0475名前は開発中のものです。2014/11/03(月) 17:38:52.31ID:EKtPAmoI
馬鹿の一つ覚えでステートパターン覚えたら
ステートパターン使ってない奴を見下し軽蔑し
ステートパターンを使うことを強要してくる
こういうやつがいるからソースコードをgithubに公開とかする気が失せるんだよなあ
日本人てほんと頭悪い民族なんだなと思う
0476名前は開発中のものです。2014/11/03(月) 17:40:45.30ID:DUvfBBxq
何で日本人はそうなんだろうか?
0477名前は開発中のものです。2014/11/03(月) 17:43:52.24ID:71HprTRF
公開されてるコードにステートパターンを強要されたことがあるのか
すごいなその日本人ってやつは
0478名前は開発中のものです。2014/11/03(月) 17:49:10.69ID:s5EHYVPL
そういうの余所でやってくれませんかね(お願い)
0479名前は開発中のものです。2014/11/03(月) 17:56:31.99ID:Z17rldcf
正解なんてないんだし綺麗に整ってればなんでもええわ
商業ならそうもいかないだろうけど
0480名前は開発中のものです。2014/11/03(月) 18:00:07.61ID:eKZugS4h
我流でゲーム作ってたら、確かに作れるからいいんだけど「私はC++が使えます」ってスキルアピールできないんだよな。

他人のソース全く意味わからないし。
0481名前は開発中のものです。2014/11/03(月) 18:26:59.05ID:EKtPAmoI
メッセンジャーとかでも外人は普通に顔写真フルネーム公開だが
日本人は絶対写真出さないしニックネームだからな
ネットゲームでも外人は気さくに話しかけてくるが日本人は基本無口だからな
晒しとか陰湿な行為を行うのは日本人という民族が劣ってるからなんだろう
0482名前は開発中のものです。2014/11/03(月) 18:34:22.56ID:Z2NKRK1e
で、ID:EKtPAmoI はもちろん日本人だよね?
もっと自分に自信を持ったら?
0483名前は開発中のものです。2014/11/03(月) 19:12:02.78ID:LRPNDOfH
お引き取りください
0484名前は開発中のものです。2014/11/03(月) 21:02:33.52ID:6bdXEtlk
C++入門書に書いてある程度のことが分からなくて逆切れなん?w
頭悪いし才能ないから諦めたほうがいいよ
0485名前は開発中のものです。2014/11/03(月) 21:22:08.07ID:/5RkG39n
よしなよ
0486名前は開発中のものです。2014/11/03(月) 21:41:28.69ID:DUvfBBxq
やめなよー
0487名前は開発中のものです。2014/11/03(月) 21:47:10.70ID:awPRm7Lk
>>484
だからJAVAやってればいいじゃん
君にネイティブ言語はちょっと難しいんじゃないかな
0488名前は開発中のものです。2014/11/03(月) 23:31:40.14ID:6bdXEtlk
ネイティブ言語わろた
継承ひとつ理解できないおつむじゃ諦めたほうがいい
もしくは独自のヘンテコなやり方をしたければ、ここで披露せずに一人でやっていなさい
0489名前は開発中のものです。2014/11/03(月) 23:48:43.67ID:kGGiNKfp
stateパターンって、クラスつくるよりenumのメンバ追加の方が楽でいい。
でもstateパターン作るなら、状態遷移図は別にドキュメントを作る必要があると思う。
テーブルでやる場合はソースだけでもいいが、抜けがないかの確認がしにくい。

階層型の状態遷移はどうやるといいのだろうか。nestが2階層とか決まってたらまだいいけど、
自由に階層作りたいとか。
0490名前は開発中のものです。2014/11/03(月) 23:51:38.06ID:kGGiNKfp
状態遷移はluaのコルーチンとかでやった方がいいのだろうか?
コードも見やすく、変更も動的にできるし。
0491名前は開発中のものです。2014/11/04(火) 00:05:07.98ID:zm0bWhhE
なんで大手が採用してるか考えたら自明の理
0492名前は開発中のものです。2014/11/04(火) 00:09:15.45ID:8wIs/lt8
独り言が激しいな とりあえず階層型の状態遷移に話の焦点を絞ると、
親階層を子階層から遷移させる手法が考えどころになるだろうね

自分は独自のやり方でやってるけど、一般的にはどういうやりかたが
推奨されて普及しているのかよく分からない
0493名前は開発中のものです。2014/11/04(火) 00:40:17.63ID:ROF6NvON
コンパイルが待てないほど大きいの作るの?
0494名前は開発中のものです。2014/11/04(火) 01:00:57.23ID:gmdSbkqZ
自分のコードは大した量じゃなくても、ライブラリいっぱい使ってるとリビルド数分とか普通にかかる
0495名前は開発中のものです。2014/11/04(火) 01:25:54.32ID:eIlBUMlD
boostのcoroutineとかcontextとかをゲーム製作で使ってる人いる?
興味があるので、できれば試用感を教えてほしいんだけど
0496名前は開発中のものです。2014/11/04(火) 02:14:53.36ID:zm0bWhhE
コンパイルが待てないからスクリプト組み込むとか、
ライブラリいっぱい使うと時間がかかるとか、
なんでアホな話になるかね。

外部データとして扱えることが最大の利点だろうに。
移植のこととか考えてないんかねこの人たちは。
0497名前は開発中のものです。2014/11/04(火) 02:17:27.43ID:ROF6NvON
趣味だもの
0498名前は開発中のものです。2014/11/04(火) 02:33:18.69ID:zm0bWhhE
ついでに、Luaじゃなくても別にかまわないがスクリプトでコルーチンを実装すると、
シーケンシャルな書き方で >>445 を書けて

GameStart();
ShowPlayer();
ShowEnemy();
BattleStart();

てことで、定型の処理は隠ぺいして保守しやすくスッキリ見通せる。
さらにスクリプトからスクリプトを生成して動的に実行するということも可能になるんで
非常にフレキシブル。

boostのコルーチンは使ったことない。
0499名前は開発中のものです。2014/11/04(火) 06:57:09.55ID:64bWIxQw
>>496
逆にC++だと移植大変だったりする?
OSのAPI以外でもコードに差って出たりするの
0500名前は開発中のものです。2014/11/04(火) 13:13:42.12ID:8wIs/lt8
コルーチンとかコマンドパターンのベースクラス作れば同じことだし
コンパイル時間云々もDLLにすれば解決するよ

俺的には、Luaはユーザーに自作マップとかMODを作らせるものだと思ってる
洋ゲーだとMODツールキットにLuaがよく使われているしな
0501名前は開発中のものです。2014/11/04(火) 20:36:39.38ID:zm0bWhhE
>>499
C++の中にハードコーディングしたイベントだらけだったら、
コードを把握するのも大変で移植するのに萎えないか?

その点実行部分とスクリプトで明確に分けれるのが大きい。
実行部分は作る人が仕様に沿ってつくるだけだし、どのプラットホームでも共通のスクリプトにできる。

ちなみにLuaはANSI C準拠なんで、C++がダメな環境でもOK。
0502名前は開発中のものです。2014/11/04(火) 21:00:59.89ID:xgvPL05X
それ移植どうこうとまた別問題じゃね
コード把握するの大変だけど移植するわけじゃないからおkとはならないでしょ
0503名前は開発中のものです。2014/11/04(火) 21:03:11.80ID:IS/2iQRa
結論先にありきのデタラメばかり
移植以前に完成したことないだろ
0504名前は開発中のものです。2014/11/04(火) 21:09:55.86ID:zm0bWhhE
普通にandroidとPCで出してるが、
とりあえず、>>503はどういう方法でゲーム作っているのか書いてから
どこら辺がデタラメか指摘してもらえるかな?
0505名前は開発中のものです。2014/11/04(火) 22:19:13.99ID:8wIs/lt8
ハードコーディングと移植性に何の関係もないことくらい移植したら分かるだろ
見栄を張って嘘をついてもすぐにばれてしまうというこったw
0506名前は開発中のものです。2014/11/04(火) 22:42:12.25ID:Jn/miYsu
ステートパターンだけど、
AIの行動パターンを制御する時みたいに、それぞれのステートが
共通の値(現在HPとか)を参照できる状態(ステート固有の値は持たない)で、
実行される処理だけ切り替えたい場合と、
シーンの切り替えみたいに、ステート固有の値を保管してシーンをスタックに詰んで戻ってきたい場合と、
実装方法は>>446で同じだけど、明確に意味が違うとして別クラス(インターフェース)にすべきだよね?
0507名前は開発中のものです。2014/11/04(火) 22:46:48.54ID:zm0bWhhE
何言ってんだ?
外部にスクリプトで記述していたら、本体は機種依存や特殊な部分だけ移植すればいいだろうが。
ハードコーディングなんぞしてたら移植するたびに作り直しじゃないか。
0508名前は開発中のものです。2014/11/04(火) 22:48:00.93ID:2N3psa7J
>>506
するべきだと思う
じゃないとシーンの制御にAIのオブジェクト渡せるみたいなわけわからん事になる
0509名前は開発中のものです。2014/11/04(火) 23:07:53.61ID:K2k2Os5b
イベントなんかをハードコーディングすると機種依存が発生するって言ってる?
0510名前は開発中のものです。2014/11/04(火) 23:17:05.61ID:zm0bWhhE
極端なたとえ話をすると、エミュを作成する場合で
ゲーム固有のイベントをその汎用的なエミュに組み込むのか?組み込まないだろ?というのとあまり変わらない。
0511名前は開発中のものです。2014/11/04(火) 23:18:46.07ID:2N3psa7J
もうUnity使えばいいんじゃないかな
0512名前は開発中のものです。2014/11/04(火) 23:36:33.23ID:rDud6J5G
移植するつもりがあるなら移植を考えたコードにすりゃいいし
別に移植考えないなら考えてないコードでもいいんじゃない?
まぁどっちでも好きな様にすりゃいいんだけど
0513名前は開発中のものです。2014/11/04(火) 23:41:58.41ID:K2k2Os5b
やっとわかったけど
多分大抵の人はスクリプトの用途をもっと限定的なものとして話してると思うわ
0514名前は開発中のものです。2014/11/04(火) 23:48:24.99ID:zm0bWhhE
分かりにくくてスマンかった。ついでに移植で話がそれたのもスマンかった。
要はstateパターンやswitch振り分けのほかにDSLという選択肢を示したかっただけ。
0515名前は開発中のものです。2014/11/04(火) 23:50:26.53ID:GMRH/mFP
もうエンジン部分以外はほとんどスクリプトでいいと思うけどね
処理速度が必要な部分が判明したときだけコードをC++に移すかんじで
FFCCはソース見当たらなかったがほとんどがスクリプトだったと見た記憶がある

http://www.inside-games.jp/article/2009/09/07/37504.html
http://game.watch.impress.co.jp/docs/20080224/ffcc.htm
0516名前は開発中のものです。2014/11/04(火) 23:52:06.45ID:8wIs/lt8
>>507
スクリプトを使うかどうかと何の関係もないのだがw
ボロがでるばかりwww
0517名前は開発中のものです。2014/11/05(水) 00:01:59.05ID:23olDi5X
>>515
まさにそう。使ってるライブラリが開発停止になっても、エンジン部のすげ替えもできるし。

>>516
キミは分からないならもういいよ、独自の路線を走ってくれw
たぶん一人だけで開発してるだろうから、いまのままでも特段不便はないだろ。
0518名前は開発中のものです。2014/11/05(水) 00:12:09.01ID:mDgxc5Qo
まず、OSやOpenGLのAPIをアプリロジック内にハードコーディングしちゃうアホとか君だけだからね
それと組み込みスクリプト言語を使用することに何の関連性も無いのよ
0519名前は開発中のものです。2014/11/05(水) 00:21:14.06ID:23olDi5X
薄いラッパー書いて使ってるが何か?w
で、俺の主張は>>514だが、キミの主張はなんなの?過去発言から意図が見えないのだが?
単に俺に突っかかって来るだけなら、相手しても無駄なので遠慮したいんだが。
0520名前は開発中のものです。2014/11/05(水) 00:27:01.07ID:mDgxc5Qo
嘘デタラメを書き散らすウザイやつを笑ってるだけだよ
あまり背伸びをするなよw
0521名前は開発中のものです。2014/11/05(水) 00:28:29.32ID:23olDi5X
ああ、そうw
0522名前は開発中のものです。2014/11/05(水) 00:36:27.94ID:mDgxc5Qo
かくしてスクリプト言語を使わないと移植が困難になるとかいう根拠なきトンデモ説が論破され
しったか君が大恥をかいたのであった♪
0523名前は開発中のものです。2014/11/05(水) 00:45:38.59ID:/iQIEZEB
ゲーム自体をスクリプトでつくれば移植するときエンジンを交換するだけで済むって話でしょ
前提が共有できてないのに知ったか吹いてると大恥かくよ
0524名前は開発中のものです。2014/11/05(水) 00:50:14.08ID:IdGIx4uz
ってか、スクリプト使ってる人って多いのかな?
個人で作る小規模ゲームでもよく使われるの?
オールC++の人も多いのかな?
0525名前は開発中のものです。2014/11/05(水) 00:55:37.53ID:x4hCla17
交換だけったって結構C++で書き換えるコードもアリそうだけどな

移植先がC++ならOSのAPI叩く部分とエンジン駆動部分を綺麗に分離しとけば、
移植性に関しては大して変わらないようにも思うし、
スクリプトの最大のメリットが移植性とか言われるとやっぱすごい違和感在るわ

つうかゲーム自体をスクリプトで書くならもうすでにこのスレで話す内容じゃないな
0526名前は開発中のものです。2014/11/05(水) 00:56:41.89ID:mDgxc5Qo
マルチプラットフォームのエンジンなりラッパーを挟めば何も交換する必要もない
遂にその程度のことも分からなかったID:23olDi5Xが大恥かいたということだね
0527名前は開発中のものです。2014/11/05(水) 01:16:22.19ID:IsY3AQRw
winのしか作る気ないしな
c++だけで何の問題もない
0528名前は開発中のものです。2014/11/05(水) 01:19:11.85ID:IdGIx4uz
自分もC++/Win/DirectXオンリー派。
移植とか気にせんでえーし楽だ。
0529名前は開発中のものです。2014/11/05(水) 01:33:14.61ID:1mW5bpIr
スクリプトは覚えるのめんどくさいかもしれんけど便利だよ
データの分離は常識だけど、それをさらに進めて制御も分離できる
データとそれを使うコードは密接なことも多いから
まるごと分離できると何も考えなくて済むし
0530名前は開発中のものです。2014/11/05(水) 02:09:12.31ID:23olDi5X
>>525
いや、>>496 で言ってるように最大の利点はデータとして分離できること。
移植が注目されてるが、質問から思わず伸びたに過ぎない。利点の一つではあるが。
ちなみに>>422は俺ではないが、ほぼ同じ経緯をたどっているね。

特に複数人で開発するときスクリプトはかなり便利。
割と簡単に使えるようにしてから、デザイナーが演出とかいろいろ直接いじったりできる。
※あいつら、結構シビアなんでいちいち要求に応じて、こっちで作業してたらめんどくっさい。

また、前は書き換え専用の実行ファイル持ってたが、
データとしてゲーム部分を持っているのでリリース後、ゲーム中にアップデートすることもできる。
某プロテクトの関係で実行ファイルを書き換えられないので、これ地味に結構良い。
0531名前は開発中のものです。2014/11/05(水) 02:22:26.32ID:23olDi5X
>>529
ほんとこれだね
0532名前は開発中のものです。2014/11/05(水) 02:24:59.33ID:IdGIx4uz
なるほど。
覚えとこ。
0533名前は開発中のものです。2014/11/05(水) 03:13:21.00ID:H18oW5WU
スクリプトってよくわからない。素人で申し訳ないが。

例えばキャラクターの行動を外部データ(テキスト形式)で設定するとして、俺がどうやろうかと考えると
テキストを読み込む→書かれてた文字を判定→それに従ってキャラを設定する
という単なる外部データ読み込み処理になるわけだけど、
これだと特に意識しない限り独自形式でやることになるから、スクリプト言語とか関係なくなる。

んじゃよく聞くスクリプト言語ってのはなんなんだと考えると
誰かが考えたスクリプト言語にしたがって自分で実行プログラムを組んでいる?
しか思いつかないんだが、これだとあまりにも非効率で、一般に広まるとは考えにくい。

んじゃライブラリみたいな形で配布されてるの? とも思うんだが、それを自分のプログラムに組み込むのって
最初に挙げた、自分の独自形式でテキスト読み込むほうが楽でしかも早くね? と思ってしまう。 
0534名前は開発中のものです。2014/11/05(水) 04:02:31.79ID:23olDi5X
テキスト読んで設定するだけでも立派なスクリプト。
独自だろうが何だろうが、スクリプトを見て処理の流れが一発でわかるとベスト。
ノベルゲーのテキスト処理のスクリプトは想像しやすいんじゃないかな?
これはいくらなんでもハードコーディングはしないでしょ。

ただ、自分で四則演算や変数・関数を実装しようとすると、
テキストの構文解析、意味解析、スタックマシン等を勉強して
yaccやbisonでコンパイラを作る大変な羽目になる。

んで、そんなことせずとも簡単にそういう機能を組み込めるように
LuaやSquirrelがある。それにこの二つはメジャーで、かなり広まってる。
0535名前は開発中のものです。2014/11/05(水) 04:45:23.73ID:vpLYRihW
BulletMLとか、こういう説明には向いてそうな感じがする
0536名前は開発中のものです。2014/11/05(水) 07:24:36.56ID:gZJGpYil
テキスト形式のデータ構造とスクリプト言語を同一視するのは、なんだかな
xmlとかをデータ構造と言われると納得できるがスクリプト言語と言われるとなんかモニョる
いや、スクリプト言語をデータ構造として使える事は理解しているし、
データ構造をスクリプト言語の代わりとしては使えない事も理解しているが……
0537名前は開発中のものです。2014/11/05(水) 08:24:52.84ID:JAMPZGh3
ノベルゲームの場合はプログラミング言語としてのスクリプトって言うかまんま台本だな
0538名前は開発中のものです。2014/11/05(水) 08:58:45.06ID:Tq/w+cMa
ノベルゲーごときにこんな議論してたのか
通りでスレの流れが理解できんわけだ…
0539名前は開発中のものです。2014/11/05(水) 19:54:47.73ID:LE8Hhxvh
>>533
キャラクターの行動を記述できるような表現力のある
実質的にスクリプト言語と呼んで良いようなものを簡単に書けるなら
他の人が作ったものを学習して使う方が面倒に思うのでは
他の人が作ったスクリプト言語を使うにしてもブラックボックスで使うのと
中身を検査して使うのとでは手間が大幅に違う
まだお互いに無意識な認識の違いがかなりあるのではないか
0540名前は開発中のものです。2014/11/06(木) 01:14:24.74ID:u3pLa7VG
外部データの代わりとしてのスクリプト(初期化の時に呼び出すとか)はわかるんだけど
処理としてのスクリプトってのはどういう風に使うかわかんねぇや

例えばDXLibとLuaを使うとする。
DXLibは基本的にシングルスレッドで、ゲームループ中にupdateとdrawを交互に呼び出すっていうのが主流だけど、
そのupdate中にLuaスクリプトを呼ぶとすると、その処理中、ループはそこで止まってることになる。

AIのルーチンとか、ウェイト無しでひたすら処理すればいいやつはそれで良いけど。
コルーチンを駆使するような挙動(※)を記述する場合って、意図したように動かすの難しいよね?
(※四角形を右に3秒かけて30ドット移動させた後に、上に2秒かけて50ドット動かす、など)

コルーチンを2段重ねにして、
obj.move(30, 0, 3000) //xに30ドット、1000ミリ秒
obj.move(0, -50, 2000)

//moveの実装
void move(int x, int y, int time) {
 int frame = time * FPS / 1000;
 float dx = (float)x / frame
 float dy //略
 for(i = 0; i < frame; ++i) {
  time / FPS
  this.x += dx;
  this.y //略
  yield();
 }
}

こんな感じ?(これじゃズレるけど)
0541名前は開発中のものです。2014/11/06(木) 02:25:22.77ID:PKFZPuVA
最後合わせればそれでもいいんだけど、時間で考えたらいい。
float delta = (now_time - begin_time) / (float)time で 0〜1まで変化するので、
x(y) * deltaでその時点での移動量が出るから初期位置に足してやる。
終了条件は1以上になったときで、強制的に初期位置にx(y)を足して処理を抜ける。
0542名前は開発中のものです。2014/11/06(木) 03:09:54.65ID:EqcVgNy3
LuaとC++のデータ橋渡しとか、C++書く側が結構面倒くさそうだな
■ このスレッドは過去ログ倉庫に格納されています