C/C++ゲーム製作総合スレッド Part4
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2013/08/12(月) NY:AN:NY.ANID:RPqvnGkC元スレ
DXライブラリ 総合スレッド その12
http://toro.2ch.net/test/read.cgi/gamedev/1330000532/
前スレ
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/
0002名前は開発中のものです。
2013/08/13(火) NY:AN:NY.ANID:dWEShqRVゲームの解像度を640×480から1280×720に変更したら、画面が広い広い。
0003名前は開発中のものです。
2013/08/13(火) NY:AN:NY.ANID:k1Y9Y3rO0004名前は開発中のものです。
2013/08/13(火) NY:AN:NY.ANID:fLH/yZWa0005名前は開発中のものです。
2013/08/13(火) NY:AN:NY.ANID:m+NIrzIz(*vectorArrayp).Size() //ださい
(*vectorArrayp)[i]->GetHoge //ださい
↑こんなんでなく↓こんな感じで2行目の方法がよくわから
vectorArrayp->Size() //かっこいい
vectorArrayp->[i]//???
0006名前は開発中のものです。
2013/08/14(水) NY:AN:NY.ANID:g36cvXmF上と下、意味変わってると思うんだが
0007名前は開発中のものです。
2013/08/14(水) NY:AN:NY.ANID:8aN6DN7uvectorArrayp->at(i)->GetHoge
あまりかっこよくはないが
0008名前は開発中のものです。
2013/08/14(水) NY:AN:NY.ANID:ULHwdd5m0009名前は開発中のものです。
2013/08/14(水) NY:AN:NY.ANID:9Rrnxhxadefineかtypedefで何とかならんか?
0010名前は開発中のものです。
2013/08/14(水) NY:AN:NY.ANID:rLvoelLt0011名前は開発中のものです。
2013/08/14(水) NY:AN:NY.ANID:UHvAELVlちょっときもちわるいな
0012名前は開発中のものです。
2013/08/14(水) NY:AN:NY.ANID:ZjClrTFk0013名前は開発中のものです。
2013/08/14(水) NY:AN:NY.ANID:NfZZMLnz標準ライブラリを使うのは標準化を指向してるからだろ?
なら美醜の感覚(主観)を抑えた方がいいんじゃないかな
初心者の内から美意識に拘るのはハマり道の入り口だし
0014名前は開発中のものです。
2013/08/14(水) NY:AN:NY.ANID:yn1/xvWn接触した相手を、接触判定クラスから通知する感じでvectorに突っ込んでるんですけどダメですかね・・・
0015名前は開発中のものです。
2013/08/15(木) NY:AN:NY.ANID:+l1ww1wuインスタンスの管理もしたいし。
だから、vectorを直接渡すってのは殆ど無い。
0016名前は開発中のものです。
2013/08/15(木) NY:AN:NY.ANID:spGuGn/Tクエリー結果のリスト(←線形リストではなく広義のリストね)を返す的な感じ?
非公開の(内部的な)やり取りならクエリー結果のリストを生のコンテナ(vector)で
ポンと渡すってのはアリじゃね?お互い身内同士だから結合度高くてオーケー。
お互いよく知らんもの同士、実装(リストがどんなコンテナに入れられてるか)を
知らない相手なら結合度を低めだから、vectorを仲介クラスにコンポジションするかな。
多分それが>>15の話かな
0017>>14
2013/08/15(木) NY:AN:NY.ANID:rZIVXUnn具体的に言うと
キャラクタクラスが個々で持ってる、接触した相手のvector配列があってそれに通知と称して相手を渡してます。
で、キャラクターは更新時に通知を見て自分が何にあたったかをその場で判断してリアクションを取ります。
class CCharacter{
vector<CCharacter*> PendingCollisionList;
}
class CollisionObjectList{
vector<CCharacter*> List;
void Judge(){
for(size_t i=0;i<List.size();i++){
for(size_t t=i;t<List.size();t++){
if(接触判定){
List[i]->PendingCollisionList.push_back(List[t]);
List[t]->PendingCollisionList.push_back(List[i]);
}
}
}
}
}
}
0018>>14
2013/08/15(木) NY:AN:NY.ANID:rZIVXUnn0019名前は開発中のものです。
2013/08/16(金) NY:AN:NY.ANID:5WkUq5kH0020>>14
2013/08/16(金) NY:AN:NY.ANID:XoAPOpvMvoid Judge(vector<CCharacter*>* PendingCollisionList){
for(size_t i=0;i<List.size();i++){
if(接触判定){
(*PendingCollisionList).push_back(List[t]);
}
}
}
0021名前は開発中のものです。
2013/08/16(金) NY:AN:NY.ANID:XY5uXwnOなぜ参照渡ししないのか??
変数・巻数の命名もなんかちょっとねえ・・・Judge?
それに、クラスのメンバ変数だけかと思ったらローカル変数まで先頭大文字だな
0022名前は開発中のものです。
2013/08/16(金) NY:AN:NY.ANID:DoWkm/giそこにケチつけるのは間違ってる
0023名前は開発中のものです。
2013/08/16(金) NY:AN:NY.ANID:kN35STo7push_back呼び出し毎でないにしろ、結構な頻度でメモリ確保する事になるし。
自分なら、最初からキャラクタ最大数分確保しておく。
で、本題だけど、vector<CCharacter*>を直接渡すんじゃなくて
vectorの入ったCCharacterListみたいなクラスを作ってそれをポインタなり参照なりで渡す。
それが>>12-15あたりで出てる話でないの?
0024名前は開発中のものです。
2013/08/16(金) NY:AN:NY.ANID:NCVPitu3システム全体のベンチマークを取ると誤差程度も違いが出ない。
何となく時間がかかりそうだと、測定もせずに言い出す馬鹿が毎度涌くのは勘弁して欲しい。
0025名前は開発中のものです。
2013/08/16(金) NY:AN:NY.ANID:bQG86Wce002623
2013/08/16(金) NY:AN:NY.ANID:kN35STo7vector<int>でpush_back()100回後、clear()。このセットを10,000回 -> 432ms
malloc()で4byte確保、直後free()。このセットを1,000,000回 -> 1785ms
開発中はデバッグモードでもコード走らせるし、
mallocの1/4程度じゃちょっと無視する気持ちになれないなぁ。
全てのキャラクター同士の衝突判定をすれば、階乗的に処理数が増えるし。
もちろんキャラクター数にもよるけどね。
やっぱり安全策をとって予め確保しておくことにするよ。
0027名前は開発中のものです。
2013/08/16(金) NY:AN:NY.ANID:NCVPitu3システム全体では測定不能な誤差に埋もれるレベルにしかならないという話をしているのに、
全然違うことをしている上にDebugで測定。
Releaseではご満足な結果が出なかったから仕方なかったんだろうけどさ。
メモリ確保が遅いとか吹聴するのは、毎度毎度こういうどうしようも無いクズばっかりだよ。
0028名前は開発中のものです。
2013/08/16(金) NY:AN:NY.ANID:+iyY2v4K1)自分では実際に計測せずに人のやり方にケチつけるだけ。
2)誤差の範疇かどうかは当人が決める事。
0029名前は開発中のものです。
2013/08/16(金) NY:AN:NY.ANID:XY5uXwnO0030名前は開発中のものです。
2013/08/16(金) NY:AN:NY.ANID:NCVPitu3出ないみたいだからもう一つ突っ込んでおくよ。
std::vectorでclear呼んでもメモリは解放されない。
つまり別のところで時間を食ってるだけ。
あまりにお粗末すぎないか?
0031名前は開発中のものです。
2013/08/16(金) NY:AN:NY.ANID:XY5uXwnO003223
2013/08/16(金) NY:AN:NY.ANID:kN35STo7らしいので計測。懐疑主義者がいるようなのでリリースモードでも計測。
新しく生成されたvector<int>でpush_back()100回。
このセットを10,000回 -> 1209ms(デバッグ) , 462ms(リリース)
因みに予め確保したvectorに0を1,000,000回代入 -> 94ms(デバッグ), 2ms(リリース)
うーん、都度のメモリ確保はやっぱり重いよ。
ID:NCVPitu3はこの質問スレで>>14をスルーして私のコーディングにしか興味が無いようだけど。
2chらしい煽り文句を着飾って私に何を言いたいの?
■ このスレッドは過去ログ倉庫に格納されています