C/C++ゲーム製作総合スレッド Part6
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2014/07/08(火) 19:30:19.51ID:J+zVqUil元スレ
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/
0399名前は開発中のものです。
2014/10/23(木) 10:02:49.79ID:s+t98wQk0400名前は開発中のものです。
2014/10/23(木) 13:23:41.02ID:noQ9gUlZそういうの作るほうは大変だけどユーザにウケるか、手間に見合うかというと、う〜ん
かえってわかりにくいと敬遠されかねない
その点討鬼伝のミタマはうまくやったなと思う いろいろな意味でw
0401名前は開発中のものです。
2014/10/23(木) 17:30:00.96ID:I+oJL2c7ステートパターン+配列でいいじゃん?
ゲームの仕様側を単純化しないと実装の複雑化はさけられないぞ
std::vector<State*> state_list;
state_list += new Poison();
0402名前は開発中のものです。
2014/10/23(木) 19:43:01.60ID:I0e3Ds/Cなんでもありを想定して作って結局あんまり使わないなんてムダだし
0403名前は開発中のものです。
2014/10/23(木) 21:28:12.43ID:qInVWJ1Lそういうのが無くてもStateパターンって便利?
0404名前は開発中のものです。
2014/10/24(金) 00:54:44.36ID:jy1RY2Vz0405名前は開発中のものです。
2014/10/24(金) 20:11:21.11ID:ddPt2zGiスリップダメージならイベント処理時にダメージ&継続判定して再度イベント投げるみたいな
オーバーヘッドでかそうだけど汎用性はある気がする
0406名前は開発中のものです。
2014/10/24(金) 22:30:58.39ID:LvhDFXW3オーバーヘッドとかそう言うのはプロファイラで測ってから言いなさいな
普通、負荷がかかるのはもっと重い処理の部分でしょ
0407名前は開発中のものです。
2014/10/25(土) 03:42:15.96ID:fVKGIfTf0408名前は開発中のものです。
2014/10/25(土) 07:52:10.14ID:NLLH5JYR0409名前は開発中のものです。
2014/10/26(日) 16:26:16.62ID:RQv84B/3だからそのオーバーヘッドが大きいかどうかはそこがネックになってるかどうかで判断しろって言ってるんでしょ
0410名前は開発中のものです。
2014/10/26(日) 17:41:30.80ID:dULlRr0tだからそれがオーバーヘッドキックかどうかはそれがキックになってるかどうかで判断しろって言ってるんでしょ
0411名前は開発中のものです。
2014/10/26(日) 18:19:06.69ID:Z5NRlQnX0412名前は開発中のものです。
2014/10/26(日) 19:50:32.98ID:YANUPprV0413名前は開発中のものです。
2014/10/26(日) 19:56:46.37ID:eW7jlsGh0414名前は開発中のものです。
2014/10/26(日) 22:10:45.35ID:PTfFlHbF0415名前は開発中のものです。
2014/10/26(日) 22:20:48.23ID:Wgbd5x3C0416名前は開発中のものです。
2014/10/26(日) 22:37:50.70ID:RQv84B/30417名前は開発中のものです。
2014/10/27(月) 22:07:07.84ID:sM1yBz6U0418名前は開発中のものです。
2014/10/28(火) 00:30:16.35ID:/GKC+OVC0419名前は開発中のものです。
2014/10/28(火) 21:29:09.92ID:ysAm8J5x0420名前は開発中のものです。
2014/10/29(水) 19:22:23.08ID:nDYTAhVm0421名前は開発中のものです。
2014/10/29(水) 23:42:07.72ID:4ZmDH5l40422名前は開発中のものです。
2014/10/31(金) 00:17:00.08ID:nSbgcPzE自分は限界を感じてC++はゲームライブラリをラップするエンジン部分だけに使って
ゲームロジック部分はLuaでできるように勉強してる
C++(エンジン) // C++(エンジン上で動作するパーツ) // Lua(パーツを利用するロジック) // Lua(モデルやイベント用スクリプト)
0423名前は開発中のものです。
2014/10/31(金) 07:04:00.65ID:m5w778wA何で書くかというより設計の問題でしょ
0424名前は開発中のものです。
2014/10/31(金) 10:05:54.22ID:6bcSF0zB自分もLua使ってて今作ってるけど、ロジックはC++で組んでる(組む予定)
Luaでやるのはキャラの初期値などのパラメータ値の設定やイベントの記述、
画面背景に表示するものをLuaで記述、くらいの予定かな
>>423の人も言ってるけど、Luaで書けるならC++でも書けるから、何をLuaに求めるかだと思うけど、
自分の場合はLuaでやるメリットはリコンパイルせずにレベルデザインの動作確認を行えるようになること
ロジック部分はLuaに追い出すと速度的なデメリットが大きそうなのと、
Luaで書けるようにすること自体の工数も大きそうなのでやめた
0425名前は開発中のものです。
2014/10/31(金) 12:53:25.76ID:CfUZyuSt0426名前は開発中のものです。
2014/10/31(金) 17:49:19.79ID:wudHshK90427名前は開発中のものです。
2014/10/31(金) 17:59:48.36ID:881Z1hau0428名前は開発中のものです。
2014/10/31(金) 18:15:11.72ID:jL8HxUOw0429名前は開発中のものです。
2014/10/31(金) 18:24:36.01ID:6bcSF0zBいらねーよw
0430名前は開発中のものです。
2014/10/31(金) 19:02:05.50ID:LbK2+I6l3種類ほど
一つはシナリオとかのイベント管理用
一つはレコード単位のデータ管理用
一つはツリー構造のデータ管理用
0431名前は開発中のものです。
2014/10/31(金) 19:18:37.90ID:oJQR+l+C・クラスとヘッダーに分けなくていい
・importはC/C++のincludeより使いやすいと思う
C/C++だとどれをインクルードすべきか調べないと分からない事もあるし
・ネイティブの部分だけ予めコンパイルしておけば、変更したコードを複数のデバイスですぐにデバッグ可能
・GCでメモリ管理が自動に
・リフレクションでクラスの情報に実行時アクセス
・実行時の式評価(デバッグに使う)
実行時コード編集は確かにあまり役立ってないかも
デリゲート・・・はC++11なら使えるのか
0432名前は開発中のものです。
2014/10/31(金) 19:23:51.37ID:GqyQ4J03実行中に変更出来ないと一回落として変更して同じところまで進めないといけないから
レベルの調整とかしてるとめちゃくちゃめんどい
0433名前は開発中のものです。
2014/10/31(金) 19:24:16.18ID:LbK2+I6l0434名前は開発中のものです。
2014/10/31(金) 19:32:27.85ID:6bcSF0zBまあ半分わかるけど、相当規模が大きなものじゃないといらないし、
代替としてその環境を作るスクリプトも組めるし、
途中で変えちゃったら、ユーザーがほんとにその条件に辿り着けるのかテストにならないから
やっぱりいらないな
0435名前は開発中のものです。
2014/10/31(金) 20:11:52.54ID:GqyQ4J03ロジックをスクリプトで記述するなら汎用ゲームエンジンでいい気がするな
Unityとかめっちゃお手軽よ
0436名前は開発中のものです。
2014/10/31(金) 20:42:19.68ID:3MYWoAmv0437名前は開発中のものです。
2014/10/31(金) 20:58:16.81ID:qWph+yLX0438名前は開発中のものです。
2014/10/31(金) 22:36:22.81ID:ARi4wFqk0439名前は開発中のものです。
2014/10/31(金) 22:57:08.23ID:oJQR+l+Cいーるどぅ
0440名前は開発中のものです。
2014/10/31(金) 22:59:35.82ID:r+epGFzI0441名前は開発中のものです。
2014/10/31(金) 23:09:11.23ID:BXR79UmAシューティングゲームアルゴリズムマニアクスにあったように記憶してる。
手元にないから確かじゃないけど。
0442440
2014/10/31(金) 23:15:42.18ID:r+epGFzIありがとうございます!
その本は持っているのですが、IKについて書かれていることに気付きませんでしたw
コードも書いているので参考になりそうです。
他の本も、ご存知の方がおられたら是非教えてください。
0443名前は開発中のものです。
2014/11/01(土) 01:19:56.78ID:/W7J7qqw最近読んだのだとこれ
XNAのソースがサンプルであるけど今はXNA自体が使えない
http://www.borndigital.co.jp/book/94.html
0445名前は開発中のものです。
2014/11/01(土) 10:44:08.91ID:oqeDiPeWBが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ステートパターン使うといいよ
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+0449名前は開発中のものです。
2014/11/02(日) 01:02:23.40ID:p7BeypyfやっぱりStateパターンが良いですよね
ありがとうございます
0450名前は開発中のものです。
2014/11/02(日) 10:54:46.91ID:F1N1A3wTStrategyパターンって
コードの書き方はまったくと言っていいほど同じじゃないですか?
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+iLF1K90457名前は開発中のものです。
2014/11/02(日) 23:03:44.43ID:nU5X7LHx0458名前は開発中のものです。
2014/11/02(日) 23:46:34.29ID:bYY9FFGo0459名前は開発中のものです。
2014/11/03(月) 11:18:44.11ID:awPRm7Lk各処理に番号付けてswitchで振り分けながら順番に処理した方がまだ見通しよくなりそう
0460名前は開発中のものです。
2014/11/03(月) 12:22:49.27ID:h2Nq+Bdg0461名前は開発中のものです。
2014/11/03(月) 12:27:51.68ID:DUvfBBxq0462名前は開発中のものです。
2014/11/03(月) 13:23:55.34ID:EKtPAmoI1行ですっきり書けてかっこいいと思ってやってるんだろうけど
結局デバッグするときにどの関数が実際に呼ばれてるのか
分かりにくくなったりするだけなんだよなあ
状態変数使って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:TMDXQf530466名前は開発中のものです。
2014/11/03(月) 13:36:09.35ID:DUvfBBxq楽しいねw
ポリモーフィズムで、ほとんどコードをいじることなくなった基幹クラスがあることが嬉しいw
場合によってはベタ書きのほうが総合的にイイなぁ、と思うところも多々あり。
0467名前は開発中のものです。
2014/11/03(月) 15:20:17.50ID:awPRm7Lk関数名じゃなくて数値と対応付けてswitchで処理するって事
複数のboolで分岐してるのをintひとつでやる感じ
列挙型でやればコードも見やすいかも
そもそも関数名でswitchなんて出来ないしね
0468名前は開発中のものです。
2014/11/03(月) 15:42:10.04ID:LRPNDOfH自動的に対応付けてCのソースコード生成とか、昔からよくあるサボりテク
STGの敵キャラや弾みたいな、簡易なシーケンシャル制御では重宝するかと
0469名前は開発中のものです。
2014/11/03(月) 15:42:40.12ID:LRPNDOfH0470名前は開発中のものです。
2014/11/03(月) 16:29:35.49ID:almwUFeG0471名前は開発中のものです。
2014/11/03(月) 16:38:51.58ID:w8rbKk4KCならまだしも、C++で関数ポインタって使いにくいと思うんだけど
非staticなメンバ関数使おうとしたらめんどくさいし(function<...>とかあるけど)
あと一口に状態遷移っていっても
アクションゲームの敵とか、個々のゲーム内オブジェクトの動作みたいな規模と
RPGでのフィールド/メニュー/先頭シーンの切り替えみたいな規模のものがあるけど
それによっても求められる要件は結構違ってくるんじゃないか
0472名前は開発中のものです。
2014/11/03(月) 16:47:13.78ID:6bdXEtlk関数付き構造体としてしかC++使えていないだろうし
0473名前は開発中のものです。
2014/11/03(月) 17:15:54.38ID:awPRm7Lk少なくとも>>445の例でstateパターンが最適とは思えない
0474名前は開発中のものです。
2014/11/03(月) 17:30:10.15ID:s5EHYVPLhttp://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:DUvfBBxq0477名前は開発中のものです。
2014/11/03(月) 17:43:52.24ID:71HprTRFすごいなその日本人ってやつは
0478名前は開発中のものです。
2014/11/03(月) 17:49:10.69ID:s5EHYVPL0479名前は開発中のものです。
2014/11/03(月) 17:56:31.99ID:Z17rldcf商業ならそうもいかないだろうけど
0480名前は開発中のものです。
2014/11/03(月) 18:00:07.61ID:eKZugS4h他人のソース全く意味わからないし。
0481名前は開発中のものです。
2014/11/03(月) 18:26:59.05ID:EKtPAmoI日本人は絶対写真出さないしニックネームだからな
ネットゲームでも外人は気さくに話しかけてくるが日本人は基本無口だからな
晒しとか陰湿な行為を行うのは日本人という民族が劣ってるからなんだろう
0482名前は開発中のものです。
2014/11/03(月) 18:34:22.56ID:Z2NKRK1eもっと自分に自信を持ったら?
0483名前は開発中のものです。
2014/11/03(月) 19:12:02.78ID:LRPNDOfH0484名前は開発中のものです。
2014/11/03(月) 21:02:33.52ID:6bdXEtlk頭悪いし才能ないから諦めたほうがいいよ
0485名前は開発中のものです。
2014/11/03(月) 21:22:08.07ID:/5RkG39n0486名前は開発中のものです。
2014/11/03(月) 21:41:28.69ID:DUvfBBxq0487名前は開発中のものです。
2014/11/03(月) 21:47:10.70ID:awPRm7LkだからJAVAやってればいいじゃん
君にネイティブ言語はちょっと難しいんじゃないかな
0488名前は開発中のものです。
2014/11/03(月) 23:31:40.14ID:6bdXEtlk継承ひとつ理解できないおつむじゃ諦めたほうがいい
もしくは独自のヘンテコなやり方をしたければ、ここで披露せずに一人でやっていなさい
0489名前は開発中のものです。
2014/11/03(月) 23:48:43.67ID:kGGiNKfpでもstateパターン作るなら、状態遷移図は別にドキュメントを作る必要があると思う。
テーブルでやる場合はソースだけでもいいが、抜けがないかの確認がしにくい。
階層型の状態遷移はどうやるといいのだろうか。nestが2階層とか決まってたらまだいいけど、
自由に階層作りたいとか。
0490名前は開発中のものです。
2014/11/03(月) 23:51:38.06ID:kGGiNKfpコードも見やすく、変更も動的にできるし。
0491名前は開発中のものです。
2014/11/04(火) 00:05:07.98ID:zm0bWhhE0492名前は開発中のものです。
2014/11/04(火) 00:09:15.45ID:8wIs/lt8親階層を子階層から遷移させる手法が考えどころになるだろうね
自分は独自のやり方でやってるけど、一般的にはどういうやりかたが
推奨されて普及しているのかよく分からない
0493名前は開発中のものです。
2014/11/04(火) 00:40:17.63ID:ROF6NvON0494名前は開発中のものです。
2014/11/04(火) 01:00:57.23ID:gmdSbkqZ0495名前は開発中のものです。
2014/11/04(火) 01:25:54.32ID:eIlBUMlD興味があるので、できれば試用感を教えてほしいんだけど
0496名前は開発中のものです。
2014/11/04(火) 02:14:53.36ID:zm0bWhhEライブラリいっぱい使うと時間がかかるとか、
なんでアホな話になるかね。
外部データとして扱えることが最大の利点だろうに。
移植のこととか考えてないんかねこの人たちは。
0497名前は開発中のものです。
2014/11/04(火) 02:17:27.43ID:ROF6NvON0498名前は開発中のものです。
2014/11/04(火) 02:33:18.69ID:zm0bWhhEシーケンシャルな書き方で >>445 を書けて
GameStart();
ShowPlayer();
ShowEnemy();
BattleStart();
てことで、定型の処理は隠ぺいして保守しやすくスッキリ見通せる。
さらにスクリプトからスクリプトを生成して動的に実行するということも可能になるんで
非常にフレキシブル。
boostのコルーチンは使ったことない。
■ このスレッドは過去ログ倉庫に格納されています