トップページ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/
0574名前は開発中のものです。2013/10/24(木) 22:15:34.16ID:euKSvHth
>>572
いろいろやり方あるけど俺はダブルバッファリング派
前回と今回が違う値だったら押した瞬間
0575名前は開発中のものです。2013/10/24(木) 22:44:08.63ID:FZTpGVKH
あぁ押した瞬間とかの識別方法の話しじゃないんだ。処理を変える方法というか…

キー入力関数ポインタ[16]={関数_上,関数_下,…}
さっき上で話してたやつ。こんなのがあるとして

関数_上()

 if(押しっぱ)
 {
 }else
 {}

みたいなことしてたら全部のキー関数でif文しないといけないじゃない?
そこで「関数_上押しっぱ」みたいなのを作りたいんだけど
そうするとキー入力関数ポインタじゃアクセスできなくなる…

どういう感じに判別して処理を変えればスマートだろうか
0576名前は開発中のものです。2013/10/24(木) 22:55:12.21ID:ddNDzrdz
ボタンの押下状態を取得する関数に、
引数で「その瞬間のみ」というフラグを立てれるようにしてる。

キーリピートや、10フレーム以上押しっぱなしで真にする、とかも同じような感じで取れる
0577名前は開発中のものです。2013/10/24(木) 22:58:26.75ID:euKSvHth
>>575
やりたいことによって違うので、それだけの情報じゃ何とも言えんが例えば

if(押しっぱ) おしっぱ関数ポインタ[キー入力値];
else おした瞬間関数ポインタ[キー入力値];

とか?
0578名前は開発中のものです。2013/10/24(木) 23:09:59.81ID:FZTpGVKH
>>577
それだと「上をおしっぱの状態で右が初めて押された時」とかができないんだよね
そんなの使う時あるの?って聞かれたらなんとも言えないけど…
0579名前は開発中のものです。2013/10/24(木) 23:13:14.62ID:euKSvHth
>>578
コマンド入力だな
それなら>>573のやり方がいい
0580名前は開発中のものです。2013/10/24(木) 23:13:24.13ID:yWybbfK/
押されてたらカウンタをインクリメントしていって
カウンタが1だったら始めて押されてたことにすればいいんじゃ
0581名前は開発中のものです。2013/10/24(木) 23:18:48.87ID:euKSvHth
>>580
単純ならそれでいいが、複雑な処理になると死ねる
格闘系のコマンド入力を例にすると
間に変なキーが挟まっても処理できるように、履歴を参照できないとキツイ
0582名前は開発中のものです。2013/10/24(木) 23:41:07.44ID:ddNDzrdz
ああ、そういうことか。
それなら自分が前にやったのは、>573とだいたい同じっぽい。
0583名前は開発中のものです。2013/10/25(金) 01:10:12.99ID:EGV5trEu
俺は格闘コマンドは入力部分はいじらずに入力を監視するオートマトン用意してるな
受理したら発動みたいな
0584名前は開発中のものです。2013/10/25(金) 02:46:25.90ID:Wzto7AEP
入力履歴はそのまま記録すればリプレイにも使えるしデバッグにも利用できる。
0585名前は開発中のものです。2013/10/25(金) 09:05:50.59ID:FRzjSMWK
>>583
その監視側が履歴を必要とするはずだから、多分それは遠回りな実装。
具体的にコードパス説明してみ
0586名前は開発中のものです。2013/10/25(金) 11:25:43.16ID:U8abS4cv
テンプレートとautoってどう使い分けんの?
0587名前は開発中のものです。2013/10/25(金) 11:58:14.26ID:t+n4YTsO
>>586
使い分けるも何もテンプレートとautoは全く別
std::vector< std::map<std::string, int> > map_vec;
こういうのがあったとしてイテレータを取るには
std::vector< std::map<std::string, int> >::iterator i = map_vec.begin();
と長ったらしく書かないといけないが、autoで型推論させると
auto i = map_vec.begin();
でいいわけ
0588名前は開発中のものです。2013/10/25(金) 12:06:29.04ID:0QlHYD53
>>586
勘違いしてる可能性があるから一応念のため言っておくけど
auto型っていう型がある訳ではないからね
0589名前は開発中のものです。2013/10/25(金) 12:51:45.87ID:SyA4+mXA
吐きそう
0590名前は開発中のものです。2013/10/25(金) 12:54:36.09ID:bYWNxFd9
エラーが?
0591名前は開発中のものです。2013/10/25(金) 13:00:27.54ID:t+n4YTsO
コアかもしれん
0592名前は開発中のものです。2013/10/25(金) 21:11:21.10ID:eOV2PGNk
別にイテレータじゃなく適当なクラスのバッファにならないの?型推論で

void hoge(auto a,auto b);
とかでもいいのかなーと
0593名前は開発中のものです。2013/10/25(金) 22:18:46.67ID:W9GSrEjC
template<class T1, class T2>
void hoge(T1 a, T2 b);
0594名前は開発中のものです。2013/10/25(金) 23:24:22.57ID:NxjXgve5
>>592
それに近い使い方は戻り値のautoかな
しかし確かに>>593みたいな糖衣構文が来ても悪くないような気もするね
ただ、C++のテンプレートだと特殊化が命みたいなとこもあるからなぁ
0595名前は開発中のものです。2013/10/29(火) 21:52:21.38ID:o1ek35hj
テンプレートメソッドをオーバーロードしたら自動的に
特殊化扱いになるようにしてくれたら良いのに
思わぬとこで「オーバーロードが曖昧です」とか言われても焦る
0596名前は開発中のものです。2013/10/30(水) 08:34:18.07ID:iB7yIVWa
テンプレートってヘッダに定義書かないとダメなの?
せっかく美しく宣言と定義わけて書いてるのに
0597名前は開発中のものです。2013/10/30(水) 08:50:47.21ID:r4Gm8hOq
ファイルを分けるなら、ヘッダ内で定義をincludeすればいいだけ。
0598名前は開発中のものです。2013/10/30(水) 09:45:57.87ID:XbSRzxLq
そういえばそんな宣言無かったっけ? 正式採用されなかった気もするが
0599名前は開発中のものです。2013/10/30(水) 15:47:31.26ID:effWvIu+
他のコンパイル単位でテンプレートの定義あることに期待して
自分のコンパイル単位ではテンプレートの定義をインクルードしないっていう
キーワードは追加されたけど、ぶっちゃけどういう時に使えばいいのかわからん
0600名前は開発中のものです。2013/11/05(火) 22:56:36.90ID:CTkkt81/
まあいいさ、そのうち、私の解説サイトで
RPGの作り方を解説してみるさ

そしたら、それほど難しくないことが解かることでしょう
0601名前は開発中のものです。2013/11/05(火) 23:48:42.84ID:Jv0Ou+ZA
私のってポナちゃんの?
0602名前は開発中のものです。2013/11/06(水) 00:29:19.16ID:vBtBCg2n
レスが飛んでると思ったら
0603名前は開発中のものです。2013/11/06(水) 01:18:53.76ID:SItXAGUW
DXライブラリ総合スレと思って誤爆しているんだろw

ゲーム製作云々より自画自賛の解説サイトの宣伝に夢中で
あれがやりたいだのこれをやってみせるだのと
手を動かさず口だけ妄想と自分語りしか出来ないで
複数のスレッドに目をつけては書き込みするタイミングを伺っている
0604名前は開発中のものです。2013/11/06(水) 01:29:00.96ID:lzm7kGb8
複数のスレっつーか
こことあそこがメインフィールドだと思う

今日(もう昨日か)は文体だけで識別することに成功したから
ようやく俺もゲ製の一員になれたような、そんな気分になれたよ
0605名前は開発中のものです。2013/11/07(木) 21:31:07.69ID:od91QRId
なあ、今作ってるゲームの実行ファイルのサイズって何kバイトぐらい?
俺のは280kほど。ちなみに画像とか音声とかは別にしてある。
0606名前は開発中のものです。2013/11/07(木) 22:21:58.37ID:zo+10xy1
ランタイムを実行ファイルに組み込むか外に持つかで全然変わる。
0607名前は開発中のものです。2013/11/08(金) 08:52:56.12ID:ED1N71tR
RPGよりノベルゲームの方が作るのは簡単だよ!
だからまずはノベルゲームの作り方から入ったら?
0608名前は開発中のものです。2013/11/08(金) 08:57:49.11ID:MnmZsnwx
文章書かなきゃならないとか……高難易度すぎるだろ……
0609名前は開発中のものです。2013/11/08(金) 10:13:29.89ID:ED1N71tR
じゃあアドベンチャーゲームとかw

つ〜かプログラムの作成難易度はノベルゲーム→アドベンチャーゲーム→RPGなんだがな
0610名前は開発中のものです。2013/11/08(金) 11:21:11.70ID:ED1N71tR
そういえば、文章の難易度は、RPG→アドベンチャゲームー→ノベルゲームかな?
0611名前は開発中のものです。2013/11/08(金) 11:51:10.76ID:MnmZsnwx
戦闘シーンだけ、あるいは探索シーンだけなら、
他ジャンルと比べてプログラム自体が難しいわけじゃないと思うんだよね。
0612名前は開発中のものです。2013/11/08(金) 12:23:58.88ID:ED1N71tR
シーンの変更もそれほど難しいとは思わないが?
0613名前は開発中のものです。2013/11/08(金) 13:40:12.68ID:+NTW1cVS
それでふと思ったが、ゲーム製作って言うより完全にプログラミングそのものの領分になるけど、
シーンの管理処理とか、表面的に目立たない屋台骨の部分について最初から自分の中で定番化するような物考えて持ってると、
正直どうとでも応用効くよな。

で初心者の人とか、初心者が開いた入門講座みたいな物コピペしてただ覚えたような人だと
その部分が自分の中で定式化出来ないから「難しい、わからない、思い付かない」になるのかなと。

あくまで一般的な話だけど。
0614名前は開発中のものです。2013/11/08(金) 14:24:03.36ID:MnmZsnwx
>>612
シーンの変更というよりは、ミニゲーム2つ3つ作るようなもんじゃん?
もちろん使い回すコードはあるにしてもさ。
0615名前は開発中のものです。2013/11/08(金) 15:08:13.78ID:oXMxQi+3
それぞれのシーンが難しくないならば、ふたつ作るのもたいして変わらない
一桁の足し算を100回やるのは面倒ではあるけど難しくはならないだろう?
0616名前は開発中のものです。2013/11/08(金) 15:08:15.81ID:MJ/UJDci
ソースに文章書き込むなら簡単だけどスクリプトとか文字列操作熟知してないと難しそう
えんいー
0617名前は開発中のものです。2013/11/08(金) 20:11:46.11ID:zbPsZNK1
スクリプトの作成ってインジェクション対策がめんどくさそう
ある程度適当な文法でもエラー出力作ってなかったら通っちゃうだろうし
外部に置くってなると他人に触らせること前提ってイメージがある
0618名前は開発中のものです。2013/11/09(土) 02:42:05.48ID:khiWgQzY
他人の作った組み込みスクリプトを使うという方法もある
けれども基本的には、自作する事で得られる様々な知識や知恵の方が大事かと
まあ簡単なノベルゲームやアドベンチャーゲームの一つ二つ作るつもりで挑むべし
つーか、これらのゲームも基本的にはスクリプトを使ってると思った方が良いかと
0619名前は開発中のものです。2013/11/09(土) 10:47:13.41ID:khiWgQzY
そもそもシーンの変更を扱う方法はスクリプトに限らない。
マルチスレッドを使う方法もあれば、タスクシステムを使う
方法もある。フラグや分岐や関数ポインタでえっちらおっちら
やったっていいし。どの方法にも一長一短がある。どうせ内部で
どんな挙動をしているかは作ったプログラマにしか分からない
んだし、自分の好きなやり方でやるべし。
0620名前は開発中のものです。2013/11/09(土) 11:16:02.17ID:khiWgQzY
>>613
そういう人たちにはむしろ組み込みスクリプトを教えた方が良いのかもしれんな
組み込みスクリプトを使っている人達には迷惑かもしれんが
0621名前は開発中のものです。2013/11/09(土) 11:31:05.04ID:NHXYgnem
シーンの変更はオブジェクト指向で実現しようとすると難しいなぁ
主に共有したいデータのやり取りとか

あと、コンソールゲームと違ってループを意識して状態を保存できないといけない
Boostにコルーチンあるけど、自分のに組み込むほどの理解には至れないなー

描画を別スレッドにするのでも良いけど、マウスゲーのように画面と操作(MV)が密接に
関わっているような作りだと、フレムワーク自分で作るのは骨だろうね
0622名前は開発中のものです。2013/11/09(土) 11:53:07.42ID:r/b1un+I
自前主義からの脱却を
0623名前は開発中のものです。2013/11/09(土) 12:59:59.47ID:khiWgQzY
シーンごとに別のループを用意するんじゃダメなの?
俺の場合、メインスレッドを用意して、シーンごとに別のループを作ってるが。
この方法の問題点は同期処理関連をおろそかにするとフリーズする事かな?
Windows7以降だとそうでも無いんだが、昔のOSだとOSごとフリーズするので、
デバッグでは苦労した覚えがある。
0624名前は開発中のものです。2013/11/09(土) 14:51:11.85ID:xPktsMNg
>>621
ごめん、なんか引っ掛かった。

> シーンの変更はオブジェクト指向で実現しようとすると難しいなぁ
> 主に共有したいデータのやり取りとか

それ、全体としての実装手法の話と、アプリケーション固有の(自分自身の)設計の話が切り別れて無い印象を受けた。
もしかして固定的な何か一つの実装をイメージしてないか?

複数スレッド使う事や全体としてOOの考え方で実装する事と、シーンの変更がしんどいか否かはレイヤの違う話かと。
0625名前は開発中のものです。2013/11/09(土) 18:30:15.80ID:5bA+RcL7
ループは一つにしておけよ・・・
0626名前は開発中のものです。2013/11/09(土) 18:34:25.44ID:khiWgQzY
ソースが分かりにくくなるから却下
0627名前は開発中のものです。2013/11/09(土) 19:32:06.23ID:OGQuUKSq
一つのメインループの中で、現在設定されてるシーンに対応したイベントと描画処理を呼び出すのではいかんのか
0628名前は開発中のものです。2013/11/09(土) 19:34:22.11ID:khiWgQzY
例えば、シーンが変わるごとに同じループでフラグ管理とかポインタ関数管理とかやってると、
一度に二重三重のシーン変更処理が入った場合にバグを発生させる可能性が高くなるからな。
シーンごとに別ループで管理しておけば、少なくともそういったバグが出る可能性は無い。
0629名前は開発中のものです。2013/11/09(土) 19:41:29.60ID:8OBkvM6+
昔のOSでフリーズしてる時点でバグが有るんだろw
0630名前は開発中のものです。2013/11/09(土) 20:03:13.90ID:khiWgQzY
スレッドの同期関連のバグとシーン変更関連のバグを同列で扱う馬鹿よりはマシかと
0631名前は開発中のものです。2013/11/09(土) 20:22:26.69ID:e9EdDrE0
昔のOSはちょっと間違えるだけでフリーズしたりブルースクリーンが出たりして大変だったよな
0632名前は開発中のものです。2013/11/09(土) 20:53:32.08ID:khiWgQzY
MS-DOS時代はフリーズしてもあんまし文句言われなかったのにな
0633名前は開発中のものです。2013/11/09(土) 21:08:02.88ID:GiqQutTt
DOS時代だって数百万円するのに使えないCADとか不満多かったけど
バックアップするにもドライブ遅いから時間かかるし
一太郎だって安定してた4.3を使い続けたりだとか
0634名前は開発中のものです。2013/11/09(土) 21:13:23.84ID:OGQuUKSq
うーん、そんなに複雑になるものかな?
自分の場合、ゲームのメインループ自体の仕事はFPSの計測と負荷調整だけで、いつシーンが変更されたかなんて気にしなくていいような設計にしてたもんで……
0635名前は開発中のものです。2013/11/09(土) 21:27:56.92ID:khiWgQzY
でも昔はリセットボタンを手軽に押せたけど今は手軽に押せないじゃん
っていうか、最近リセットボタン使ってないなぁ・・・・・・
0636名前は開発中のものです。2013/11/09(土) 22:00:01.21ID:khiWgQzY
>>634
RPGで?それは凄いな。バグの解析で頭こんがらがらない?
0637名前は開発中のものです。2013/11/09(土) 22:18:31.84ID:BIFY+3eU
メインループ設けるだけでバグの解析が難しくなる設計ってどうやるんだ
0638名前は開発中のものです。2013/11/09(土) 22:34:39.14ID:khiWgQzY
岩押したり船やドラゴンに乗ったりNPCを特定動作させたりランダム動作させたり
あと何やったかな?そんな所ですが
0639名前は開発中のものです。2013/11/09(土) 22:39:32.94ID:bOSv++y5
>>636
俺の場合、最初と次に作ったゲームはシーン毎にループ処理やってたけど、
それ以降はメインループ一本にしたら、管理とか変更とかすげー楽になった。
0640名前は開発中のものです。2013/11/09(土) 22:51:18.18ID:BIFY+3eU
設計の意味知らないんじゃん・・・
0641名前は開発中のものです。2013/11/09(土) 22:56:46.28ID:khiWgQzY
>>639
ID凄ぇ
なんか、自分とは逆だな。昔はメインループ一本だったのに、今はループを分けて作ってる。
バグを出さない方向に工夫した結果なんだがな。
0642名前は開発中のものです。2013/11/09(土) 23:17:49.74ID:khiWgQzY
>>640
DQ2とFFを足して割ったようなゲームを作る以上の事は特に考えずに、
その場の思いつきでRPG作ってるからなぁ・・・
0643名前は開発中のものです。2013/11/10(日) 00:26:02.25ID:9oyG3xZl
久々にひどいワナビバカを見たわw
アマチュア時代は自分で思いついたことを素晴らしいことだと思わず、
すでに実績のあることを自分のものにすることに力を入れたほうがいいぞ。
0644名前は開発中のものです。2013/11/10(日) 00:56:13.82ID:AdKO3et6
>>638
メインループとゲームのロジックは、明確に分けるべき。構造化プログラミングすら出来てないんじゃないか?
0645名前は開発中のものです。2013/11/10(日) 01:01:54.40ID:HHIqigB3
横レスだけど
ヤバイ
何を言ってるのか理解できない
ボクはプログラミング力が低いらしい

メインループ内でシーンマネージャー呼ぶ
シーンマネージャーの中で各シーンの処理を呼ぶ
各シーンの処理の中でそのシーンでやりたいことの処理を呼ぶ

こんな感じじゃダメなの?
0646名前は開発中のものです。2013/11/10(日) 01:12:04.49ID:WYT1CItZ
いいよそれで
0647名前は開発中のものです。2013/11/10(日) 04:24:39.77ID:NUelFT18
>>645
普通に考えるとそういう設計になると思う。てか、ドシンプルに最初に書く屋台骨ってそうなると思う。
合ってる。そういう設計プロセスのイメージが出来ない人ってのが、つまり >>613 に書かれてるような、考えと整理の経験が足らない人って事になると思う。
0648名前は開発中のものです。2013/11/10(日) 11:41:35.08ID:Y52keycr
メインループを分けるってことはメッセージ処理をあちこちから呼び出すってことが
0649名前は開発中のものです。2013/11/10(日) 12:17:49.63ID:YibCAKGF
それのどこがわるいんだ?龍神録の講座でもメインループは一つのみ、
複数あったら設計がおかしいとか書いてあるけど、
メッセージ処理とかするのに、わざわざ深いネストから抜けないといけないじゃん。
0650名前は開発中のものです。2013/11/10(日) 12:19:33.98ID:WYT1CItZ
メッセージ処理とやらをシーンがやんの?
0651名前は開発中のものです。2013/11/10(日) 12:30:53.34ID:YibCAKGF
メッセージ処理をまとめた関数をシーンが自由に呼び出す
0652名前は開発中のものです。2013/11/10(日) 12:37:54.22ID:SiZkRCd6
ゲームのメインループはメインスレッド上に用意し、
メッセージループはDirect3Dのオブジェクト管理をしているが?
0653名前は開発中のものです。2013/11/10(日) 12:41:34.36ID:aurdmqK+
なんかマルチスレッドとか使ったらすごい複雑になりそう
0654名前は開発中のものです。2013/11/10(日) 12:49:18.45ID:SiZkRCd6
同期処理関連を理解してれば問題無い
0655名前は開発中のものです。2013/11/10(日) 13:08:34.27ID:SiZkRCd6
メッセージループでPeekMessage使うとCPU使用率が100%にならない?
それが嫌だからマルチスレッド使ってる。
0656名前は開発中のものです。2013/11/10(日) 13:12:44.88ID:YibCAKGF
100%になるのはSleep入れてないからでは?
0657名前は開発中のものです。2013/11/10(日) 13:17:53.86ID:WYT1CItZ
>>651
メッセージ処理とやらをシーンから呼び出す必要があんの?
メッセージ処理って何?
0658名前は開発中のものです。2013/11/10(日) 13:20:58.54ID:SiZkRCd6
メッセージループにSleep入れるとOSの動作が不安定になってただろ?
0659名前は開発中のものです。2013/11/10(日) 13:22:25.04ID:YibCAKGF
>>657
普通にPeekMessageとかのウィンドウ一連の処理。
0660名前は開発中のものです。2013/11/10(日) 13:24:07.25ID:YibCAKGF
>>658
いや?不安定になるのは長く入れすぎじゃないか?
むしろSleep(0)として、ほかのスレッドに処理渡さないと逆に不安定になると思うが・・・・
0661名前は開発中のものです。2013/11/10(日) 13:27:24.32ID:NUelFT18
>>658
普通ならない。
>>660も言ってるけど、OSと自分の書いてるアプリケーションの関係、つまりメッセージの循環(OSのメッセージポンプ、メッセージディスパッチ)の
立場とか意味わかって書いてたらならないと思う。
0662名前は開発中のものです。2013/11/10(日) 13:35:43.16ID:SiZkRCd6
>>660
昔、PeekMessageにSleep(16)とかやってたなぁ、そういや。
今はGetMessageにタイマースレッドとメインスレッドを組み合わせているから関係ないが。
0663名前は開発中のものです。2013/11/10(日) 13:46:45.40ID:NUelFT18
http://codepad.org/Vx38Y7XI
0664名前は開発中のものです。2013/11/10(日) 13:55:30.97ID:NUelFT18
↑まずこの土台の中で、抜けてる考えが無い前提の上で、話してるんだよな?

> 今はGetMessageにタイマースレッドとメインスレッドを組み合わせているから

ちょっと引っかかったけど、GetMessageってただ単にOSのメッセージキューからメッセージ引っこ抜いて構造体に詰めてくれるだけ、かつ
取得するまで処理が返らない訳だから、書かれてる内容から察すると、要は別スレッドから OSのメッセージキューにお構いなしにブチ込んで
自分のやりたい処理はウィンドプロシージャへのディスパッチ経由で動かしてるって言う、なんか変に遠回しな方法になってるけど
そこら辺の動作はちゃんと見えてる上で、設計してるか?
0665名前は開発中のものです。2013/11/10(日) 14:04:21.67ID:YibCAKGF
そこら辺は俺もちょっと気になった。ループがタイマーに依存するから、
常にアイドルイベント発生させて、そっちでやったほうが良いような・・・
0666名前は開発中のものです。2013/11/10(日) 14:09:57.12ID:SiZkRCd6
昔のコードを見るのは久しぶりだな。土台の部分は
while (GetMessage(&amp;msg, NULL, 0, 0))
{
TranslateMessage(&amp;msg);
DispatchMessage(&amp;msg);
}
ままだよ?WinProcは最近は全然いじってない。
主にいじるのはメインスレッドだけ。
0667名前は開発中のものです。2013/11/10(日) 14:10:22.48ID:YibCAKGF
いや、そういえばマルチスレッドか。
メインスレッドはどういう処理を司ってるの?
0668名前は開発中のものです。2013/11/10(日) 14:18:19.26ID:7FOwMs/k
我はメインスレッド
世界を司るものなり
0669名前は開発中のものです。2013/11/10(日) 14:19:11.46ID:YibCAKGF
>>668
ワロタw
0670名前は開発中のものです。2013/11/10(日) 14:19:41.06ID:NUelFT18
>>666
自分の設計による実装都合の範疇だから良い悪いを言う話じゃないが、そこに書かれてる動作って基本的に、

「OSと言うプログラム側が行っている、一番大きな、こちらからは見えないレイヤのループの中で、
OS管轄のメッセージキューにメッセージが放り込まれるまで 『待機する』 形式」 なので、

それで要件が間に合うならそれでいいし(例えばOSベンダ提供のAPIを単に利用したユーティリティとか)、そうでないなら違う。
そこの意味と切り分けをした上での選択であれば、普通の処理だよ。

そしてメインスレッドってのは、そのメッセージループを 「OSと言うプログラムが、自分のアプリケーションコードを、エントリ関数から実行している最初のスレッド」 の事なので

> 主にいじるのはメインスレッドだけ。
↑この言い様と書かれたコードの間に差異があるように見える。
0671名前は開発中のものです。2013/11/10(日) 14:28:22.95ID:SiZkRCd6
メインスレッドでゲームの主な処理全般をやってて、WinProcがレストア対策とかを、
タイマースレッドはこんだけ。
DWORD _DrawTim(LPVOID pParam)
{
while(g_boolTimeLoop)
{
Sleep(DRAW_TIME_WAIT);
SetEvent(m_hMainEvent);
}
PostMessage(g_hWnd,WM_SYSCOMMAND,SC_CLOSE,NULL);
return 0;
}
0672名前は開発中のものです。2013/11/10(日) 14:29:39.91ID:NUelFT18
あぁ、もしかして >>666 が言っている 「メインスレッド」 って、いわゆるメインスレッドじゃなくて、
「自分で別に起こした、ゲーム処理用のスレッドの事」 の事か。

で、OS側とのポンプを行うディスパッチは、「本当のメインスレッド側に任せている」 みたいな。
もしもそういう意図で言ってるならいいんじゃねと思うが。多分にエスパーだけど。
用語に齟齬がある感じか?
0673名前は開発中のものです。2013/11/10(日) 14:33:41.51ID:SiZkRCd6
>>672
ああ、そういう事を聞きたかったのか。理解力が無くてすまん。
それで当たってる。
■ このスレッドは過去ログ倉庫に格納されています