トップページgamedev
1001コメント353KB

C/C++ゲーム製作総合スレッド Part4

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2013/08/12(月) NY:AN:NY.ANID:RPqvnGkC
ゲーム製作におけるC/C++全般に関するスレです。

元スレ
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/
0077名前は開発中のものです。2013/08/17(土) NY:AN:NY.ANID:N+ythJ4K
>>75
t = timeGetTime();
for(j=0;j<100000;j++)
{
std::vector<void*> v;
for(i=0;i<100;i++){ v.push_back(malloc(100)); free(v[i]); }
//for(i=0;i<100;i++){ free(0); }
}
printf("%d\n",timeGetTime()-t);

t = timeGetTime();
for(j=0;j<100000;j++)
{
std::vector<void*> v;
for(i=0;i<100;i++){ v.push_back(malloc(100)); }
for(i=0;i<100;i++){ free(v[i]); }
}
printf("%d\n",timeGetTime()-t);

コメントあり
1082
1327
コメントなし
1120
1334

リリースモード、最適化・全体の最適化なしで。
コメントを外した場合、上のほうがfree(0);のコスト分だけ上乗せされるが、
実際はそれでも勝ってる。この結果はどうする?
0078名前は開発中のものです。2013/08/17(土) NY:AN:NY.ANID:N+ythJ4K
>>76
んな妙なCPU対策しないで、倍率可変切れよ。ブレまくるだろ。
0079名前は開発中のものです。2013/08/18(日) NY:AN:NY.ANID:JMyzqe1I
>>76

>>77のソースのコメントを外し、1番目と二番目を入れ替え、間にさらに10倍した
std::vector<void*> v2;
for(i=0;i<100000;i++) v2.push_back(malloc(100));
を挿入しても
1344
1133
という結果で、多くても誤差範囲だったぞ。

>事前にデータが確保されている数が多いほど、探索に時間がかかる。
いや、stlの2倍ずつ増やすという例はあるが、いくらなんでもそういうアホな実装はしてないだろ・・・
0080名前は開発中のものです。2013/08/18(日) NY:AN:NY.ANID:3VI/UU3t
>>65
たった100程度の配列でも、1ループに付き13回の全要素コピーと、40もの余分な領域が生じるというのに、
実測現れないという曖昧な理由でこれを無視出来るあなたは、ゲームプログラムから手を引くべきだと本気で思います。
0081名前は開発中のものです。2013/08/18(日) NY:AN:NY.ANID:JYvbxHoe
まだやってるのか・・好きに組めばいいでしょ
第一スレチなんで他でやってよ
0082名前は開発中のものです。2013/08/18(日) NY:AN:NY.ANID:+ZBVAlmg
>>77
ループの中のコードを変えたらまともに測定出来ないから、
ループの中身をいじらない>>76の検証用のソースを用意したんだが。
まずはその結果に対する反証や、やり方がおかしいという意見は無いのか?
0083名前は開発中のものです。2013/08/18(日) NY:AN:NY.ANID:PzCLOwMa
モチツケ(・∀・)
0084名前は開発中のものです。2013/08/18(日) NY:AN:NY.ANID:JMyzqe1I
>>82
ソースはそのまま、リリース、最適化・全体の最適化ON
事前確保なし 7466
事前確保あり 7187
下二桁はぶれるが数十回測ってもだいたいこんなもん。
事前確保ありのほうが何故か速いが、逆に俺の援護になっちまったんじゃないのか?
0085名前は開発中のものです。2013/08/18(日) NY:AN:NY.ANID:YlvB6n+h
すごいスレがのびてるとおもってたどって見たら俺のレスが起因だった
0086名前は開発中のものです。2013/08/18(日) NY:AN:NY.ANID:7ElO2ftx
>>70

私はこの議論を楽しく読ませてもらってる。
以前にもnew/deleteのコストの議論があったと思うが、あれも面白かった。同じ人かどうかは知らないが。
しかし

>無いものを無いと証明するのは悪魔の証明で不可能だ。

これは間違ってるのでつっこんでおく。ネット上ではこの勘違いがとても多いんだ。
たとえば、「最大の素数」が存在しないことは証明されている。あるいはアリバイというのは「犯行可能な時刻に、犯行可能な場所に存在しなかった証明」に他ならない。
その他諸々、非存在の証明なんて普通にある。
「悪魔の証明」というのは「非存在証明の方が手続きがめんどくさいんだから、存在を確信できる人がいるなら、その確信できる理由を挙げてもらった方が話が早い」という程度の意味だ。
0087名前は開発中のものです。2013/08/18(日) NY:AN:NY.ANID:RA3uDiJA
>>76
探索ってのはアロケートの空き領域探しの事?
そうなら断片化させまくったらメモリ確保の速度が低下する可能性が微レ存?
0088名前は開発中のものです。2013/08/18(日) NY:AN:NY.ANID:+ZBVAlmg
>>84
ではこれでどう?
プロセスの優先順位の調整と、回数ごとの揺らぎが分かるように変更。

#include <Windows.h>
#include <stdio.h>
#include <vector>

#pragma comment (lib, "winmm.lib")
int main()
{
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
timeBeginPeriod(1);
int i,j,k;
for(i=0;i<10000;i++) malloc(1000);

for(k=0;k<10;k++)
{
DWORD t = timeGetTime();
for(j=0;j<10000;j++)
{
std::vector<void*> v;
for(i=0;i<10000;i++){ v.push_back(malloc(100));free(v[i]); }
}
printf("%d:%d\n",k,timeGetTime()-t);
}
return 0;
}
0089名前は開発中のものです。2013/08/18(日) NY:AN:NY.ANID:+ZBVAlmg
ちなみに私の環境の結果。
これで環境ごとに結果が逆転するようなら、私の力量では測定用のコードは書けない。
mallocに無駄がなさ過ぎる。

・ダミーメモリ無し
0:5882
1:5639
2:5639
3:5643
4:5621
5:5619
6:5637
7:5628
8:5641
9:5637
・ダミーメモリ有り
0:5770
1:5746
2:5745
3:5736
4:5746
5:5738
6:5749
7:5749
8:5727
9:5731
0090名前は開発中のものです。2013/08/18(日) NY:AN:NY.ANID:JMyzqe1I
>>88
ソースはそのまま、リリース、最適化・全体の最適化ON
・ダミーメモリ無し
0:7833
1:7758
2:7827
3:7884
4:7803
5:7847
6:7854
7:7888
8:7839
9:7809
・ダミーメモリ有り
0:7503
1:7503
2:7500
3:7501
4:7501
5:7501
6:7501
7:7500
8:7502
9:7507

逆転する。が、メモリ確保したほうがえらい安定してる。
そうなると単純にキャッシュの問題ではないような気もする。
キャッシュから引いてるなら差は出ないはずだから。
0091名前は開発中のものです。2013/08/18(日) NY:AN:NY.ANID:hkaGqM4N
おい
Windowsには解放されたメモリ領域をキャッシュする機能はあるって
新しくメモリを確保する時も、以前に同じサイズの領域を確保していたら、そいつとアドレスが入れ替わるとかよくある

reallocでサイズを変更した時は、メモリブロックを移動する必要がある時のみコピーが行われるんだって!常にコピーされるとみなしてコストを計算するのは誤り

お前のプログラムはメモリ確保だけで出来てるのかよw
上限の確実に分かるような配列のみreserve
上限が分からなくとも、頻繁に使う配列はメモリを解放せずサイズを0にして再利用

これで十分だろ気にしすぎ
0092名前は開発中のものです。2013/08/18(日) NY:AN:NY.ANID:YlvB6n+h
初心者だからわからないんだけど
vectorに一度1000回push_backしたあとclearして
もう一度1000回push_backした時ってすでにメモリが確保されてるから速くなるんだよね?

じゃあゲームで
毎フレームclearしてからオブジェクトをpush_backしまくる設計でも
じきに負荷が軽くなってくんじゃないの?
0093名前は開発中のものです。2013/08/18(日) NY:AN:NY.ANID:hkaGqM4N
>>92
うん

何処かに取っておけば解放されず消えない
0094名前は開発中のものです。2013/08/18(日) NY:AN:NY.ANID:JMyzqe1I
>>91
ごもっとも。俺としてはなんらかのキャッシュがあるというのが真実ならそれでOK。

>>92
なるよ。1000回push_backするとき実装によるが、たしか倍々でreallocするので
拡張できるときは>>91の言うようにコピーのコストはかからない。
最後に無駄なメモリを確保してしまうが、それ以外はreserveを最初にしたのと変わらないよ.。

ただし、push_backするのがintなどならいいが、内部でnewを伴うものを入れるときのコストは結構でかいので
ポインタで持つとか工夫が必要。
0095名前は開発中のものです。2013/08/18(日) NY:AN:NY.ANID:JMyzqe1I
補足で。
>内部でnewを伴うものを入れるときのコストは結構でかい
ID:+ZBVAlmgに言わせると、誤差範囲なので気にするなと言うだろうw
多少の速度を犠牲にしてもコードの読みやすさを重視するなら選択の一つとしても別に悪くない。

俺の場合はオブジェクトプールを作って、newのオーバーロードで毎フレーム生成してる事が多い。
これなら可読性を損なわず高速化できるし、生newとの比較も簡単にできるしリーク検出にも使えるし
0096名前は開発中のものです。2013/08/18(日) NY:AN:NY.ANID:YlvB6n+h
オブジェクトをそのままいれるようなことはしないよ

たぶん


あと、クラスのコンストラクタで、シングルトンデザインの管理クラスに自身を登録するって設計は、他人からみてわかりやすい?
はたからみると
new CKurasu();
とだけ一行で収められててわかりにくかったりする?
0097名前は開発中のものです。2013/08/18(日) NY:AN:NY.ANID:JMyzqe1I
コメントがしっかりしてればわかるだろうけど、
コンストラクタまで見ないと何をやってるかわからないというのは、こう、ねぇ?
0098名前は開発中のものです。2013/08/18(日) NY:AN:NY.ANID:RUTCCsLR
外部仕様と例外処理がしっかりしてれば中身なんてどうでもいい
使うのに中身見ないといけなくてしかもクラス間の依存性高かったら舌打ちするかもしれん
0099名前は開発中のものです。2013/08/19(月) NY:AN:NY.ANID:QbLSnPSI
>>98
それもそうか
でもクラス間依存が少ないクラス設計ってどういうの?
テンプレート使うとか?
0100名前は開発中のものです。2013/08/19(月) NY:AN:NY.ANID:O9c9TTgh
クラスひとつが1機能で完結してるってのが理想だけどそれは無理だと思うから
とりあえず相互参照とかfriendなければいいんでない
ひとつのクラス読み解くのに芋づる式に謎のクラスが出てくるとうんざりする
0101名前は開発中のものです。2013/08/20(火) NY:AN:NY.ANID:RYMPR0Rz
ソース管理システム使ってると
小機能の修正なのに多数のソースにまたがる変更を見せられたりして
気分が悪い
0102名前は開発中のものです。2013/08/20(火) NY:AN:NY.ANID:nwPlQ760
現場ではよくあること
0103名前は開発中のものです。2013/08/20(火) NY:AN:NY.ANID:t4onr7Y1
便利なはずの手段が逆に不便の原因になってるってヤツですか。
0104名前は開発中のものです。2013/08/24(土) NY:AN:NY.ANID:wMH6siS/
ロールとピッチで操作する戦闘機のゲームを作ってるんですが、AIの部分で
「あの座標に向かいたい!」ってなった時、どうしたらいいでしょうか?
うまくいかなくて困っています。

1.ワールド座標で、目的地 - 現在地でベクトルを取得する
2.現在の戦闘機の回転をそのベクトルに適用し、戦闘機から見た座標にする
3.座標を見てyが+だったらピッチアップして、yが-だったらピッチダウンするとかで、目標の方向に向く
4.後は適当に前進してれば目標に近づく

って感じなのですが、理屈が間違ってるのか、うまくいきません。
特に2番あたりで、思った通りのベクトルが出なくて・・・
0105名前は開発中のものです。2013/08/25(日) NY:AN:NY.ANID:pdKwtLJh
1〜2だけだけど、
戦闘機の位置と回転を適用した「戦闘機ローカル座標系をワールド座標系に変換する行列」を用意して、
その逆行列で「ワールド座標系での目的地座標」をトランスフォームしてやれば、
「戦闘機ローカル座標系で見た目的地の座標」が得られる。
0106名前は開発中のものです。2013/08/25(日) NY:AN:NY.ANID:wOoNNvxi
それって
ワールド座標系の座標を戦闘機ローカル座標系に変換する行列とは違うものなのですか?

座標系っていうほど大層なものは用意してなくて、戦闘機の正面と右と上の軸しかもってないんですが・・・
0107名前は開発中のものです。2013/08/25(日) NY:AN:NY.ANID:wOoNNvxi
あれ、なんかたしかにAIがしっかり期待通り動くんですけど
方向を画面に描画してみたら適当な所を指してるような・・・
0108名前は開発中のものです。2013/08/25(日) NY:AN:NY.ANID:xVpT/5Kv
くっだらない話で悪いんだけどさ。
atan2()で返ってくるラジアンを見て、いくつかのラジアンだけ特別な処理に回したい。
で、今のところあるラジアンと==チェックをしてるんだけど、やっぱりときどき誤差が出て==チェックがfalseになってしまうらしい。
すこし幅を持たせればいいと思うんだけど、こういう時の誤差ってどのくらい取ってる?
0109名前は開発中のものです。2013/08/25(日) NY:AN:NY.ANID:YgD7yi63
>>108
どのくらいってのはその時によるからあれだけど、そもそも1ラジアンって 180.0/PI だから少なくとも == で結ぶような判定はしないなww

なので幅持たせたかったら… 例えば 4倍くらいして切り捨てた値と比較とか?
この場合、円が90ステップで等分割されてる荒さでの比較になるけど。
0110名前は開発中のものです。2013/08/25(日) NY:AN:NY.ANID:xVpT/5Kv
今回は
const double angle1 = atan2(35.0,69.0);
みたいにいくつかのラジアンを定数で持たせてるんだ。
たぶんいくら小数型に誤差が出ると言っても、atan2(35.0,69.0)自体はいつも同じ答えを出してくれるんだと思ってる。
でも、atan2(35.0*n,69.0*n)の場合はそうとも言いきれないらしい。
こういう場合、どのくらい幅を持って判定したら安心できるかなって。
0111名前は開発中のものです。2013/08/25(日) NY:AN:NY.ANID:6EDsqIe0
ソフトウェアの仕様による
0112名前は開発中のものです。2013/08/25(日) NY:AN:NY.ANID:iRMPnQ6N
より良い浮動小数点の等値比較
http://cppdiary.blog76.fc2.com/blog-entry-33.html
0113名前は開発中のものです。2013/08/25(日) NY:AN:NY.ANID:WJdUU9CG
角度を点で判定することが稀な気がする
まあ小数点以下四桁くらいで切っとけば問題なく動くんじゃない?
根拠はないけど
0114名前は開発中のものです。2013/08/25(日) NY:AN:NY.ANID:6O/ZQu5d
一旦スパッと決め打ちして後で調節するのがいいと思う


たとえば、その角度が
2Dのシューティングゲームで敵が弾を撃つ方向を表している
と仮定する

角度が1度(π/180ラジアン)ずれた2発の弾の方向の差は
100ドット弾が進んだあたりで1〜2ドット変わるぐらい
( sin(π/180) * 100 ≒ 1.745)

この精度が「荒すぎ」か「細かすぎ」かは、ゲームの仕様とか
作りたいものによって変わると思う
0115名前は開発中のものです。2013/08/25(日) NY:AN:NY.ANID:xVpT/5Kv
>>112

詳しい解説のサイトをありがとう。
ただ、私では理解できなかった・・・。
もうちょっとゆっくり調べてみる。

もっとこう、だいたいこのくらい幅取ればおk、みたいなのがあるかと思ってたら、そうでもないのね。
とりあえず、0.0000000001の幅を持たせて判定させてみた。今のところはうまく動いてる。
0116名前は開発中のものです。2013/08/25(日) NY:AN:NY.ANID:wOoNNvxi
男だったらdoubleの精度限界まで突き詰めるだろ誤差はしらん
0117名前は開発中のものです。2013/08/25(日) NY:AN:NY.ANID:uNfr7MwE
>>115
> もっとこう、だいたいこのくらい幅取ればおk、みたいなのがあるかと思ってたら、そうでもないのね。
あぁ?んなもんねぇよ

> とりあえず、0.0000000001の幅を持たせて判定させてみた。今のところはうまく動いてる。
じゃそれで良いだろ
0118名前は開発中のものです。2013/08/26(月) NY:AN:NY.ANID:5A5RjECE
FLT_EPSILONは?
0119名前は開発中のものです。2013/08/26(月) NY:AN:NY.ANID:UoSBP/+o
規制が解けたの遅レス

>>106
> 座標系っていうほど大層なものは用意してなくて、
> 戦闘機の正面と右と上の軸しかもってないんですが・・・
この3軸を表すベクトルが90度ずつの角度になっていて、
更に正規化されていれば
ローカル座標系としてそのまま変換行列にぶち込めるはず。
(2軸を正規化してから外積出せば良いと思うけど)
0120名前は開発中のものです。2013/08/27(火) NY:AN:NY.ANID:cKzbC9XZ
ここのfor( int i=0; i<256; i++ )の256の意味がよくわからないので説明していただけないでしょうか

int gpUpdateKey(){
char tmpKey[256]; // 現在のキーの入力状態を格納する
GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る
for( int i=0; i<256; i++ ){
if( tmpKey[i] ==1 ){ // i番のキーコードに対応するキーが押されていたら
Key[i]++; // 加算
} else { // 押されていなければ
Key[i] = 0; // 0にする
}
}
return 0;
}
0121名前は開発中のものです。2013/08/27(火) NY:AN:NY.ANID:s3+G3AjF
仮想キーコードの総数
http://msdn.microsoft.com/ja-jp/library/cc364674.aspx
0122名前は開発中のものです。2013/08/27(火) NY:AN:NY.ANID:ayKx516L
SetUseDirectInputFlag を true にしたら GetHitKeyStateAll
の挙動って変わる?
false と true で変わったように見えんのだけども
0123名前は開発中のものです。2013/08/28(水) NY:AN:NY.ANID:TJ9nn0/Q
>>121
ありがとうございます
もうちょっと聞きたいんですがDXライブラリスレに行くべき内容なので
そこで聞いてきます
0124名前は開発中のものです。2013/08/29(木) NY:AN:NY.ANID:hPTXRtdt
DirectInputはキーボード・マウス入力には使うなとMSが
0125名前は開発中のものです。2013/08/31(土) NY:AN:NY.ANID:zhbGtGaN
ソース
0126名前は開発中のものです。2013/08/31(土) NY:AN:NY.ANID:JzQWrW3K
ウィキペディ
0127名前は開発中のものです。2013/09/02(月) 15:07:32.19ID:YyXi6Lo9
>>116
女だろ
0128名前は開発中のものです。2013/09/02(月) 23:18:46.94ID:74coNmUx
>>125
http://msdn.microsoft.com/ja-jp/library/ee416842(v=VS.85).aspx
0129名前は開発中のものです。2013/09/07(土) 11:56:42.05ID:jTDeFVwh
OpenGL使ってるライブラリって2Dばっかりで、3D使うときはOpenGLの関数を
使ってねテヘみたいなやつが多いから、テクスチャ1枚用意するのも大変なんだけど
DXライブラリみたいな3D関数が用意されたOpenGLのライブラリってないのかな
0130名前は開発中のものです。2013/09/07(土) 12:48:57.70ID:htv4gya2
>>129
昔からあるSDLでもダメって話か?
てかテクスチャのローダなんてそんな大変だと思えないが
0131名前は開発中のものです。2013/09/08(日) 11:57:30.99ID:gfgc7Fmm
ライブラリというかフレームワークならいくつかあるでしょ。
0132名前は開発中のものです。2013/09/09(月) 17:00:18.03ID:xAOmQIfg
>>130
SDLは、2Dですら画像を回転させようと思ったら
OpenGLの関数使って初期設定して、SDLのフォーマットで読み込んだ画像を
GLのテクスチャにフォーマットして、そのテクスチャを板ポリにUV座標指定して貼り付ける
ってところまでやらないとダメじゃない?
0133名前は開発中のものです。2013/09/09(月) 17:02:10.36ID:BMj2DFdV
SDLってハードウェア支援使ってないんじゃないの
windows版だったらただのwin32apiのラッパーなんじゃないの
0134名前は開発中のものです。2013/09/09(月) 17:13:28.09ID:/3fzHQ85
具体的な実装や割合までは知らんが、
使えるところは使うって設計思想と聞いたような。
0135名前は開発中のものです。2013/09/09(月) 19:54:26.62ID:xAOmQIfg
>>133
ライブラリのソースコードはマルチプラットフォーム対応するように書かれてるぜ
windows版ってやつはソースをwin用コンパイラでコンパイルして.dllのバイナリとして配布してるって意味だと思われ

>>134
ソース見てみると、一番最初に呼び出されるヘッダ部分で環境変数取得して、それからOSなどを判断して
defineマクロ駆使してそれぞれのmain()を書いてるっぽい(windowsならWinMain()が書かれてる)
ちなみにこの時点でDirectXが使えるならOpenGL使わずにそっちを使うようになるらしい、すごいぜ
0136名前は開発中のものです。2013/09/09(月) 23:41:39.27ID:L4c5eGnj
回転させるライブラリあったと思うけど結局面倒になってOpenGLで回す
0137名前は開発中のものです。2013/09/10(火) 10:03:39.55ID:qOJwyK2z
SDLはただのプラットホーム
あの上にライブラリ構築したら移植しやすいよっていう土台
だから色々なライブラリがあって、回転のやつとか定番のがあった

ハードウェア支援はあるぞ
0138名前は開発中のものです。2013/09/10(火) 13:25:05.04ID://nCPrx/
フレームワークとかわからないところがあると調べても欲しい情報が見つからなくてどうしても質問厨になってしまうんだけど
みんなはどうしてんの?
0139名前は開発中のものです。2013/09/10(火) 15:38:00.17ID:IuaaT7AR
そんなもんじゃね?
0140名前は開発中のものです。2013/09/10(火) 15:39:41.68ID:gIhnnlB1
フレームワークの公式フォーラムやStackOverflowで聞いたり
フレームワークのソースを見たり
0141名前は開発中のものです。2013/09/10(火) 15:56:42.08ID:PbAq3+L0
英語力が足りてないんだろう
0142名前は開発中のものです。2013/09/10(火) 21:27:09.56ID:V2/hDCSO
英語のドキュメント数日かけて読み解くくらいなら俺は質問厨になる
0143名前は開発中のものです。2013/09/10(火) 21:39:28.38ID:qOJwyK2z
せっかく掲示板があるんだから、情報共有しようぜ
0144名前は開発中のものです。2013/09/10(火) 22:11:28.28ID:FWHcqC1B
ギブアンドテイクが成り立つならな

「ファイル共有ソフト」みたいなノリで
共有って単語を使うの止めて欲しい
0145名前は開発中のものです。2013/09/10(火) 22:16:59.07ID:9XgseZ4E
2chの掲示板はまともな情報共有には向かない
どちらかというと誰かの親切なメモなり落書きなりを見に来るものだろう
0146名前は開発中のものです。2013/09/10(火) 22:33:01.91ID:IuaaT7AR
Twitterなんかよりはマシかなー?くらいだよね
0147名前は開発中のものです。2013/09/10(火) 23:01:16.73ID:1N7dl6m4
>>142
数分とか1時間じゃなくて、数日かかるのか。
それであっても質問"厨"にはならないわ
0148名前は開発中のものです。2013/09/10(火) 23:15:47.37ID:V2/hDCSO
>>147
A4のドキュメント一枚読み解くのに余裕で1〜2時間かかりますがなにか
辞書見てる時間の方が長くなる
0149名前は開発中のものです。2013/09/10(火) 23:40:07.87ID:eybXly7m
頻出単語は自然と覚えていくから、次第に短くなるだろ。
これからの人生のためにがんばれよ。
0150名前は開発中のものです。2013/09/11(水) 11:54:51.88ID:BysX3/47
それを意識しすぎるといつまで経ってもゲームが完成しない罠。
0151名前は開発中のものです。2013/09/11(水) 15:26:50.97ID:bZquC3JH
Google、Exciteなどの翻訳を使えば?
0152名前は開発中のものです。2013/09/11(水) 15:58:28.42ID:aRuN+GoD
プログラミング系は、簡単だと言われている技術系英語の中でも、さらに易しいからなあ。
それでも苦手だけどさ!
0153名前は開発中のものです。2013/09/11(水) 17:11:02.08ID:YgxYLD5F
中高生の時英語ちゃんと勉強しなかったのか?
0154名前は開発中のものです。2013/09/11(水) 17:11:28.66ID:FPOWazUR
ソースコードという共通言語があるし、よく使われる英単語は日本語ではカタカナ化してるだけだったり
するから比較的楽だよね。
0155名前は開発中のものです。2013/09/12(木) 01:37:54.02ID:OrRDW4M1
話変わるけど
OpenNIは、1から2になってI/Fがガラッと変わりやがりました。
1のサンプルを俺抽象化した時間は何だったんだー
イスラム圏ちょっとあんたらねえ

他人の俺仕様に無駄に振り回される自分の無能さが悔しい。
それはともかく情報共有の話が出たけど、
他人に振り回される側同士、手をクロスさせてお互い慰め合う・・・
・・・わけねーーーだろーー氏ねやー
0156名前は開発中のものです。2013/09/12(木) 09:03:46.94ID:YMhX5Xt0
そこは抽象化してて良かった、じゃ無いのか?
0157名前は開発中のものです。2013/09/12(木) 22:00:25.31ID:dx/Lp+eH
SDLってやつ触ってきたけど、あれ基本イベントドリブンでやらんといかんの?
DXライブラリみたいにやりたかったら、ウインドウ閉じたかどうかのイベント以外はポイポイ捨てて
キー入力は必要なときだけ呼び出せばいいんだよな
0158名前は開発中のものです。2013/09/13(金) 01:06:50.94ID:V6fOnFO4
JavaやC#やJavaScriptなんかで普通に目にするonKeyDownのようなイベントハンドラ、
OpenGLのGlutでもそう、win32の基本的なメッセージポンプ自体がそう。
そんな各種フレームワークやAPIで目にする極普通のイベントドリブン構造
0159名前は開発中のものです。2013/09/13(金) 10:11:52.47ID:1mn/tOWO
描画のループと処理のメインループを別のスレッドに分けるんだけど
描画と処理をわけるのなら描画のループだけ一秒間に60回回せばいいと思うんだけど
処理は何回回せば良いんだ?
100とかが無難なのかな、100カウントで一秒間ってすっきりするから
0160名前は開発中のものです。2013/09/13(金) 11:15:43.12ID:dnLRNGtp
>100カウントで一秒間ってすっきりするから

プログラマーの発想じゃねぇw
0161名前は開発中のものです。2013/09/13(金) 12:47:31.13ID:V6fOnFO4
普通は同期タイミングの設計によって結果的に決まるもんだよな
「何秒に一回にしたらいいんだ?」って発想じゃなくて
0162名前は開発中のものです。2013/09/13(金) 12:49:49.64ID:PBMoJzg4
>>159
それ一行目から既に「何のためにそれをやるのか」自分でよくわかってないだろ。
何だかよく分からないけど処理を分けるみたいだから真似すればきっとうまくいく
ということなら、まぁ、カーゴカルトかもな
0163名前は開発中のものです。2013/09/13(金) 15:36:03.37ID:1mn/tOWO
負荷軽量化のためじゃないの?
スレッド一つだとCPUのコア1つしか使わないから処理系ごとに分けて活用しようと思ったんだけど

他のスレッドで弄ってるリソースを参照しても大丈夫かなー?ぐらいの認識です
0164名前は開発中のものです。2013/09/13(金) 16:33:02.02ID:V6fOnFO4
基本的に大丈夫じゃないんだけど、そもそもマルチスレッド処理書いた事あるか?
同期とread/writeの保証についてちゃんと認識あるか?
その後、全体としてどういう処理の切り分けをして、どのタイミングで片方の結果をもう一方が拾うのか、とか
0165名前は開発中のものです。2013/09/13(金) 16:45:42.76ID:V6fOnFO4
ちなみに、JavaやC#だとsynchronizedやlock使ったマルチスレッド時の同期化タイミングを作れたり色々と簡素化する手段はあるけど、
基本的にC/C++はそれらをわかった上で自分で実装するので(と言っても意味わかってれば仕掛けだけなら屁でもないが)、
その辺の認識ちゃんと染み込んでるのかなと思った。

C/C++だとboost::thread使うとずいぶん簡素になるが、コードが簡素になっても動きわかってないとおかしな事になる
0166名前は開発中のものです。2013/09/13(金) 18:20:45.10ID:UxRsVe6Y
iphoneやandroidでは描画スレッドを分けるのが標準になってるんで
マルチスレッドの知識がなくても使わざるを得ないという事情もある
なので>>159は別に背伸びしてスレッド分けしようとしているというわけでもないと思うよ
0167名前は開発中のものです。2013/09/13(金) 21:01:10.73ID:NXjdNH8/
AndroidでUI用のスレッドで重い処理やってフリーズするような糞アプリは見た事ある
0168名前は開発中のものです。2013/09/14(土) 02:00:08.66ID:n+2NXmsR
>>159の話に合わせると、描画のループというのが、Androidゲーでは
所謂GLスレッドに相当。で、これの中でゲームのシミュレーション部の
計算もやるのって別に珍しくはないかと

使える計算資源を徹底的に使い倒す必要があるヘビー級のタイトルなら
(計算資源への)処理の充填率を高めるために比較的細かい粒度で処理の
スケジューリングをするような仕組みをわざわざ用意することもあるけど
(結果的にGLスレッドとシミュレーション部は別スレッドってことになるけど)
必要がなければやらない(複雑化を避ける)と言うのは普通にアリというか
むしろ推奨
0169名前は開発中のものです。2013/09/14(土) 12:28:27.62ID:jcJR5iuZ
Androidってメインループ中の処理に相当するupdateメソッドあったっけ?
つかGUIってメインループなくね?あったとしても同期取るハメになるはず
0170名前は開発中のものです。2013/09/14(土) 13:44:25.30ID:8QT9t2lk
AndroidでもNative Activityを使えばメインループは書けるみたい
普通のアプリではメインループ相当の事はOSがやるが
イベントハンドラで時間のかかる処理をすればフリーズする
0171名前は開発中のものです。2013/09/18(水) 20:14:35.06ID:H6vsU86s
C++11のusingエイリアス使ってる人いない?

template <class T>
using Value2 = std::array<T, 2>;

ってやりたいのにIDE(eclipse CDT + gcc4.8)が構文エラー扱いにしてきて困る
そのくせコンパイルは通るし実行もできるからややこしい

usingエイリアスならtypedefにテンプレート引数使えるって聞いたから
必死にgcc環境作ったのに悲しい悔しいtasukete
0172名前は開発中のものです。2013/09/19(木) 08:43:08.81ID:UurgX65x
コマンドのオプションもきちんと書こう
0173名前は開発中のものです。2013/09/24(火) 00:07:52.02ID:NDARxT+J
方向ベクトルの指す方向にモデルを向けたいんですけど、どうしたらいいですか?
条件があって、正面を+z方向とした時にx軸回転した後にz軸回転だけで表現したいです。
0174名前は開発中のものです。2013/09/24(火) 20:17:12.39ID:kERDBedE
z軸で回転させても向きは変わらんのでは?
0175名前は開発中のものです。2013/09/24(火) 20:42:59.75ID:kERDBedE
そんなことないか

方向{x,y,z}
x軸atan(y,z)
z軸atan(y,x)
で回転させれば向くのかな
頭が地面に向いたりしそうな気がするけど
0176名前は開発中のものです。2013/09/25(水) 22:20:53.44ID:SvES6jLU
今ネットワークゲームを独学で作ってるんだけど
一応ゲーム中に複数のクライアントをサーバーとのやり取りさせることはできたんだけど
ルームの入退室は良いとして、ゲーム開始させる場合にサーバーとクライアントでどうやってゲーム開始を同期させればいいのかわかんないんだけど
アドバイスしてくれ
■ このスレッドは過去ログ倉庫に格納されています