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/
0165名前は開発中のものです。
2014/09/10(水) 21:14:44.14ID:yJISCIw+「C++ delete this」でぐぐると吉
0166名前は開発中のものです。
2014/09/10(水) 21:17:37.71ID:yJISCIw+> while(true){
> if((scene=scene->Update())==NULL)break;
> }
この方式なら、変数sceneをshared_ptrとかunique_ptrとかのスマートポインタにしておけば
代入のタイミングで元々入っているインスタンスをdeleteしてくれるから
そっちの方がシンプルで安全かも知れない
0167名前は開発中のものです。
2014/09/10(水) 21:24:41.93ID:+NofARIsポインタでしか使わず、配置もしない
0168名前は開発中のものです。
2014/09/10(水) 22:26:12.02ID:+NofARIsネット上のサンプルではクラス定義と一緒に書いてるみたいで実装と分かれていません
operatorもtemplate同様ヘッダーでしか定義出来ないんでしょうか?
0169名前は開発中のものです。
2014/09/11(木) 00:03:08.79ID:asVl9LWgbeginで得たイテレータにインクリメント重ねると必ずendで得たイテレータになるのでしょうか?
0170名前は開発中のものです。
2014/09/11(木) 00:08:52.32ID:dW8hm7Drそしたら自ら開放しにいかなくても、参照が消えたら開放されるはずだろ。
0171名前は開発中のものです。
2014/09/11(木) 00:32:27.41ID:U19JA4G4その状態でAとBが重なったかだけ取得することってできる?
onTriggerEnterとかもコリジョンオフにしたから動作しないし、
自前で衝突判定プログラム作るしかない?
0172171
2014/09/11(木) 00:33:42.60ID:U19JA4G4書くスレ間違えました
0173名前は開発中のものです。
2014/09/11(木) 22:01:08.21ID:asVl9LWgこれなんでerrorが出るのかよくわからないんですが、どういうことなんでしょうか?
ポインタが0にNULLとして反応してるってことですか?
0174名前は開発中のものです。
2014/09/11(木) 22:06:54.07ID:3lU2at1b0175名前は開発中のものです。
2014/09/11(木) 22:24:22.87ID:VO9tt5QZ引数間違ってるんじゃないの
0176名前は開発中のものです。
2014/09/11(木) 22:30:38.71ID:Vk9/avmuポインタがNULLとかはコンパイル時には関係ないよ
コンパイルしたらエラーが出るんだよね?
インテリセンス的なやつはソース修正してもすぐに反映されないから、
IDE上ではエラーになっててもコンパイルしたら行けるとかあるよ
その下に出てる定義が本当にその上のDrawの定義なら行けそうに思うんだけどなあ
なんかインクルードのファイルが実は別のやつになってたとかそんな問題くらいしか思いつかないな
0177名前は開発中のものです。
2014/09/11(木) 23:17:52.95ID:PusxPgQr0178名前は開発中のものです。
2014/09/12(金) 01:29:52.01ID:55HmiNZ2imageresource型で、下のウィンドウがDraw関数です
0179名前は開発中のものです。
2014/09/12(金) 01:35:12.60ID:MvhPALDv0180名前は開発中のものです。
2014/09/12(金) 09:19:01.28ID:M+TP6FjVなおかつImageResourceがその型をpublic継承してないとか?
試してないから全く見当違いかも知れないけど
0181名前は開発中のものです。
2014/09/12(金) 11:29:01.17ID:L2eUAZ9Y0182名前は開発中のものです。
2014/09/12(金) 16:54:40.75ID:M+TP6FjV解決おめ
0183名前は開発中のものです。
2014/09/13(土) 12:46:42.97ID:qOD9bpYo自分のPC2台(両方XP)で動かすと問題なく動き、知人AのPC(Windows7)でも問題なく動くのですが
知人BのPC2台(両方Windows7)だと必ず「プログラムを停止します」とでて終了するという
謎の現象に悩まされています。
落ちる場所は毎回同じようなので、プログラムの要所要所に、テキストファイルに
メッセージを吐き出す命令を加えてみたところ、ある if文 のところで落ちてると判りました。
そこで今度はその if文 で使ってる変数6つをテキストに吐き出すようにしたところ、
その4つめの変数吐き出す部分で終わるようになってしまいました。
(つまり落ちる場所がずれた)
この if文 はループになっており、特定のループ時にのみ落ちる事が判明していますが
この変数自体はループにおいて全く変更されておらず、この変数が原因とは考えにくいです。
次に、このif文は無くてもこの場合たいした支障のでない部分だったので
まるごと消去してみたのですが、それでもやっぱり落ちました。
ここにきて行き詰まってしまって、どう調べていいのかわからなくなりました。
・実はこの部分以外に原因があってそれを見逃してる?
・この関数のこの部分が何らかの影響で破壊されているのか?
・なぜ知人BのPCでだけ発生する?(しかも2台とも)
何か考えられる原因とかありますでしょうか?
0184名前は開発中のものです。
2014/09/13(土) 13:29:31.89ID:N7NNCB+K0185名前は開発中のものです。
2014/09/13(土) 13:31:47.88ID:p7BFEjLV昔のデバッガだとアセンブラで見れて実際に命令がおかしくなってる部分を確認できたわけだが、今は無理だな
0186名前は開発中のものです。
2014/09/13(土) 13:54:57.42ID:p7BFEjLVもしくはメモリに余裕がないとか
0187名前は開発中のものです。
2014/09/13(土) 13:58:59.50ID:FxWLsqJE0188名前は開発中のものです。
2014/09/13(土) 14:40:43.79ID:ktDMwsVO配列とかJavaと勘違いしてたかもしれないけど
0189名前は開発中のものです。
2014/09/13(土) 15:06:29.64ID:Zs9/uEmoC++では、自動的に初期化されるのは静的変数の時だけ(全変数が0に初期化される)
それ以外のスタックやヒープの変数は何らかの初期化をどこかで行う必要があるね
0190名前は開発中のものです。
2014/09/13(土) 16:41:17.80ID:6DC3rx39> その4つめの変数吐き出す部分で終わるようになってしまいました。
そのテキストを吐き出す処理も立派な処理なので、落ちる場所がずれる可能性はあるよ。
デバッグ用に処理を追加してもずれるので原因究明が難しい。
とにかくメモリーを壊してる処理が無いかどうかチェックして
修正したらテストしてもらうとか…
0191名前は開発中のものです。
2014/09/14(日) 11:36:56.77ID:0Se26vk6問題のあるPCを使わせてもらって、IDE入れて直接確認するのが一番早い
もしくは強制終了が出なくなるまで、プログラムをどんどんコメントアウトしていって、原因箇所を突き止めるとか
思いつく原因は、ZeroMemoryで初期化サイズを間違えて、余計な領域まで0にしているとか?
0192名前は開発中のものです。
2014/09/14(日) 12:01:02.08ID:kfEvYRg/自分の場合はネトゲが一部動かなくなったし
0193名前は開発中のものです。
2014/09/14(日) 14:26:42.23ID:wa/wX/ErそれをIDEで開けばデバッグ実行してるような状態になるから
そこでどこでエラーが出たか、どの変数に何が入っているかを確認するといい
開発環境を入れるのは>>192と同意見、入れない方が良いと思う。
0194名前は開発中のものです。
2014/09/14(日) 21:12:12.71ID:62kRP5LB関数ヘッダが実体と違うというウルトラCもありえなくはない
printf でバッファ破壊というオチはよくある罠
>なぜ知人B
俺は詳しくないが DEP の設定がどうのとたまに聞く
自PCで再現できればそれに越したことはないが、そうでなければ気にしても仕方ない
0195名前は開発中のものです。
2014/09/15(月) 00:44:13.42ID:IlfRDj6Oどうせランタイム入れるから、変わらないんじゃないの?
>ネトゲが一部動かなくなった
まじか
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固定メモリ配置(って言い方で通じるかな、名前が分からん)にして
どっからどこのアドレスまで何のデータ、って設計までやりそうな印象がある
■ このスレッドは過去ログ倉庫に格納されています