トップページ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/
07737642014/11/30(日) 21:00:10.04ID:09iyr5dN
>>771-772
サンクス。
fAspectが増えたことで16Byteアラインしたから通ったとしたら、たまたまで怖い気もw
いずれにせよ、たしかに_m128型使ってる以上、アラインされることは期待できそうだよね。
0774名前は開発中のものです。2014/11/30(日) 21:49:21.14ID:3sYJoklf
いつになく勉強になる流れだなw
0775名前は開発中のものです。2014/11/30(日) 22:42:52.60ID:wowBQ4xC
アライメントでクラッシュとかデバッグ大変そう
ヒープに確保すんのはやめた方がいいらしいけど
http://msdn.microsoft.com/ja-jp/library/ee418725%28v=vs.85%29.aspx
0776名前は開発中のものです。2014/12/03(水) 13:17:19.43ID:Z1yRDwuo
Unityにナビメッシュっていう機能あるけど、内部ではダイクストラ法使ってるの?
0777名前は開発中のものです。2014/12/03(水) 13:18:24.64ID:iziS6ZnM
3回に1回は使ってる
0778名前は開発中のものです。2014/12/03(水) 21:11:51.59ID:OgMzERcn
ファイルの読み書きのやり方って、

・C標準のfopen系
・C++標準のfstream系
・WinAPIのCreateFile、ReadFile、WriteFile

みたいに、たくさんあるけど、使い分けってどうしてる?
0779名前は開発中のものです。2014/12/03(水) 22:44:11.09ID:TXwtBb38
WinAPI系に近いライブラリを作る場合はCreateFile、ReadFile、WriteFile、
普段使いのC++で機種依存しないライブラリはstream系
C系のライブラリで開発汁ときはfopen系

いずれにせよメインプログラムから直接ファイル操作関数は使わなーい
0780名前は開発中のものです。2014/12/04(木) 01:02:24.18ID:YkojZjJM
Windows環境と仮定して。

C標準を使うとランタイムライブラリが必要になるので却下。
今どき使うのはオッサンとバカだけ。

C++も結局はWinAPIの薄いラッパに過ぎないので、
基本的にはWinAPIを呼ぶのが正解。
0781名前は開発中のものです。2014/12/04(木) 03:01:38.93ID:ClGYe+T3
CRT使わないなんて、よほど節制しないとつらくないか?
try-catchを使っただけでもCRTが要るだろ?

あと、Windowsなら、よく使うのはAPIの関係でIStream系が多いなぁ。
0782名前は開発中のものです。2014/12/04(木) 03:07:11.75ID:iZaOw4vq
C++だってランタイム必要なのに変わりないような
0783名前は開発中のものです。2014/12/04(木) 08:11:19.48ID:L+71L5pW
ランタイム必要な記述ってどういうのがある?
例外、IO、メモリ関係とかはランタイム必要そうだけど
その辺全部OSのAPIで済ますの?
0784名前は開発中のものです。2014/12/04(木) 08:35:11.34ID:y13HpW+M
>>780の常識は世界の非常識
0785名前は開発中のものです。2014/12/04(木) 09:42:58.76ID:ClGYe+T3
>>783
昔のATLコンポーネントで、実行ファイルを小さくするためにランタイム無しってのはたまに見かけた。
IOやメモリ関係は、Win APIで代替が利く。 例外は使わないか、SEHやRAIIで代用。
ただ、浮動小数やstd::*を使えないし、かなりの制限を受けるよ。
0786名前は開発中のものです。2014/12/04(木) 10:01:50.12ID:Eg8ibX6r
要件も確認しない実行ファイルサイズ至上バカが、生産性もクロスプラットフォームも捨ててWin32APIを直接使うって主張してるだけだな。
そっちの方がオッサンくさい。
0787名前は開発中のものです。2014/12/04(木) 19:29:15.66ID:tgdEpz3N
自分はRAIIなfstream系が好みだな。

WinAPIでも、
shared_ptr<void> pFile( CreateFile( ... ), CloseHandle );
でRAIIできるし、WinAPIならメモリマップドファイルが使えるから、Seekすることが多い用途で使う。

fopen系でも、上記要領でRAIIできるけど、
fopenだと、VC++でfopen_s使えって警告がウザいし、1行でスマートに書けないから嫌い。
でも、fprintf、fscanfは便利なんだよなぁ・・・。
0788名前は開発中のものです。2014/12/04(木) 21:52:37.38ID:BSnl4VWG
状況によって使い分けてるな。なので>>778に近い気がする

ファイル入出力に近いモジュールは一度組んだらほぼ手を加えないので
環境依存のAPIを使ってても、次に使う時は細かいこと忘れちまってるな

オッサンだな
0789名前は開発中のものです。2014/12/04(木) 21:53:54.27ID:BSnl4VWG
×>>778>>779
0790名前は開発中のものです。2014/12/06(土) 04:00:55.39ID:X/U/zDqc
まとめブログが世論誘導加速中 閲覧数と影響力が大きいのでまとめブログにもコメント宜しくお願いします。
http://jbbs.shitaraba.net/bbs/read.cgi/news/5097/1275245794/96 ←
0791名前は開発中のものです。2014/12/07(日) 13:13:24.02ID:mFsIvomy
クラスのメンバのvector変数にpush_backをしたのに、push_backしたメンバ関数が終了すると
他のメンバ関数でsizeが0になるんですが、vectorにそういう感じの仕様ってあるんですか?
http://codepad.org/QE4clISm

vector変数の中身を消す処理はしてません
0792名前は開発中のものです。2014/12/07(日) 13:40:07.34ID:9LyEQ/ju
http://melpon.org/wandbox/permlink/PGTC7VqZBylSFl9m
0793名前は開発中のものです。2014/12/07(日) 14:36:04.47ID:5KYRoGrU
デストラクタが走ってからsize()を呼んでるとかそんなオチだろうな
0794名前は開発中のものです。2014/12/07(日) 14:39:37.63ID:hyValMsU
どうでもいい質問で悪いけど、範囲for文とstd::for_eachってどっち使ってる?
0795名前は開発中のものです。2014/12/07(日) 15:34:57.43ID:EqvPSafZ
範囲for
0796名前は開発中のものです。2014/12/07(日) 16:06:32.38ID:6S6vavTT
範囲for
0797名前は開発中のものです。2014/12/07(日) 16:43:30.16ID:dMVqqTm9
範囲for
C#やVB使う場合はfor each使うけどね
C++では扱いづらい
0798名前は開発中のものです。2014/12/07(日) 16:52:24.55ID:dMVqqTm9
わざわざ関数名考えないといけないから面倒なんだよな
0799名前は開発中のものです。2014/12/07(日) 16:56:54.79ID:9LyEQ/ju
ラムダのことも忘れないであげてください
0800名前は開発中のものです。2014/12/07(日) 17:45:42.30ID:e6dpx8ym
範囲for!そういうのもあるのか
イテレーター使えればなんでもいけるのこれ
0801名前は開発中のものです。2014/12/07(日) 17:57:50.11ID:fL0IRO+A
範囲for、途中でインデクスが欲しくなって、
結局普通のforになることが多い。
0802名前は開発中のものです。2014/12/07(日) 18:19:55.91ID:6S6vavTT
>>801
あるあるw

でもそうでもない限りは記述が美しいから、できる限り使うようにしてるな。
0803名前は開発中のものです。2014/12/07(日) 20:32:17.28ID:heuc+ktl
ランダムアクセスイテレータならdistanceで取ればいいだけ
0804名前は開発中のものです。2014/12/07(日) 20:40:01.29ID:6S6vavTT
>>803
知らんかったw
すげーw
さんきゅー。
0805名前は開発中のものです。2014/12/07(日) 21:00:39.07ID:KCbAkKfJ
std::for_each で being() end() を書かずに済む方法ってあったっけ
範囲forのほうがむしろタイプ数が少ないような
0806名前は開発中のものです。2014/12/07(日) 21:44:37.07ID:0+t1yYxF
BOOST_FOREACHを使うのが一番良いのでは
0807名前は開発中のものです。2014/12/08(月) 00:26:35.24ID:Tkb5ImKO
boost使っていいんなら
boost::for_eachというのもある
0808名前は開発中のものです。2014/12/08(月) 01:42:50.74ID:/dWjo4ra
distanceはrandomの時はO(1)それ以外はO(n)か
考えてみれば当たり前だけどこれvector以外のコンテナで全ての要素でやったら計算量O(n2)になるな
こういうのちゃんと覚えておかないと使い所間違えそう
0809名前は開発中のものです。2014/12/10(水) 15:07:51.95ID:fIQTJgum
市販の3DアクションゲームってC++で作られてるの?
それともUnityとかアンリアルエンジンとか?
0810名前は開発中のものです。2014/12/10(水) 19:05:50.57ID:UFn2Nat6
ほとんどC++やJAVA等でプログラミングしてると思うが、
最近は一部エディタでもコンシューマ開発用キットを出してる
エディタ系はアクション系特化が多いので、
もしかしたらエディタ製もあるかもしれない
0811名前は開発中のものです。2014/12/10(水) 20:57:58.95ID:WqzdIXuz
それともUnityって何だよ
Unityだってコア部分はC++で作られているだろ
0812名前は開発中のものです。2014/12/10(水) 21:08:38.95ID:OgtEYajR
そういう意味じゃねえだろ
0813名前は開発中のものです。2014/12/10(水) 21:17:30.67ID:Z1DuKoHt
エディタは内部で独自に言語を作っているところも多いし ほとんど使わないのもある
そもそもプログラミング言語使わずにゲームが作れるのが一番の売りだし
0814名前は開発中のものです。2014/12/10(水) 21:19:34.07ID:WqzdIXuz
Unityじゃない所は
そう言うミドルウェアにライセンス料払いたくないか
全部自分でコントロールしたいから非オープンソースが嫌な人達だろう
0815名前は開発中のものです。2014/12/10(水) 21:21:37.53ID:TxBmxmRH
>>809は言語とゲームエンジンの区別がついてないのだろうな、とは俺も思う
0816名前は開発中のものです。2014/12/10(水) 21:26:51.59ID:PG4tDcoQ
フルスクラッチか否かって話じゃね
0817名前は開発中のものです。2014/12/10(水) 21:27:36.02ID:Z1DuKoHt
言語使って自分で組んでるのかエディタ使って作ってるのか聞きたかったんだろ?
で、商業でやってるところはだいたい自分で書いてるとすでに答えられてる
0818名前は開発中のものです。2014/12/10(水) 21:34:16.87ID:FC5BkzvK
バイナリデータとかバージョン管理が出来ないから嫌すぐるw
0819名前は開発中のものです。2014/12/10(水) 21:35:32.23ID:X2qHCJlA
難しかったり面倒な部分をエンジンやライブラリに押し込むのは良くあること。
それを簡単なC++から使うか、適当なスクリプト言語から使うかの差しかない。
0820名前は開発中のものです。2014/12/10(水) 21:48:54.83ID:Z1DuKoHt
バイナリデータなんか直接扱うことはほぼないぞ…
それをしないためのプログラミング言語なんだし
バージョン管理は商業で作るところならまず間違いなく専用のソフトを入れているし、
個人でやるなら中〜大規模な作品でもなければ多分なくても管理できる
何人か集まって作るならその時導入を検討すればいい
0821名前は開発中のものです。2014/12/10(水) 22:03:07.95ID:FC5BkzvK
エディタってのが専用のバイナリを直接変更するものだと思って書いた

バージョン管理って個人的なのでも結構使うなあ・・・
ソースに変なコメントとか残したくないんだよねw
0822名前は開発中のものです。2014/12/10(水) 22:21:09.59ID:6ysuSswG
男なら全部C++
0823名前は開発中のものです。2014/12/10(水) 22:22:55.40ID:WqzdIXuz
Unityはバージョン管理システムが組み込まれてるし
svn等の外部のバージョン管理システムも使いたければ使える
0824名前は開発中のものです。2014/12/10(水) 23:18:34.81ID:SWjWjl7/
コードにコメントでいつ追記とか書くの鬱陶しいよな
場合によっては編集前のコードをコメントで残すとかいうルールしいてることもある
もうアホかと
0825名前は開発中のものです。2014/12/10(水) 23:36:58.77ID:FC5BkzvK
うん
Gitだとサーバーとか立てなくても気軽にローカルでリポジトリ
作れたりとかできちゃうから楽だわ
作業内容はソースにコメントで残すんじゃなくコミットログに
押し込めるし時系列で追えるしね
0826名前は開発中のものです。2014/12/11(木) 00:13:34.16ID:RhkXQVIG
UnrealEngine4はC++でプログラミングするんだぞ
0827名前は開発中のものです。2014/12/11(木) 00:16:26.40ID:6Drf6QBa
bitbucketにリモートリポジトリ取っておけば優秀なバックアップに。
ちょっと思い付いたらブランチ切って気が済むまで弄り倒して
上手く行ったらそのままマージ、
ダメだったら元のブランチをチェックアウトすれば元通り。
今はGUI付きのクライアントもあるし有り難い時代だ
0828名前は開発中のものです。2014/12/11(木) 02:04:41.77ID:vflPKXfm
ゲーム会社の求人見てたら普通に
Unityやcocos2dの経験者歓迎とか書いてあるぞ
商用で普通に使われてるんだと思うんだが
0829名前は開発中のものです。2014/12/11(木) 08:52:12.08ID:6p4P8aMh
大手ならC/C++で独自ツール作るけど
弱小は既存ツール使うしか選択肢がない
0830名前は開発中のものです。2014/12/11(木) 09:22:11.45ID:HPqpSaB4
1つでも使いこなせれば応用が利くから教育の手間が省けるってことじゃないの?
0831名前は開発中のものです。2014/12/11(木) 13:18:32.61ID:2JpT6opC
>>817はどこの世界の話か知らないが
Unity使った商業作品なんて山ほどあるだろ

>>829
いやだからどこの世界の話だよ。
0832名前は開発中のものです。2014/12/11(木) 19:04:56.48ID:aRGwjS4y
「大手は既存ツールやエンジンを使わない」とは言ってないと思うぞ
0833名前は開発中のものです。2014/12/11(木) 19:10:00.11ID:b4/DV/vl
結局潰しがきかないのよね、開発エンジンって
それでも大抵の人は困ることはないだろうけど
0834名前は開発中のものです。2014/12/11(木) 21:50:30.14ID:jqIw6zJe
日本で汎用のゲームエンジンってソシャゲくらいしか思いつかんな
海外だとアンリアルエンジンで作った大型タイトルあるぽいんだが

http://ja.m.wikipedia.org/wiki/Unreal_Engineを採用したゲームソフト一覧
0835名前は開発中のものです。2014/12/11(木) 22:59:37.83ID:aRGwjS4y
汎用ってゲームジャンルに対しての汎用じゃなくて、
いろんなユーザ(団体)が利用できるという意味での汎用?

エロゲやアマチュアまで含めれば、テキストゲーム系エンジンやツクール等も結構多そうだが。
0836名前は開発中のものです。2014/12/11(木) 23:14:39.27ID:jqIw6zJe
ライセンス販売してるようなゲームエンジン
UnityとUE位しか知らんけど
2Dもこういうエンジンってなんかあるんかな
0837名前は開発中のものです。2014/12/11(木) 23:22:19.61ID:FC/EOQl8
>>836
・・・

cocos2d-x
http://peace.2ch.net/test/read.cgi/gamedev/1390136237/
0838名前は開発中のものです。2014/12/11(木) 23:43:01.37ID:jqIw6zJe
cocosはエンジンじゃなくてフレームワークだし
ソシャゲではよく使われてるみたいだけど
0839名前は開発中のものです。2014/12/12(金) 00:23:08.10ID:QnblLndC
開発エンジン単体では潰しがきかなくても
いろんな開発エンジンを次々使いこなせるだけの柔軟さと適応力は充分潰しが利くと言えると思う。
0840名前は開発中のものです。2014/12/12(金) 02:25:38.84ID:bDxMroSG
それだけの適応力があるならそれ使って言語習得した方が早そうだ
独自仕様のゲーム作るなら特に
0841名前は開発中のものです。2014/12/12(金) 07:21:28.86ID:o+Ocs+h7
エンジン使うのと作るのとじゃ大違いでしょ
エンジン使いこなせるって言ってもエディタ使って効率的に作れるだけでプログラマとしてはスクリプタレベルよ
0842名前は開発中のものです。2014/12/12(金) 12:34:20.78ID:wXPiKRYS
潰しが効くって何について言ってるんだ?

何でも自前で作るのが良いとは限らないだろ
0843名前は開発中のものです。2014/12/12(金) 13:11:01.77ID:so0Qz3P5
そもそもゲームエンジン使ったからといって中のコードに触れない訳じゃないし。
何でもかんでも自分で書いて糞のようなコード量産するより、広く使われているゲームエンジンの良い設計のコードに触れる方が為になる。
0844名前は開発中のものです。2014/12/12(金) 13:27:08.97ID:evwzVpBf
まぁ、デキは別にして、自分でスクラッチで書いたところが多いほど達成感も大きいw
0845名前は開発中のものです。2014/12/12(金) 16:01:25.41ID:v/KVbnR1
Unityって物理演算とかナビメッシュとかあるけど、あれってC++でも出来るの?
0846名前は開発中のものです。2014/12/12(金) 17:38:37.97ID:cemAAiyO
>>845
できますん
0847名前は開発中のものです。2014/12/12(金) 18:39:21.32ID:ntY+D6GU
他人のコードに任せっぱだと、複雑なデータ構造とか作れなくね?
0848名前は開発中のものです。2014/12/12(金) 19:46:05.18ID:KvfRzLEl
俺は作る必要ないんで
0849名前は開発中のものです。2014/12/12(金) 20:17:56.66ID:6Y7Yxnc1
凡百の人間で終わりたくないな、俺は
0850名前は開発中のものです。2014/12/12(金) 20:19:28.11ID:evwzVpBf
俺も。
0851名前は開発中のものです。2014/12/12(金) 20:48:58.45ID:s0rRP3Zy
他人に読めるコードは書いてねw
0852名前は開発中のものです。2014/12/12(金) 21:30:09.86ID:EW3P8d8T
可読性が低すぎて自分にすら読めないコードには、
そこらのサイトに書いてある簡単なテンプレコードほどの価値もないからな…
0853名前は開発中のものです。2014/12/12(金) 21:41:45.52ID:KfzBrrjx
まあ他人に読ませる必要がなければ好きにすればいいでしょ
自分で読めないのは論外だけど
0854名前は開発中のものです。2014/12/12(金) 22:33:35.88ID:evwzVpBf
一ヶ月後の自分は他人と同じ
0855名前は開発中のものです。2014/12/12(金) 23:05:56.51ID:KfzBrrjx
ならその一ヶ月後の自分用に読めるコーディングにするべきだな
いずれにしても自分で読む気も起きないようなコードはただのゴミ
0856名前は開発中のものです。2014/12/12(金) 23:44:33.51ID:b4Xh27MQ
良い設計のライブラリに触れる事は自分がライブラリ書くときの糧になるだろ?それと同じ事だよ。

そのライブラリを深く理解する事がないとか、ライブラリになるようなものを書くことがないというのであれば、それだけの資質だったということ
0857名前は開発中のものです。2014/12/12(金) 23:59:52.22ID:EW3P8d8T
C++使ってる人でライブラリを使わない人なんてこの世にいるのか?
よほど天才的なプログラミングの素質でもなければソフト作りのはるか手前で地面に転がるぞ

っつーか、ライブラリ製作自体がソフト製作に近いし
0858名前は開発中のものです。2014/12/13(土) 06:34:13.77ID:/sKItXqV
フルスクラッチ派と流用派の言い争いか
まあ、適材適所じゃね?

今更ゲーム製作でデータ圧縮や暗号化、組み込みスクリプトのコードを書く奴は滅多にいないだろ
書いたけどな、俺は、スクリプトを

けど、ゲーム製作での一番のキモは独創性だろ
そんな所は自分で書くしか方法が無いんだよ!

独創性の無い、ありふれたゲームを作りたいなら、好きに流用すればいいさ
0859名前は開発中のものです。2014/12/13(土) 10:06:03.65ID:KmIl68fQ
読めるコードを書く能力より、
どんなコードでも読める能力の方がいい。
0860名前は開発中のものです。2014/12/13(土) 10:33:09.68ID:GVgS9kEW
>>859
読めるコード書けないとチーム開発で役に立たないじゃん
リバースエンジニアリング専門でやんの
0861名前は開発中のものです。2014/12/13(土) 11:10:08.60ID:vJXa5IWH
このスレ、プログラマーが複数人開発の環境の人、居るの??
0862名前は開発中のものです。2014/12/13(土) 11:19:10.70ID:KmIl68fQ
読める具合が数値化できればいいのだけど。
何書いても読めない人はいるわけで。
0863名前は開発中のものです。2014/12/13(土) 11:28:25.00ID:A651+XDE
>>858
すげーな。
実力派だな。

やっぱ自分で書くのが一番気持ちいいな。
基本的には一人で全部組んでるな。
生産性は別にしてw
0864名前は開発中のものです。2014/12/13(土) 11:46:26.04ID:OLxz298b
ダーティーなコードを読む能力ついでにクリーンコードに書き直す能力もあった方がいいな

まあlint通してからやれば比較的楽だが
0865名前は開発中のものです。2014/12/13(土) 12:02:01.67ID:cTfiogfq
enum(エナム)
struct(ストラクト)
const(コンスト)
yield(イヨールド)
extern(エクスターン)
explicit(エクスプリクト)
sizeof(サイズオフ)
0866名無しさん@そうだ選挙に行こう2014/12/13(土) 12:42:15.70ID:GVgS9kEW
enumえにゅうむ
yieldいーるど
exturnいくすたーん
explicitいくすぷりしっと
sizeofさいずおぶ
0867名無しさん@そうだ選挙に行こう2014/12/13(土) 12:46:53.80ID:YQCx+6st
×exturn
○extern
0868名無しさん@そうだ選挙に行こう2014/12/13(土) 12:47:23.37ID:GVgS9kEW
oh misstake
0869名無しさん@そうだ選挙に行こう2014/12/13(土) 12:47:27.98ID:vmsxYpAR
いや読むってのは音読することじゃないから
0870名無しさん@そうだ選挙に行こう2014/12/13(土) 13:34:00.06ID:cTfiogfq
「ある画像が透明になりきったら、画面を別の画面に遷移する」という処理をしたいんですけど
その「ある画像」の不透明度に依存して画面遷移を操作してもいいんでしょうか?

・その画像の不透明度は他で操作されない
・SetOpacityの内部で0以下255以上の数値はそれぞれ最小値最大値に正規化される
という環境であるものの、減少し続ける値を等価演算子で比較したりするのは、ゲームを作り慣れてる人から見るとどうなのかなと

それに、画面に複数ある内の1つのパーツでしかない画像に画面が依存するのはオブジェクト指向?的にはどうなんでしょうか?

Scene::update(){
if(image->GetOpacity() == 0){
//遷移する
}else{
image->SetOpacity(image->GetOpacity()-15);
}
}
0871名無しさん@そうだ選挙に行こう2014/12/13(土) 13:39:12.16ID:A651+XDE
>>870
透明度を直接評価するんじゃなくて、
もう少し抽象的に、遷移準備完了状態、みたいなものを評価したら汎用的じゃない?
0872名無しさん@そうだ選挙に行こう2014/12/13(土) 13:54:47.72ID:cTfiogfq
>>871
こんな?感じでしょうか
違和感すっきりしたんでこれでやってみます、ありがとう

Scene::update(){
 if(image->GetOpacity() == 0){
  transitionFlag = true;
 }else{
  image->SetOpacity(image->GetOpacity()-15);
 }
 if(transitionFlag){
  //遷移
 }
}
■ このスレッドは過去ログ倉庫に格納されています