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/
0196名前は開発中のものです。
2014/09/15(月) 00:44:19.95ID:GS0jslvNとか言われるけど、やっぱ事実?w
0197名前は開発中のものです。
2014/09/15(月) 01:33:48.17ID:Xt8gwGjX・コンパイル前のソースコードがある
0198名前は開発中のものです。
2014/09/15(月) 01:39:55.70ID:GS0jslvN開発者ではない第三者の前で再現してどーすんだw
0199名前は開発中のものです。
2014/09/15(月) 03:13:10.79ID:wd8jmKt80200名前は開発中のものです。
2014/09/15(月) 07:07:16.38ID:wuAS4ub9デバッガの例外動作関連に割り込んでるみたいだな
アンインストールしても何か残ってたし
0201名前は開発中のものです。
2014/09/15(月) 20:14:31.20ID:+WwuNSKX0202名前は開発中のものです。
2014/09/16(火) 09:20:44.20ID:4EKEuM8s0203名前は開発中のものです。
2014/09/17(水) 02:32:28.35ID:lSNjy4CG0204名前は開発中のものです。
2014/09/17(水) 06:50:46.77ID:2baRZfUFアプリが大きいサイズの連続したメモリー空間が確保できないしか影響ないだろ
0205名前は開発中のものです。
2014/09/17(水) 19:59:00.60ID:BSiz0TOucocos2dみたいに「フレームワーク」ほどいかない自由なのが好きなんだけど
0206名前は開発中のものです。
2014/09/17(水) 20:20:12.05ID:2sT7Gz4p0207名前は開発中のものです。
2014/09/17(水) 21:26:51.10ID:T7ONrPQzダメージが発生した時その配列にpush_backして、キャラクターが更新される時にまとめて処理してるですが
その通知配列に何を入れるかすごい悩んでるんですが、他の人はどうやってやってるんですか?
今は、ダメージとか属性とかデバフ情報とかを伝える手紙のような構造体をvectorにpush_backして
ダメージを受けるキャラクター側の耐性とか加味して処理しようかなと考えてます
・攻撃発生時に構造体の自動変数を生成して、コピーして伝える
・攻撃発生時に構造体をインスタンス化して、ポインタを伝える
・予め攻撃通知用の構造体を静的な値(日本語としての静的)として持っておき、ポインタを伝える
の3つぐらいは思い付くのですが、それぞれ一長一短でどうしたものかなーと・・・
0208名前は開発中のものです。
2014/09/17(水) 21:41:21.93ID:Ek0OO0vX1つめはコピー量が気になる、2つめは毎度newするのが気になる、
ってことなら、3つめのでいいんじゃないの?
日本語としての静的の意味はよくわかんないけど
0209名前は開発中のものです。
2014/09/17(水) 22:18:22.34ID:T7ONrPQz武器を装備して殴りあうだけならいいんですが、
魔法とか攻撃手段が増えると、すごい勢いで増えるかなーと
0210名前は開発中のものです。
2014/09/17(水) 22:40:21.67ID:Ek0OO0vX構造がよくわからないからなんとも言えないけど、
3つのパターンともサイズに関してはあんまり変わらないよね
どうしても気になるなら、通知って方法自体からやり直してみるとか
メモリは必要なら潤沢に使ってもいいと思うけどね
自分なら5M、10Mくらいならそれが必要なら気にせず使うかな
0211名前は開発中のものです。
2014/09/17(水) 22:49:18.55ID:T7ONrPQz同時攻撃されることも考えて・・・
そういえばこの通知をスタックしてって
自分の更新タイミングで一括処理する以外にどんな方法があるんですか?
アクションゲーム作った時と同じ構造で作ったんですが、逐次処理の方がいいんですかね
0212名前は開発中のものです。
2014/09/17(水) 23:14:42.49ID:GQlJBbYl物理ダメ、魔法ダメ、属性、デバフ系とかをまとめた攻撃情報構造体みたいなものを用意
攻撃時に構造体へ情報を詰め込む
Character.Attacked(AttackInfo*)みたいな関数へ構造体を渡す
関数内で最終的なダメージを算出って感じ
FFみたいなゲージ戦闘なら審判みたいなものを用意して、攻撃側と防御側のステータスを渡して
審判が最終的なダメを計算、敵へダメージを与えるってのもありかも?
やるかはわからないけど、防御側のカウンターダメージとかもできそう
0213名前は開発中のものです。
2014/09/17(水) 23:32:10.49ID:Ek0OO0vXスタックせずに同時のタイミングを処理する別の方法としてなら、
ステータスを更新前と更新後用に分けといて、
同じタイミング中は更新前を参照して更新後を書き換えるとか?
0214名前は開発中のものです。
2014/09/17(水) 23:34:50.13ID:T7ONrPQzありがとうございました
0215名前は開発中のものです。
2014/09/18(木) 00:24:30.25ID:64bH7faF一時的なオブジェクトのインスタンス化と削除は、
コンパイラによって最適化される場合があるらしいね
ソースはgems
0216名前は開発中のものです。
2014/09/18(木) 02:30:55.45ID:E/1zPl06>構造はFFみたいにゲージが貯まったら、
>行動できるってやつで、システムはそのままです
ATB(Active Time Battle)は、FFの特許じゃないの?
もう、特許が切れているの?
0217名前は開発中のものです。
2014/09/18(木) 05:08:15.17ID:djmncf26これか?
出願1991年だから切れてるんじゃない?
しかしこういう特許ってゲームのルールは特許にならないからって回りくどくてめんどくさい書き方してるな。でもこれに書いてある通りに実装しなくても似てるだけで訴えるんだろ?
あほくさ
0218名前は開発中のものです。
2014/09/18(木) 11:19:02.99ID:l5OvmxOh余計な待ち時間を増やすとか
あほくさ
0219名前は開発中のものです。
2014/09/18(木) 19:22:54.91ID:5nIXhLpZありがとう!参考になります
当たり判定が直感的で良さそうですね
0220名前は開発中のものです。
2014/09/18(木) 19:34:17.61ID:UPAtERIr0221名前は開発中のものです。
2014/09/18(木) 20:12:10.67ID:djmncf260222名前は開発中のものです。
2014/09/18(木) 23:10:54.55ID:5nIXhLpZ実際にスクエニに連絡して確認したことあるよっていう人がいないも案外おかしいよな
0223名前は開発中のものです。
2014/09/19(金) 03:27:56.19ID:HwK1MKsPユーザが待つ必要があり、時間のムダ
一般的には、ユーザが待たずに、入力し終わってから、
技を発動するまで、プログラム側で待つ
FFがなぜ、ATBのような非効率なシステムを発明したのか、疑問に思う
0224名前は開発中のものです。
2014/09/19(金) 06:39:00.50ID:SD9Sg4bw0225名前は開発中のものです。
2014/09/19(金) 07:39:46.20ID:kDTQDM8B0226名前は開発中のものです。
2014/09/19(金) 18:20:13.98ID:PqYwrc40サガみたいにスロット少なくするのとかアクションゲームみたいに1ボタンごとに割り当てにしないと
ユーザーに不利にしかならない
0227名前は開発中のものです。
2014/09/19(金) 21:54:17.52ID:GkCFCk/kスタオとかテイルズオブシリーズとかか
あれも魔法とかをリストから選択する機会は無くはないけど
さすがに選択中はゲーム進行止まってたな
0228名前は開発中のものです。
2014/09/21(日) 20:54:11.89ID:+/5x6E0N親クラスのルーチンワーク上で呼び出せれば
その関数を子クラスから呼ばせたくないけど、定義はさせたいっていうのが可能なのかなーって
例えばアクションゲームでキャラクターが攻撃を受けた時に、
その親クラスがコリジョン処理する時にノックバックするのかとか、状態異常をキャラクターに追加するとか
0229名前は開発中のものです。
2014/09/21(日) 21:19:32.29ID:yu1YxmSd0230名前は開発中のものです。
2014/09/21(日) 23:30:37.12ID:+/5x6E0NHSPとか?
Javaは論外としてC#とか向いてるのかな
0231名前は開発中のものです。
2014/09/22(月) 07:38:18.22ID:NiqYAxp5ただ、スクリプト使う状況って、意外とリファクタリングで何とかなる状況が多いけどな
0232名前は開発中のものです。
2014/09/22(月) 07:49:16.65ID:7IVENz3sDLLで組めば状態の変数をDLL側で持たないかぎり本体起動しっぱなしで入れ替えもできるし
組み込みスクリプトも何度か使ったが、外部データに関連する計算式程度しか有効的に活用出来なかったわ
0233名前は開発中のものです。
2014/09/22(月) 08:56:45.93ID:NiqYAxp5あと、個別の動作を順序だてて使いたい場合には使った方が楽
0234名前は開発中のものです。
2014/09/22(月) 09:08:18.28ID:NiqYAxp5protectedやfriendじゃ駄目なの?
0235名前は開発中のものです。
2014/09/22(月) 09:11:46.10ID:eY0HQZ22protectedじゃ子クラスから何度も呼び出されてもわからないじゃん
呼び出せるのは親クラスだけ、ただし親クラスが呼び出す関数を子クラスは定義できる
みたいなのがあったらいい感じに縛れそう
0236名前は開発中のものです。
2014/09/22(月) 09:23:12.77ID:NiqYAxp50237名前は開発中のものです。
2014/09/22(月) 11:02:48.99ID:bWbweNXIどうしてもやりたいときは関数ポインタ使うか, 236 のようにカウンタとかフラグで親クラスが管理するしかないんじゃね?
0238名前は開発中のものです。
2014/09/22(月) 12:34:08.13ID:pzX41AB7private virtualって出来なかったっけ?
0239名前は開発中のものです。
2014/09/22(月) 12:35:34.50ID:pzX41AB7じゃあ無理だ。ごめん。
0240名前は開発中のものです。
2014/09/22(月) 19:40:03.48ID:BR22T/mE@親のクラスで関数オブジェクトを返り値とするprotected関数を定義しといて、
子側でオーバーライドし、実行したい処理(関数オブジェクト)を定義し、返すようにする。
A親のクラスのprivate関数で、↑のprotected関数を呼び出し、さらに返り値である
関数オブジェクトを実行するようにしておく。
こうすれば、protected関数を複数回呼び出しても、処理自体が実行されないので
チーム間での疎通ミスは減らせるはず。
ちなみに、関数を子クラス内に定義して関数オブジェクトとして渡すのではなく、
protected関数をオーバーライドするブロック内でラムダ式で記述すれば、
子クラス内で処理を複数呼び出してしまうミスも防ぐことができる
こういう内部処理を外出しするの、D言語とかJavaだと簡単なんだけど、
C++だとラムダ式で返そうと思ったら参照をキャプチャしないといけないんだっけ?
0241名前は開発中のものです。
2014/09/22(月) 19:48:34.84ID:BR22T/mE子クラス側で定義する関数内で、その関数をなんの脈絡もなく再起呼び出しして
無限ループに陥らせることは誰にも防ぐことも縛ることもできないっていうやつよwww
おそらくだけど>>235が縛りたいと言ってるのはその類の話になると思う。
複数回呼ばれて困る処理を子クラスで定義可能な以上、防ぐことはできない。
変更可能な状態を子クラスに公開し、かつ、その処理を子クラスに委ねてるからね・・・。
0242名前は開発中のものです。
2014/09/22(月) 22:25:57.61ID:BR22T/mE0243名前は開発中のものです。
2014/09/24(水) 17:43:40.72ID:mcOEvjH/0244名前は開発中のものです。
2014/09/24(水) 17:49:53.05ID:cFhvO8dH0245名前は開発中のものです。
2014/09/24(水) 17:53:27.57ID:u5gVrNuz2.メモリ管理を完ぺきに把握し、完璧にスケジューリングする
3.スマートポインタ等を使ってガベージコレクションを実装する
0246名前は開発中のものです。
2014/09/24(水) 17:57:31.66ID:1Xr/Cbhv規模の小さいものならそれでも構わないけど、例えばskyrimみたいなオープンワールドのゲームだと無理だよね。
0247名前は開発中のものです。
2014/09/24(水) 18:10:10.66ID:1Xr/CbhvGC実装しただけでメモリの断片化が無くなったら苦労しないよ。
Androidで使われてるVMのdalvikは最後までコンパクションの実装出来なかったし。
0248名前は開発中のものです。
2014/09/24(水) 18:30:05.75ID:FbXuVkZ2基本的にはメモリハンドルでメモリを管理して、
必要なときだけポインタを返すやり方
メモリー配置が変わるとポインタの配置が変わるんでね
ちなみにメモリの再配置はメモリ取得のたびに行ってるから、
メモリ取得の多い場合は処理が重くなる欠点がある
0249名前は開発中のものです。
2014/09/24(水) 18:34:03.41ID:FbXuVkZ2基本的には一度取得したメモリを再利用するやり方
0250名前は開発中のものです。
2014/09/24(水) 18:53:43.12ID:FbXuVkZ2もう片方には取得するメモリサイズを入れておく、なんて事もした
0251名前は開発中のものです。
2014/09/24(水) 18:59:44.67ID:Xjyy1rtc・サイズの増減がないデータは起動時に確保・終了時に解放
・増減があるなら最大数を決めて固定領域を使いまわす
この時個々の要素を同じサイズに揃えることが大事
サイズが違うならまた別の領域にまとめる
・あるいは処理順一定でLIFOにできるならスタックを真似てぶち込むのも一考
0252名前は開発中のものです。
2014/09/24(水) 19:46:03.82ID:LrfGaICk例えば、使わなくなったメモリはリストから外して、
使う場合には使わなくなった領域をリストに再登録するとか
0253名前は開発中のものです。
2014/09/24(水) 19:48:26.36ID:RqPQCow/0254名前は開発中のものです。
2014/09/24(水) 20:02:12.50ID:LrfGaICkさあ?自分のリスト構造は自作で、基本はvector使って作ってる。
STLのリスト構造は使わなくなったらdeleteしてるらしいから、
あまり信用してないんだよな。まあ、増減量が一定量を越えると
自分のやり方でもフラグメンテーションの危険は高まるわけだが。
0255名前は開発中のものです。
2014/09/24(水) 20:07:55.87ID:BMl/3hMSそのメモリを触る可能性のあるスレッドを全て止めなきゃいけなかったり、メモリをメンバーに持つクラスを(標準ライブラリ含む)を使用できなかったりデメリット多すぎる
0256名前は開発中のものです。
2014/09/24(水) 20:18:47.07ID:LrfGaICkスレッドはあんまし使わないから関係ないかもしれないけど
0257名前は開発中のものです。
2014/09/24(水) 21:46:52.60ID:2qY3dsir解ってないな。さすが使わないだけある。
0258名前は開発中のものです。
2014/09/24(水) 21:57:16.58ID:LrfGaICk別々にメモリ取得して別々のコンパクションで監理すれば良いじゃん。
そりゃ、スレッド間通信をどう解決するかという問題は残るが。
0259名前は開発中のものです。
2014/09/25(木) 02:06:25.63ID:zb4pUBj70260名前は開発中のものです。
2014/09/25(木) 06:27:40.78ID:KZOA8+6u0261名前は開発中のものです。
2014/09/25(木) 09:20:46.75ID:SiUQKnDuよっぽどじゃなけりゃ断片化の弊害なんて目立たないし
商業のデカいタイトルだとGC独自実装してるらしいが
0262名前は開発中のものです。
2014/09/25(木) 10:09:34.46ID:Wwt/1FNM0263名前は開発中のものです。
2014/09/25(木) 10:16:44.99ID:GasQ7lmcコンパクションなんて画面の切り替えみたいな暗転で良いシーンで
シリアライズしてオブジェクト作り直しで
64bitならメモリ空間が広くなったから気にせず標準実装でいくけどな
0264名前は開発中のものです。
2014/09/25(木) 10:21:10.03ID:BS6aeyL9固定メモリ配置(って言い方で通じるかな、名前が分からん)にして
どっからどこのアドレスまで何のデータ、って設計までやりそうな印象がある
0265名前は開発中のものです。
2014/09/25(木) 10:22:30.69ID:4YQaZ6ET数時間のプレイの成果が謎のエラーでパーになったぞ どうしてくれる
0266名前は開発中のものです。
2014/09/25(木) 10:57:38.17ID:Q3KR10H7謎のエラーならメモリの断片化関係無いだろ何言ってんだ。
そもそも断片化しようが無尽蔵に増えていくわけでも無いのにそこ勘違いしてないか?
0267名前は開発中のものです。
2014/09/25(木) 11:46:44.21ID:Wwt/1FNMそもそもメモリのフラグメンテーションは見かけ以上にメモリを浪費するから問題になるわけで
0268名前は開発中のものです。
2014/09/25(木) 12:15:21.37ID:0U2Nzxja普通はフラグメントじゃなくてメモリリークを疑うわな
0269名前は開発中のものです。
2014/09/25(木) 12:16:23.34ID:NZ65e36X32bitマシンは切り捨てですか?
0270名前は開発中のものです。
2014/09/25(木) 12:22:47.53ID:NZ65e36Xフラグメンテの問題は使用メモリが少ないにもかかわらずメモリ取得出来なくなるんだが?
数バイトのゴミのような大量のメモリ取得が大きなメモリの再取得を失敗させるから問題なわけで
0271名前は開発中のものです。
2014/09/25(木) 12:27:57.77ID:0U2Nzxjaヒープに展開したメモリが断片化してんだからOS読みの使用量は肥大するだろ
0272名前は開発中のものです。
2014/09/25(木) 12:36:56.59ID:NZ65e36Xただな、vectorしか使ってない、mallocやnewを使ってない状況では、メモリリークは起きない
0273名前は開発中のものです。
2014/09/25(木) 12:51:35.78ID:Wwt/1FNM32Bit環境でフラグメンテーションを発生させる事などたやすいわ〜!!
0274名前は開発中のものです。
2014/09/25(木) 13:11:46.20ID:Wwt/1FNMちなみに32Bit環境の最大メモリー容量は4Gバイト
0275名前は開発中のものです。
2014/09/25(木) 13:57:33.94ID:7St3vxLxPCによってなる場合とならない場合があるし、突然そうなったり直ったりする
誰か分かる人いる?
0276名前は開発中のものです。
2014/09/25(木) 14:05:40.51ID:0U2Nzxjaこれwindowsで試しにやってみたら、断片化起きないのな
なんでだと思って調べてみたら、小さいサイズと大きいサイズのアロケートが
ぜんぜん遠くの場所に確保されて、断片化しないように勝手に配置してた
ググるとLow Fragmentation Heap(vista以降でデフォルトで有効)って機能が在るらしく、
これのせいで断片化が起きにくくなってるらしい
これはwin(vista以降)限定にはなるけど、こんな機能があるなら断片化はそんなに気にしなくてもいいのかも
0277名前は開発中のものです。
2014/09/25(木) 14:56:31.50ID:Q3KR10H7どうやるんだよ。具体的に言って見ろよ
0278名前は開発中のものです。
2014/09/25(木) 15:51:45.34ID:Wwt/1FNMあれ!?て事はうちで今起きてるフラグメンテーションは……メモリの機能を解析しないと解らないか
>>277
悪い、古いOSで5Gまでしか無理だった
奇数番目の数バイトのメモリと10Mのメモリを配置が動くようにサイズを交互に変更して……
って事を考えてたんだが……
0279名前は開発中のものです。
2014/09/25(木) 15:51:52.00ID:eZ0WvKEX10Mバイト程度と数バイトが連続して並べられるような実装のmallocが前提でもいいぞ。例よろしく。
0280名前は開発中のものです。
2014/09/25(木) 15:58:51.73ID:eZ0WvKEX数バイトと10Mバイトを交互に変更したらなんで5Gもいくんだよ。
古いOSってなんだよfreeした領域を再利用しないような糞実装の環境か?どんな環境だよ。少なくとも64BitのOSなんだよな?
0281名前は開発中のものです。
2014/09/25(木) 16:42:29.27ID:Wwt/1FNM10Mバイトのメモリの後ろに数バイトのメモリが動く
2 10Mバイトのメモリの容量を増やす
最初に動かした数バイトのメモリの後ろに10Mバイトのメモリが動き
10Mの空き領域が出来る
3 今の前から2番目の数バイトのメモリを増やす10Mバイトのメモリの後ろに……あれ!?
0282名前は開発中のものです。
2014/09/25(木) 16:54:07.84ID:mt5vjM8o普通に考えて2で出来た10MBの空き領域に3で増やした数バイトが配置されるだろ。
0283名前は開発中のものです。
2014/09/25(木) 17:28:22.48ID:Wwt/1FNMと簡単に考えていたが、難しい
0284名前は開発中のものです。
2014/09/25(木) 17:47:48.32ID:GasQ7lmcVirtuaAllocで予約だけして埋めてけばアプリから見たらメモリ確保に失敗できるだろうよ
0285名前は開発中のものです。
2014/09/25(木) 17:49:24.77ID:aYvhPGQT圧倒的にページデフォルトのほうがロスが大きいし。
フラグメンテーション解消もOS依存だし。
そこにこだわるくらいならメモリプールして再使用したほうがマシ。
0286名前は開発中のものです。
2014/09/25(木) 18:33:30.97ID:Wwt/1FNM0287名前は開発中のものです。
2014/09/25(木) 18:39:35.35ID:aYvhPGQTページフォールト - Wikipedia
ページフォールト (page fault) とは、プログラムが物理メモリがマップされていない仮想アドレス空間上のページにアクセスしたときにハードウェアが発生する割り込み(または例外)である。
ページフォールトを処理するソフトウェアは一般にオペレーティングシステム (OS) の一部であり、ページフォールトを発生させるハードウェアを一般にメモリ管理ユニットと呼ぶ。
OSのメモリ管理がページフォールトを処理し、その仮想アドレスにアクセスできるようにするか、無効なアクセスであるとしてページフォールトを発生させたプログラムを強制終了させることができる。
名前にフォールト(障害)とあるものの、ページフォールトは必ずしも致命的なエラーではない。
Windows、Unix系OS(Mac OS X、Linux。*BSD、Solaris、AIX、HP-UXなど)、z/OSといった仮想記憶方式を採用するOSでは、
ページフォールトは普通に発生するし、必須な機能でもある。
マイクロソフトは(Windows Vistaなどの)リソースモニタの最近のバージョンで、ページフォールトの意味で「ハードフォールト」(hard fault) という呼称を使っている[1]。
0288名前は開発中のものです。
2014/09/26(金) 02:25:48.99ID:m0bZOMy5ゲーム開発を勉強したいんだけどどういう本を買えばいいかわからない
言語はC++で描画はDirectXを使いたい
とりあえず明快C言語の入門編は買った
0289名前は開発中のものです。
2014/09/26(金) 03:16:50.45ID:A4xH7Wvc0290名前は開発中のものです。
2014/09/26(金) 07:13:47.30ID:zpPM/1OBDXライブラリ 総合スレッド その18
http://peace.2ch.net/test/read.cgi/gamedev/1399459468/
0291名前は開発中のものです。
2014/09/26(金) 09:00:00.52ID:FT0pZNED入門ゲームプログラミング (Professional Game Developerシリーズ) 大型本 ? 2014/1/30
がいいみたいだぞ
WindowsゲームプログラミングでWin32apiについても勉強しておくといいかも
DXライブラリ使った方が楽だけど
0292名前は開発中のものです。
2014/09/26(金) 10:12:15.38ID:gU5F+WDx0293名前は開発中のものです。
2014/09/26(金) 10:16:07.11ID:rbkJ86iO0294名前は開発中のものです。
2014/09/26(金) 12:18:19.00ID:+75O60pj0295名前は開発中のものです。
2014/09/26(金) 15:10:36.26ID:m0bZOMy5C++で行きたい
>>290
それはどう言う物?
>>291
DirectXに関してはそのProfessional Game Developerとか言うの買ってみる
Win32apiってのでお勧めの本はあったりする?
>>294
出来る
■ このスレッドは過去ログ倉庫に格納されています