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

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

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2014/01/16(木) 00:00:31.27ID:w6WW3hAo
ゲーム製作における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/
0174名前は開発中のものです。2014/02/03(月) 22:30:48.05ID:/+Ylube7
俺はフリー素材+一部絵師に描いてもらってる
趣味なんだから人それぞれのスタイルでいいだろう
0175名前は開発中のものです。2014/02/03(月) 22:49:21.68ID:xlOVneBM
>>173
うん、わかった
自分の生活費さえなんとかできるなら1人で自由に作ってな
0176名前は開発中のものです。2014/02/03(月) 22:55:48.33ID:HKt11pxu
はやく仕事辞めてゲーム作りに没頭したい
0177名前は開発中のものです。2014/02/03(月) 23:24:56.58ID:/+Ylube7
それは言わないお約束だろ
もっと時間のかからない遊びに流れるのも手だけど
0178名前は開発中のものです。2014/02/03(月) 23:32:32.16ID:eCQAtwWs
しかし一番金になりそうな趣味がゲーム作りなんだよな
0179名前は開発中のものです。2014/02/03(月) 23:37:42.57ID:eCQAtwWs
売れてからじゃないと仕事を辞められないのが難点だが
0180名前は開発中のものです。2014/02/03(月) 23:49:11.10ID:Ny+RFe0l
お前は金のことばっかりだな
0181名前は開発中のものです。2014/02/04(火) 00:08:11.00ID:uJ0GtlwQ
>>180
金持ちに成りたいと考える事は悪い事だと思う?
0182名前は開発中のものです。2014/02/04(火) 00:23:08.29ID:J1FJfMJW
スレッドの主旨を考えてくれ。どっかのスレみたいに株の話をされても困る
0183名前は開発中のものです。2014/02/04(火) 00:33:58.33ID:uJ0GtlwQ
そうだな……コッチに移るか

【同人】作ったゲームを金にする その4
http://toro.2ch.net/test/read.cgi/gamedev/1336913652/
0184名前は開発中のものです。2014/02/04(火) 19:06:59.83ID:uJ0GtlwQ
>>166
昔のゲームはアスキーアートを絵として使ってたわけだが?
0185名前は開発中のものです。2014/02/04(火) 19:09:55.94ID:uJ0GtlwQ
しかも音楽はbeep音だw
とはいえbeep音でwevファイルを再生させてた事もあるからあなどれん
0186名前は開発中のものです。2014/02/04(火) 19:58:16.47ID:J1FJfMJW
それくらい無いものの中でなんとかしてきたということだな
やれメンツが無能だとかいってたらきりが無いわけだ
0187名前は開発中のものです。2014/02/04(火) 20:14:51.47ID:uJ0GtlwQ
>メンツが無能だとか
そういやそれも一人で作るようになる理由の一つだったな
まあ、人数が増えると衝突も増えるからな

むしろあの頃は、DQ1が出る前までは独りで作るのが当たり前だったような……
0188名前は開発中のものです。2014/02/04(火) 20:22:21.38ID:J1FJfMJW
"あの頃"から制作してるの?
ひゃあ!ゲーム爺は生涯現役だぜ
0189名前は開発中のものです。2014/02/04(火) 20:27:51.59ID:uJ0GtlwQ
作成はしてない!
が、パソコン持ってないのにパソコン本を買ったりするぐらいに憧れてたな
0190名前は開発中のものです。2014/02/04(火) 20:41:31.66ID:uJ0GtlwQ
というか今丁度ドラゴンクエストへの道って漫画を読み返していた所だ
0191名前は開発中のものです。2014/02/04(火) 20:55:24.69ID:G5JzxpFK
伝説級の漫画だよなあれ
0192名前は開発中のものです。2014/02/04(火) 21:09:48.44ID:uJ0GtlwQ
うん、長編ゲームを作る人には是非とも読んで欲しい
0193名前は開発中のものです。2014/02/06(木) 07:38:03.22ID:Mklm8P+v
読めば読むほど
中村光一氏がDQ抜けたのが悔やまれる。
お色気コンテンツに憤慨していたエピソードは笑える。
0194名前は開発中のものです。2014/02/06(木) 20:33:21.38ID:wgo5Jh7Q
ドラゴンナイトやカオスエンジェル以前のエロゲだよな?興味はあるな
0195名前は開発中のものです。2014/02/06(木) 21:01:16.01ID:YaLd/g6Z
軽井沢なんとかのことだろうかw
0196名前は開発中のものです。2014/02/06(木) 21:10:32.33ID:wgo5Jh7Q
複雑な操作や手抜きグラフィックに怒ったりしてた話やね
0197名前は開発中のものです。2014/02/09(日) 03:20:30.53ID:yNPMLa+Y
中村光一って不思議のダンジョンシリーズ一発屋で終わったな
0198名前は開発中のものです。2014/02/09(日) 03:48:09.82ID:n/hHVigC
高校時代から名作を生み出してる中村光一が一発屋……?
0199名前は開発中のものです。2014/02/09(日) 03:53:10.61ID:CEeCxVwx
まぁウィザードリィみたいに不思議のダンジョンを伝統化しようとして
燃え尽きた印象があるな
一発屋というより、沢山あった弾を同じ場所に撃ち込んじゃった感じ
0200名前は開発中のものです。2014/02/09(日) 04:22:56.68ID:eECi/LC1
ドアドアいまいちだったけど
あの時代にスクランブルを完全移植した情熱の炎は、そう簡単には消えないさ!
俺は信じてるぜ!
0201名前は開発中のものです。2014/02/09(日) 16:33:33.68ID:Om4RLWnj
今C言語でオセロゲームを作成中なのですが、AIを作るところで行き詰ってしまいました。
とりあえずminiMax法で作ろうとしており参考にしているサイトのURLは
http://hp.vector.co.jp/authors/VA015468/platina/algo/2_2.html
です。

このサイトの
for(最初の子節点の手; 未評価の子節点がある; 次の子節点に移る)
という部分を見る限り先に子節点がいくつあるのか調べておく必要があると思うのですが
その解釈でよろしいですか?
0202名前は開発中のものです。2014/02/09(日) 16:43:02.64ID:c5g9RcWt
>>201
先に子節点を調べなくてもできるけど
先に調べておかないと置けないにも拘わらず置くかどうかを計算するから無駄な計算が増えるし、バグで置いた場合に何処でバグが発生してるのか調べるのが大変になる
0203名前は開発中のものです。2014/02/09(日) 16:50:59.29ID:Om4RLWnj
>>202
ありがとうございます。
先に子節点を調べることにします。
調べる上で、次の子節点を調べるときにその前に調べた子節点以外から探す方法が
よくわからないのですが、どのような実装を行えばいいでしょうか
0204名前は開発中のものです。2014/02/10(月) 08:15:56.04ID:EeAxagpY
木構造の探索はスタック使うと楽
再帰処理で実装するといいよ
0205名前は開発中のものです。2014/02/10(月) 16:50:10.78ID:r9rJHs9v
>>204
スタックとはどのようなものかはわかりますが、実装法などは全くわかりません。
二分木なら
typedef struct node_t{
typedef struct node_t *left;
typedef struct node_t *right;
int data;
}NODE;
のようにすればいいと思うのですが、探索となると多分木になると思うので
同じようには実装できませんよね?
0206名前は開発中のものです。2014/02/10(月) 17:57:20.00ID:zYS9MiyX
typedef struct node_t{
 struct node_t *child;
 struct node_t *next;
 int data;
}NODE;
0207名前は開発中のものです。2014/02/10(月) 18:19:16.50ID:r9rJHs9v
>>206
つまり二分木と同じ実装法で見方を変えるということですか?
0208名前は開発中のものです。2014/02/10(月) 19:22:37.65ID:zYS9MiyX
多分木を表現できるデータ構造の一例ってだけだよ
要件は、多分木であることと、ルートから葉に向かって再帰的に処理できること、でしょ?
その要件に足るようなデータ構造で自分の使いやすいものを選択すればいい
0209名前は開発中のものです。2014/02/11(火) 10:42:36.42ID:MuB9VwbG
三角関数を使ったカメラの回転が上手くいきません・・・
横回転は綺麗に回るんですが、縦回転がY軸しか動かず変な動きになります
分かりやすく解説してるとこは無いですか?
0210名前は開発中のものです。2014/02/11(火) 14:18:07.24ID:EVFbkSHB
>>209
クォータニオンで球面線形補間すると
理論はよく分からないけど何故かうまくいくよ
0211名前は開発中のものです。2014/02/11(火) 14:32:23.80ID:pu0dsTgx
ビューの回転は注視点を移動させた後に組み直せばいい。
0212名前は開発中のものです。2014/02/11(火) 22:12:14.10ID:sWtHnyX5
>>210-211
ありがとう、ちょっと見てみたんですが、
私のコードは三角関数メインなので行列の理解が追いつきませんでした
根本のコードの変更も考えてみます
0213名前は開発中のものです。2014/02/21(金) 22:16:42.52ID:WPj1YKPY
船のゲーム創りたいんですが、
どういう考え方で波を作れば船が上下したり傾いたりするでしょうか?
波を表すメッシュの頂点にベクトルを紐付けて、それを隣の頂点に伝搬する・・・
みたいな事は想像してるんですが、あんまりうまくないというか、
あまり効率的ではないですよね?
いい方法ないですか?
0214名前は開発中のものです。2014/02/22(土) 05:41:07.36ID:zZnD13Ju
>>205
2分探索木を自分で作らなくても、ライブラリにあるでしょ?
B-Tree(self-balancing search tree)平衡2分探索木
B+Tree、赤黒木など

キューやスタックも、ライブラリにあるでしょ?
優先度つきキュー(priority queue)はよく使うよ

詳細はWikipediaなどで、調べて
0215名前は開発中のものです。2014/02/22(土) 10:17:30.51ID:YdhdLZfz
>>213
なんちゃって水面は基本的にはそういう作り方だよ。バネダンパの二次元格子。
お船は、近傍の格子の頂点や面に反発させてどんぶらこさせればいいやという。
トライアル&エラーでパラメータ適当にいじって見た目の調整。おしまい

あ、リアル志向のゲームは何やってるのか知らないよ。学生時代に数値流体
やってたけど、あっちに凝り出すと際限がないからみんなどっかで折り合い
付けて端折ってそれっぽく見せてるだけだと思うよ
0216名前は開発中のものです。2014/02/22(土) 10:56:40.26ID:4BDQmNHU
DirectComputeのサンプルをみると、パーリンノイズから低周波成分を取り除いて地面全体に繰り返し、ハイマップとして地面に適用してるみたい
0217名前は開発中のものです。2014/02/22(土) 11:39:42.84ID:YdhdLZfz
>>216
DX7以前の頃だとテクスチャを2枚用意してマルチテクスチャにして
UV値の操作で各々のテクスチャを交差するように移動させると水面ぽく
見せられるよー的なやり方が多かったけど、あれをハイトマップにも
使う感じかな?
0218名前は開発中のものです。2014/02/27(木) 22:01:09.66ID:XfV+syCM
イケメンがいい
0219名前は開発中のものです。2014/02/28(金) 02:45:29.15ID:WKCAf0/q
>>218
鏡を見てため息をつけばいいと思う
0220名前は開発中のものです。2014/03/01(土) 15:31:28.07ID:xOOTC3SX
c++で別のクラスの数値が欲しいときはメソッドに相手クラスのポインタ変数を持ってコンストラクタでポインタを渡せばいいのですか?
0221名前は開発中のものです。2014/03/01(土) 15:36:42.26ID:ckzLhO0U
コンストラクタ?
0222名前は開発中のものです。2014/03/01(土) 17:29:52.27ID:P6ZwcTGw
コンス卜ラクタはコンス卜ラクタなんじゃ…?
0223名前は開発中のものです。2014/03/01(土) 17:49:25.00ID:ckzLhO0U
ああ理解した、メソッド→メンバか
メンバ関数にポインタ変数を渡して…何でここでコンストラクタ??って思った
0224名前は開発中のものです。2014/03/01(土) 23:00:27.16ID:B/y6lyvX
>>220
メンバにポインタ持たせてもいいし、相手クラスを継承してしまうとか、
その数値が必要になる関数の引数に、ポインタや参照で渡したり、
数値そのものを引数で渡すだけでも、好きなのでいいと思うよ
0225名前は開発中のものです。2014/03/02(日) 01:12:07.39ID:One/ooAB
で、どこにゲーム関係あるの?
0226名前は開発中のものです。2014/03/02(日) 18:14:52.71ID:eSGAMgB8
暗号化した外部ファイルとかセーブファイルの拡張子ってどうしてる?
foobarとかhogeみたいに意味のない文字なのがベストなんだけど
既存で使われているdatとかsavだと既になんらかの関連付けが
されてしまってる場合がありえるよね
0227名前は開発中のものです。2014/03/02(日) 18:30:57.68ID:RKme8rWA
ユーザが開くことを前提としないなら気にしない。
0228名前は開発中のものです。2014/03/02(日) 18:34:29.49ID:eSGAMgB8
そうか、むしろ無しでもいいか
0229名前は開発中のものです。2014/03/02(日) 19:12:19.16ID:odwxDc0w
というか、ユーザーでもすぐ「あ、これがセーブファイルだな」と判るようにしておいたほうがいいだろ。
データのバックアップを取りたいことあるだろうし。
0230名前は開発中のものです。2014/03/02(日) 19:15:46.36ID:Oh6AuFJG
何でも.dbにしてる
0231名前は開発中のものです。2014/03/02(日) 19:21:49.81ID:XPJItCw9
bin
0232名前は開発中のものです。2014/03/02(日) 20:11:55.85ID:uIAHAPdg
http://gyazo.com/c12e1b45288577f41bce47f9a3c3b457.png

マルチスレッドってオブジェクトリストの更新中に
オブジェクトリストを参照できないんだから意味なくないですか?
どうしてマルチスレッドで動作が軽くなるんですか?
セマフォをオブジェクト単位でかけてたらセマフォの処理で余計重くなるのでは
0233名前は開発中のものです。2014/03/02(日) 20:20:19.85ID:9+Akgo4p
ダブルバッファで検索するんだ
0234名前は開発中のものです。2014/03/02(日) 20:21:15.86ID:Oac8ta12
誰か使ってないですかねぇ
http://oxygine.org/
0235名前は開発中のものです。2014/03/02(日) 20:51:20.45ID:uIAHAPdg
>>233
画面のチラツキを抑えるほうが出てきて、出てきても申し訳程度の説明しかない・・・
http://www.cs.tsukuba.ac.jp/~yas/cs/csys-2007/2007-12-14/
>◆ダブルバッファリング
> 整数を1つバッファに書き込むだけでロック/アンロックを行なっていると、 実際の並列処理では重たい。
> ロックの回数を減らすために、ダブルバッファリ ングと呼ばれる技術がよく使われる。読み手と書き手で別々にバッファをもうけ、1つのバッファの処理をしている間は、ロックを行なわない。

リストで1つのオブジェクトを更新してる間は「描画スレッドが使っちゃだめですよフラグ」でもたてるのか?
それを参照する時点でスレッドセーフじゃなさそうだけど

それともリスト内の全部のインスタンスのコピーを毎フレーム作るのか?
0236名前は開発中のものです。2014/03/02(日) 20:59:31.72ID:uIAHAPdg
あいや、これは循環バッファ?というやつでダブルバッファとは違うのか
0237名前は開発中のものです。2014/03/02(日) 22:59:32.88ID:bJnQrcsZ
計算したデータを参照渡しせずに、値渡しすればいいだけの話
0238名前は開発中のものです。2014/03/02(日) 23:13:50.02ID:0kUNTeet
マルチスレッドを効果的に使う場面は、
BGM,効果音など
背景の処理、草や木が風でゆらゆらする
シェダー関係もそう
0239名前は開発中のものです。2014/03/02(日) 23:15:24.40ID:YZ+wwGoZ
インスタンスのセットを2つ(AとBとする)作っておいて
・描画スレッドがAの状態を使用して描画している間、更新スレッドは
 Aの状態をもとに更新後の状態をBに作成する。
・両方が完了したらAとBをスワップする
って方法かなぁ

>>232の図で言えば、Subスレッドが描画している間に
Mainスレッドがもう次のフレームの接触判定を処理し始めてる感じ
0240名前は開発中のものです。2014/03/02(日) 23:23:34.37ID:bJnQrcsZ
計算したデータを描画用のバッファに積んで、描画処理に引き渡せばいいだけ。
なんで単純に出来ることを複雑にやろうとするんだ?
0241名前は開発中のものです。2014/03/02(日) 23:31:43.29ID:Oh6AuFJG
>>231
.binはlinuxの.exeって感じでデータっぽくない
0242名前は開発中のものです。2014/03/02(日) 23:37:13.73ID:Oh6AuFJG
>>234
面白そうだけど利用者ほとんどいないようだし、すぐに消えそうだな
cocos2dのほうが良いよ
0243名前は開発中のものです。2014/03/02(日) 23:44:39.24ID:Oh6AuFJG
>>239
それって概念的には全てのインスタンスx2だけど、
描画スレッドは描画に関するデータ(それも画面内に入るもの)だけあれば良いから
実際には必要なメモリ量を削った実装で実現できるな
02442392014/03/03(月) 00:29:47.75ID:+ppeC4rH
>>243
確かにそうだ
そして多分それが>>240が言っている
「計算したデータを描画用のバッファに積んで、描画処理に引き渡」す
ってのに近いのかも

この辺で思ったんだが、もしDirectX11を生で叩いてるなら
DeferredContextとか使うといいのかな
0245名前は開発中のものです。2014/03/03(月) 00:38:44.19ID:/CdxWaD8?BRZ(10000)

>>239
スカラだけならともかく毎フレーム描画に必要な情報全てをnewするのか?

>>239
描画用のバッファを積む時にスレッドぶつかるかもしれないって話では?

class aiueo{
private:
Position* position;
Position* drawPosition;
public:
void func(){
position->setX(position->getX+1);
Position* tmp=position;
position = drawPosition;
drawPosition = tmp;
}
void draw(){
image.draw(drawPosition);
}
};
0246名前は開発中のものです。2014/03/03(月) 07:13:32.62ID:mjyyGJWK
一フレームぶんのバッファに積み終わってから引き渡せばいいだけの話。
引き渡したら描画を描画スレッドにやらせて、計算スレッドは次の計算に入ればいい。
なんで単純で簡単なことを複雑に考えるのか、さっぱり理解できない。

そもそも描画順序などを考えると、座標がすべて確定した後で無ければ、
描画処理なんて出来ないのに、なんで計算直後にチマチマ描画しようという発想になってるんだ?

毎フレームnewとかも、嫌なら最初からある程度の領域を作っておけばいいだけの話で、
そんな簡単に解決できるどうでもいいことをイチイチ聞く意味が分からない。

なにこの思考能力の欠如?
0247名前は開発中のものです。2014/03/03(月) 07:44:19.21ID:+ppeC4rH
別の書き方は出来ないのかあんたは
0248名前は開発中のものです。2014/03/03(月) 08:19:00.54ID:/CdxWaD8?BRZ(10000)

http://gyazo.com/7984315b649ca2378a5b63989ada2874.png
図で確認するとこんな感じ?
ロックの仕方がよくわからんけど、
メインスレッド側のバッファは描画スレッドに必要な情報(頂点とか)いらないからトントンになるのかな
そうすると、毎フレームnewするより保持してたほうが楽そう

描画スレッドはモデルの頂点の展開とかやらずに文字通りZバッファに登録するだけだったりする?
0249名前は開発中のものです。2014/03/03(月) 14:38:46.71ID:7XSFdIT2
>文字通りZバッファに登録するだけだったりする?
意味不明
0250名前は開発中のものです。2014/03/03(月) 20:28:03.25ID:+ppeC4rH
>>248
使ってるライブラリ教えて
0251名前は開発中のものです。2014/03/04(火) 00:42:30.15ID:tv4RC6nv
なんか描画スレッド分けるのがマルチスレッドみたいな流れになってるけど
処理の分割しないと複数コアの性能いかせないよね

>>238以外にも分割出来るところはあるんじゃないの
AIなんかのフレームと分けられる箇所が効果的だとは思うんだが
0252名前は開発中のものです。2014/03/04(火) 00:54:00.93ID:Tkd6LlXd
>>248
君はレベルが低すぎる。基礎的なことすら理解していないようだから
身の丈に合った技術で制作するべきだ
0253名前は開発中のものです。2014/03/04(火) 01:01:46.35ID:Tkd6LlXd
ゲームロジック以外については定番のパターンがあるわけで、
ゲームロジックについてはゲームの性質次第だから汎用的な議論はできん
0254名前は開発中のものです。2014/03/04(火) 01:12:12.33ID:eUCtnBam?BRZ(10000)

>>250
DXライブラリです
0255名前は開発中のものです。2014/03/04(火) 01:22:03.26ID:eUCtnBam
>>252
そんなこと言わないで><
0256名前は開発中のものです。2014/03/04(火) 01:45:49.24ID:MGr4iOMf
身の丈に合った技術で満足してたら俺みたいに全然成長しないままになるしいいんじゃね?
0257名前は開発中のものです。2014/03/04(火) 03:19:20.41ID:NSoGUl2d
自称デキル人の大半はエセ
バグ生産しまくるのは得意みたいだがw

無視するに限るよ(ry
0258名前は開発中のものです。2014/03/04(火) 03:24:44.21ID:6r8+3FgW
>>256
満足するならなw
0259名前は開発中のものです。2014/03/04(火) 09:14:16.41ID:Tkd6LlXd
いまどきDXライブラリの初心者でマルチスレッドの基礎も理解してないのに
無理に背伸びした結果が「文字通りZバッファに登録するだけだったりする?」
格好ばかりつけて内容がなさすぎだろ

上で新技術OpenMPとかドヤってたやつといい、もう少し自惚れを抑えて
真摯な姿勢で学ばんと時間の無駄だよ
0260名前は開発中のものです。2014/03/04(火) 09:15:50.51ID:A1Dcjr5j
そもそもグラボの基礎から学びなおせ。
明らかにZバッファが何か分かってないだろ。
0261名前は開発中のものです。2014/03/04(火) 12:24:51.64ID:VEfOUnzL
>>254
Zソートの機能があるライブラリって訳じゃ無いのね
0262名前は開発中のものです。2014/03/04(火) 21:19:35.34ID:eUCtnBam?BRZ(10000)

>>261
アルファ値がある面だけZソートして、不透明な面の後から描画しています。

マルチスレッドの基礎はわかりませんが、
勉強目的で実装してみようかなと考えて、疑問点があったので質問しました。

質問の内容に戻りたいのですが、
メインスレッドではオブジェクトの座標だけ計算して、
描画スレッドでオブジェクトの座標からモデルの頂点等を展開すると
メインスレッドと描画スレッドが共有する値が少なくなっていいかなと考えたんですが、
実際に使われているスタンダードな方法とかあれば教えていただけると助かります。
0263名前は開発中のものです。2014/03/05(水) 00:56:58.44ID:vvepHaRA
struct Node {
....Image* image; // D3DMesh mesh でもFontSprite fontでもいい
....Rect bounds;
....Rect src;
....double angle;
};

struct Layer {
....int usingLength = 0;
....Chain<Node> chain; // std::list<Node>
/*
Chain<Node2DImage> chain1;
Chain<Node2DFont> chain2;
Chain<Node3DModel> chain3;
*/
....bool isUpdate = false;
};
0264名前は開発中のものです。2014/03/05(水) 00:58:26.26ID:vvepHaRA
Lock g_sync; // winならクリティカルセクション、linuxならセマフォ

Layer g_layers[3]; // instance;
Layer *g_pFront = &g_layers[0];
Layer *g_pSwap = &g_layers[1];
Layer *g_pBack = &g_layers[2];

void threadFront(){ // GUI Thread = main thread
....while(true){
........g_sync.lock();
........if(g_pSwap->isUpdate == true){ // ロジック側がスワップした
............Layer *swap = g_pFront;
............g_pFront = g_pSwap;
............g_pSwap = swap;
............g_pSwap = false;
........}
........g_sync.unlock();
........render(g_pFront);
....}
}
0265名前は開発中のものです。2014/03/05(水) 01:01:42.52ID:vvepHaRA
void threadBack(){ // Logic
....while(true){
........g_sync.lock();
........if(g_pSwap->isUpdate == false){ // 描画側がスワップした
............Layer *swap = g_pBack;
............g_pBack = g_pSwap;
............g_pSwap = swap;
............g_pSwap = true;
........}
........g_sync.unlock();
........update(g_pBack);
....}
}


class Scene {
public:
....virtual void update = null;
....virtual void render() = null;
}
0266名前は開発中のものです。2014/03/05(水) 01:07:10.79ID:vvepHaRA
class Game : public Scene {
....Sprite sprite;
public:
....void update(){
........sprite.x++;
....}

....void render(){
........sprite.render(); // g_pBackにデータを渡す
....}
}

Scene* g_pScene = new Game();

// Logic Thread update()
void update(Layer* layer){
....g_pScene->update();
....g_pScene->render();
}

問題は、GUIスレッドしかテクスチャーとかの生成と破棄ができないのだが、
ロジック側の要請をキューにしてメッセージパッシングするのは
少し複雑な実装になるこった。
0267名前は開発中のものです。2014/03/05(水) 16:23:12.96ID:x8H/gaMj
ideoneとかcodepadとか使えばよかったのに
0268名前は開発中のものです。2014/03/05(水) 20:45:55.74ID:6x2/6ZGn
sleepってなくてもいいもんなの?
0269名前は開発中のものです。2014/03/05(水) 21:47:30.12ID:6x2/6ZGn
マルチスレッドプログラミングの基本について書いてる記事があった
http://www.kumikomi.net/archives/2005/02/02multi.php?page=1

組み込みのサイトだけど基礎だからゲーム製作にも役立つかな
まあこれ見ても具体的な実装なんてさっぱりわからんけど
0270名前は開発中のものです。2014/03/05(水) 22:22:10.31ID:vvepHaRA
マルチスレッドプログラミングしなくてもいいじゃん
0271名前は開発中のものです。2014/03/05(水) 22:28:07.13ID:xpm2EzP6
起動時のスプラッシュ画面を出すときに欲しくなるんじゃない?(適当)
0272名前は開発中のものです。2014/03/06(木) 22:54:49.68ID:wXpbFvTO
マルチスレッドと言えばQtのQMutexLockerはとても便利だった
ミューテックスのロックとアンロックが一行でできる
0273名前は開発中のものです。2014/03/06(木) 23:58:17.76ID:g6URqktg
>>266
書いてくれて嬉しいですが、処理の流れが見えないですね・・・
swapは裏画面と表画面を入れ替えてるというのはわかるんですが
ロジック側も入れ替えるんですか?
layerとかchainとか何を指してるのかイマイチわからないです・・・

g_sync.lockというのはロック出来るまで待機すんるでしょうか?
そうするといい感じに交互に処理できそう?
■ このスレッドは過去ログ倉庫に格納されています