ゲームプログラミング相談室【Part6】
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
04/03/06 01:25ID:d2e/eEyg扱う話題のダイナミックレンジはやや広め。包容力高め。
他の初心者質問スレとの棲み分けを探りつつ
これからもマターリと活用しておくれ。
■過去スレ
【Part2】http://pc.2ch.net/tech/kako/985/985540361.html
【Part3】http://pc.2ch.net/tech/kako/1002/10028/1002894129.html
【Part4】http://game.2ch.net/gamedev/kako/1005/10050/1005040025.html
【Part5】http://pc2.2ch.net/test/read.cgi/gamedev/1036410116/
■関連スレなど
>>2-5
0566名前は開発中のものです。
05/03/20 05:27:02ID:oSFOPQ/k喪前は
人間やめちゃえ!!
0567名前は開発中のものです。
05/03/20 05:28:52ID:oSFOPQ/k無能な上司の下で
デスマーチ頑張ってねwww
0568名前は開発中のものです。
2005/03/29(火) 09:19:19ID:NLg6bdst大手ゲームメーカーって言ってるところが笑えるな
腕に自信が無いんだろうな
0569名前は開発中のものです。
2005/03/29(火) 19:21:00ID:UxPYIf8bま、下請けでも強弁すれば「大手でプログラマ」と言い張れないこともないし、
内部事情を知らない厨房の嘘だと決め付けるのもアレかねぇ。
0570名前は開発中のものです。
皇紀2665/04/01(金) 11:07:39ID:2DNa+8SZ0571名前は開発中のものです。
2005/05/10(火) 22:31:50ID:qbemgZao敵の動きを一つずつRubyのマルチスレッド機能で処理するのは良くないですか?
羽虫みたいのが画面一杯に湧いてくるのを蹴散らす場面があるので、弾幕STG並の負荷になると思われます
動作環境はWindowsXPが動いてるメーカー製PCなら例外なく動くようにしたいです
0572名前は開発中のものです。
2005/05/10(火) 23:03:32ID:xTojRoxkゲームに限っては、の話ですが。
マルチスレッドよる処理は、そうする必然性がない限り、お勧めしません。
特にあなたが提案するケースの場合、環境によっては
「自機の処理が行われないまま一つの弾丸にばかり処理権が連続して行く」
事態が、最悪、想定されます。
すると、DIOの世界(ザ・ワールド)に攻撃されたかのような
理不尽な死が体験できることになります。
やめたほうが無難ですよ。
また、世界(ザ・ワールド)現象を回避するために
各キャラの処理一回につき他のスレッドと同期を取った場合、効率は最悪です。
普通にシングルスレッドで処理した方がよっぽど効率的です。
テクに走りたい気持ちはとっても理解する。
そう思っていた時期が俺にもありました。
でも、シンプルかつ愚直に作るのが最善の道であることも多いのですよ。
0573名前は開発中のものです。
2005/05/11(水) 08:43:01ID:6LEYouSHありがとうございます
シングルタスクでやるっていうと
タスクコントロールブロックとかいうやつですよね
初心者向けに解説してある本とかサイトとかがあれば教えてもらえませんか
やね氏の本で扱ってるっていうのを聞いて(プロフェッショナルの続編だったかな)立ち読みしてみましたが
あれだとよくわからんかったです
0574名前は開発中のものです。
2005/05/11(水) 12:26:25ID:KXICTm7E別にそんなたいそうなものじゃなくても
考え方の基本を1フレームずつの処理に変えればいいだけ。
0575名前は開発中のものです。
2005/05/12(木) 20:29:44ID:aQoHjmWQ日本語で詳しく説明している書籍かサイトはありませんか
0576名前は開発中のものです。
2005/05/24(火) 16:19:08ID:v7WpxIBqこれを回避するにはどういうコードを書けばいいんですか?
0577名前は開発中のものです。
2005/05/24(火) 17:14:36ID:NGCTpyCND3DSWAPEFFECT_COPY_VSYNC?
それともここらへんが参考になるか?
ttp://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=28142
0578名前は開発中のものです。
2005/08/12(金) 14:16:54ID:CaToi4lwゲーム製作には構造化の方が向いている気がするんですが。どう思います?
0579名前は開発中のものです。
2005/08/12(金) 16:50:57ID:+xjZsnhE0580名前は開発中のものです。
2005/08/24(水) 09:49:40ID:NGiAd0T20581名前は開発中のものです。
2005/08/26(金) 19:17:31ID:vVPZkYc6数学や物理の勉強から始めた方がいいのでしょうか?
0582名前は開発中のものです。
2005/08/26(金) 19:29:34ID:6D6lM3q9物理なんて当面は高校卒業程度の知識で十分だ
0583名前は開発中のものです。
2005/08/26(金) 19:33:27ID:vVPZkYc6高校の頃は文系だったので科学はやってましたが物理は全くやってないんです
0584名前は開発中のものです。
2005/08/26(金) 21:35:57ID:hMfPlAPs算数やっとこう。それさえできれば後は勘。
0585名前は開発中のものです。
2005/08/26(金) 21:46:40ID:D8UBXRK80586名前は開発中のものです。
2005/08/26(金) 21:57:23ID:q0ihkIeI0587名前は開発中のものです。
2005/08/27(土) 00:57:00ID:4R6gqBFc俺ド素人だし、しかも仕事にしようと思ったらそんな生半可な気持ちじゃ・・・・
0588名前は開発中のものです。
2005/08/27(土) 01:15:27ID:ZquWVtNIゲームプログラミングなんて漠然とし過ぎだって
0589名前は開発中のものです。
2005/08/27(土) 01:18:02ID:4R6gqBFcアクションとかRPGとか
0590名前は開発中のものです。
2005/08/27(土) 03:15:29ID:+qa4qoicつか、仕事にするんじゃこんなとこで聞くなよ
それっぽい定番の本買って、そこから参考文献のリンクやら必要な資料を辿って必要なことから身につけろ。
0591名前は開発中のものです。
2005/08/27(土) 03:20:16ID:4R6gqBFc0592名無しさん@そうだ選挙に行こう
2005/09/11(日) 01:44:55ID:VkAkPVlEver9しかないみたいなんだけど、
ひょっとしてもう8は
CD付きの古本とか探すしかないですか?
98SEだと9のSDKが使えないらしいんで…
(入門サイトに2000以上って書いてた)
0593名無しさん@そうだ選挙に行こう
2005/09/11(日) 11:35:06ID:2BgVInhkつMicrosoft download
0594名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:27:23ID:3zrye/oeここですよね…
ttp://www.microsoft.com/downloads/results.aspx?NextOrPrevClause=6%7c%2b6562&
productID=9C954C37-1ED1-4846-8A7D-85FC422D1388&CategoryID=&freetext=&
DisplayLang=en&DisplayEnglishAlso=&sortCriteria=popularity&startDate=&period=0&
type=&sortOrder=ascending&nr=20
何遍見ても8本体が見つからない_M○
ランタイムやupデータはあるのに…
探し方悪いのかな
0595名前は開発中のものです。
2005/09/19(月) 23:40:13ID:92cy+6KO8は9の中にあるんだけどな。
0596名前は開発中のものです。
2005/11/30(水) 18:14:19ID:NRCIXxVfCをマスターしていればC++のマスターにどれくらい労力がかかるとか。
0597名前は開発中のものです。
2005/11/30(水) 20:18:12ID:/kKwaLK2しかし構文などは似ている部分が多いので、
C++を扱ってた人ならすぐ修得できるよ。
0598596
2005/11/30(水) 20:46:37ID:NRCIXxVfなるほど。ありがとう
ついでに聞いておきたいんだが、そこから派生してWindowsプログラミングってのはやっぱり難しいんだろうか?
今はCでのいわゆるコンソールアプリってのを学んでいる訳なんだが……。
0599名前は開発中のものです。
2005/11/30(水) 22:15:01ID:3MglgmXZいやいや、互換性はあるから。
基本的に、C++ は C に仕様を追加したものだから。
そりゃ、細かいところではルールが違うとかはあるけどさ。
C++ のソースコード内に C のコードを書くことはできるよ。
だから…
- 最初は C で書いて、後々 C++ に書き直す
- C++ で書いていって、どうしても分からない場所を C で書く
っていう勉強方法が使えるよ。
0600名前は開発中のものです。
2005/11/30(水) 22:18:26ID:3MglgmXZ> そこから派生してWindowsプログラミングってのはやっぱり難しいんだろうか?
Windows の API は C ベース。
なので、最低限 C のコードを書ける程度の力は必要です。
ともあれ、「猫でも分かるプログラミング」を見て勉強してみることをお勧めします。
0602名前は開発中のものです。
2005/12/25(日) 18:32:09ID:QPxHAtwCHandleクラスやHandleMgrクラス内に出てくるマジックナンバーとは、一体どのような役割をする為のものなのでしょうか?
本を読んでもソースを読んでも、全く何のために存在するものなのか理解できません。
初歩的な質問かもしれませんが、マジックナンバーとは何なのか、解る方教えて下さい。お願いいたします。
0603名前は開発中のものです。
2005/12/25(日) 21:16:44ID:10j12RX3Handle のマジックナンバーは、
ハンドルが指すオブジェクトを区別するためのID(識別値)。
詳しく説明すると、
HandleMgr はメモリを節約するためにデータ配列の同じ位置を何度も再利用する。
そのため、ハンドルを参照したとき、それが指す位置のオブジェクトが入れ替わっている可能性がある。
これを判断するのに必要なのがマジックナンバー(=ID)。
例えば、下の様なデータ配列があるとする(数字はID)。
データ { 1, 2, 3 }
このとき 0 番目のハンドルを取得する。
ハンドルA { index=0, ID=1 }
次にIDが 1 のオブジェクトをデータから削除すると、その位置は空になる。
データ { 0, 2, 3 } // 0 番目に 0 が入った
次にオブジェクトをデータに追加すると新しい ID が割り振られ、空の位置に入る。
データ { 5, 2, 3 } // 0 番目に 5 が入った
このとき、さっき作ったハンドルAを参照してみる。
データの ハンドルA.index 位置の ID は 5。
ハンドルA.ID は 1。
ID が一致しないので、ハンドルは無効になった(オブジェクトは削除された)と分かる。
逆に ID が一致した場合は、ハンドルが指す位置のオブジェクトは存在していると分かる。
0604603
2005/12/25(日) 21:17:35ID:10j12RX3とまあこんな感じに、マジックナンバーは、ハンドルの指す位置のオブジェクトが、
ハンドル取得時と同じオブジェクトであるかどうかの判定に使われている。
これで分かんなかったら、
上の例と同じケースをマジックナンバーを使わずにやった場合を考えてみると良いよ。
0605602
2005/12/26(月) 03:37:22ID:XvOO4Glh返信ありがとうございます。
非常に丁寧に解凍して頂いてありがたいです。
マジックナンバーが識別子であると言うことを理解し、順を追って考えたら理解することが出来ました。
0606名前は開発中のものです。
2005/12/30(金) 22:08:40ID:0oupnfaCスーパーマリオワールドのマップが自分で作れるエディタ
http://www.pankura.org/archives/005368.php
これみたいに、アニメのプレビューができるマップエディタを作りたいです。
アニメ部分のプレビューの実装でつまづいてます。
どんな実装にすればよいか情報いただけるとありがたいです。
0607名前は開発中のものです。
2005/12/30(金) 23:30:17ID:aGBuMIZJstruct _anime_chr {
int number;
int max;
int **anime;
} anime_chr[MAP_PATTERN_MAX];
int map[MAP_Y_MAX][MAP_X_MAX];
int main(void) {
int i, x, y;
while (1) {
for (i = 0; i < MAP_PATTERN_MAX; i++) {
_anime_chr *anime = anime_chr[i];
if (++anime->number > anime->max) {
anime->number = 0;
}
/* マップチップをタイルに転送する */
TransferChipToTile(i, anime->anime, anime->number);
}
for (y = 0; y < MAP_Y_MAX; y++) {
for (x = 0; x < MAP_X_MAX; x++) {
/* マップ番号を元に、タイルをVRAMに転送する */
TransferTileToVram(x, y, map[y][x]);
}
}
}
}
こんな感じでどうだ。中身は自分で考えて!
0608名前は開発中のものです。
2006/01/14(土) 12:30:32ID:pizx291y言語は問いません
0609名前は開発中のものです。
2006/01/14(土) 12:36:40ID:p1M3DQqdhttp://jp2.php.net/get/php-5.1.2.tar.bz2/from/jp.php.net/mirror
0610名前は開発中のものです。
2006/01/14(土) 12:40:01ID:ldillV2zスクリプトを実装して何をしたいかを、教えてもらえれば
サンプルを載せま〜す。
0611名前は開発中のものです。
2006/01/14(土) 14:12:50ID:ENjm6BLu<?= ?>があれば楽にノベルが作れそう。
0612名前は開発中のものです。
2006/01/14(土) 14:21:04ID:p1M3DQqdだからこれを使えよ。
自分のプログラムに取り込むことも出来るし、拡張も出来る。
何が不満なんだ?
0613名前は開発中のものです。
2006/01/14(土) 15:00:41ID:ENjm6BLu0614名前は開発中のものです。
2006/01/14(土) 15:20:52ID:p1M3DQqd0615名前は開発中のものです。
2006/01/14(土) 15:43:22ID:FTUE3moY0616名前は開発中のものです。
2006/01/14(土) 15:52:59ID:IKOpDFffコア部だけなら100k切るし。
0617名前は開発中のものです。
2006/01/14(土) 16:24:39ID:9Bbt7+hj0618名前は開発中のものです。
2006/01/14(土) 18:07:00ID:p1M3DQqdDLL化すらする必用もなくプログラムに組み込める。
ソースのリンクまで張ってあるのに、なんでその程度のことすら確認しないんだろう。
0619名前は開発中のものです。
2006/01/14(土) 19:32:16ID:XGcvBkdjPHPを使うってのは聞いたことないな
0620名前は開発中のものです。
2006/01/14(土) 19:43:15ID:j0Ue+PIMサウンドは、MIDINのストリーム再生とかやってるわけ?
0621名前は開発中のものです。
2006/01/14(土) 20:40:32ID:ENjm6BLuえー、本当に?
PHP側のソース変更なしで出来るなら、もっと使われてると思うけどなぁ。
0622名前は開発中のものです。
2006/01/14(土) 21:57:58ID:zrpnKi1a0623名前は開発中のものです。
2006/01/17(火) 17:27:10ID:5EkVe52dこの本ってどうかな。
というかまだ出てないんだけど。
買うか激しく迷ってる。
0624名前は開発中のものです。
2006/01/17(火) 18:34:07ID:OAcYDX6e頼んだぞ!
0625名前は開発中のものです。
2006/01/17(火) 21:01:42ID:MfScR0E60626名前は開発中のものです。
2006/01/17(火) 21:43:04ID:YlbHfDfM考えてるんだけど、馬の速さのバランスを考えるのが難しい・・。
ちょっと速い馬を作ろうと考えたらえらく速くなったり、逆をすると
えらく遅くなったり・・。
なんかコツって無いかな?
競馬ゲーム作った事ある人いない?
0627名前は開発中のものです。
2006/01/17(火) 21:51:41ID:a7PR7pCq前半でスタミナを温存した馬は、ラストスパートでダッシュできるようにすればいい。
0628名前は開発中のものです。
2006/01/17(火) 21:54:11ID:PElCyB9t個々の馬を勝手に走らせるんじゃなくて、全体を見る視点を入れてみたらどう?
たとえば、混戦を演出したいんだったら、重みをつけてみるとか。
馬群の平均位置より後ろにいる馬には、根性補正をかけて足を早くする。
逆に平均位置よりも前にいる馬には、油断補正をかけて足を遅くする。
0629626
2006/01/17(火) 22:13:17ID:YlbHfDfM>>627,628
ちなみに一応
力、
スタミナ、
スピード
調子
のパラメタを持たせてる。
あと追いか逃げで二つのタイプを作ってる。
そんで、力が強い方が馬同士がぶつかった時に相手からスタミナを奪え
るようにして、調子がいい方が持ってる最高スピードで走れるようにしてる。
スタミナが無くなると遅くして、あまってたらラストスパートができるように
してる。
まぁ結局いろいろパラメタを作ったんでそれらを上手く調整できなくなっ
ちゃってるのよね・・。
でも628が出してくれた案はなるほどーって感じ。
ちょっと実装してみます!
0630名前は開発中のものです。
2006/01/19(木) 12:30:42ID:abptcwuQそこでこんな書籍が参考になる等アドバイスを頂けたらありがたいのですが
よろしくご教授のほどお願いします
0631名前は開発中のものです。
2006/01/19(木) 12:37:44ID:FNLWz9b/0632名前は開発中のものです。
2006/01/19(木) 12:43:06ID:abptcwuQわかりました自分で調べます
0633名前は開発中のものです。
2006/01/20(金) 03:49:36ID:AJrpxY2i3Dゲームを作るには、OpenGLやDirectXといったAPIの知識の他に、
数学 (3次元の幾何) も必要になる。
お前さんの数学レベルにもよるが、得意でないならこの本は読んでおくといい。
(中学レベルから高校レベルまで、必要な部分だけを効率的に書いてある)
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797329076/249-0216458-7341971
読み終えたら、同じシリーズのこれかな。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797331976/ref=pd_bxgy_text_2/249-0216458-7341971
このシリーズは初心者が挫折しかねない内容をあえて省き、
逆に初心者は知らない怖れがある内容は簡単なことでも解説する、
というスタンスで書かれていると思った。
いきなり網羅的な本を読むと途中で挫折する怖れがあるから、
この2冊を読んで動くものを作ってみて、
物足りなくなってきたらもっと詳しい本を読めばいいと思う。
0634名前は開発中のものです。
2006/01/20(金) 04:01:10ID:AJrpxY2i確かに技術は向上するが、近道ではないと思う。
探す時間を読むのに割り当てたほうが効率的。
(自分で解決しないのが癖になったら問題だが)
0635名前は開発中のものです。
2006/01/20(金) 05:04:24ID:cuy72tDdDirectPlayでピアツーピアアプリを開発しようとしていたのですが、WEBで検索していて、
以下のように変化してきています。
1.ピアツーピアは NAT 越えできないから、費用かかってもクラサバでやるべきだろう。
2.DirectPlay は推奨されていない(MS自身を含めて)から Socket でやるべきだろう。
で、今はサーバーを NAT の外に置き、クライアントはどこでも可、通信は Socket で行う。
という環境を想定しています。
そこで以下の疑問が発生して悩んでいます。
1.部分的に UDP を使いたいのですが、UDP もやはり NAT 越え出来ないのでしょうか?
今回の環境でいうと クライアントからの送信は UDP で行えるが、サーバーからクライアント
への送信に UDP は使えないのでしょうか?
2.速さを要求する部分には UDP を使うべきでしょうか?TCP-IP と UDP ではかなり差があるもの
なのでしょうか?
どうかよろしくご教授下さい。
0636名前は開発中のものです。
2006/01/20(金) 05:54:22ID:ts2pcmWN本代を惜しむな。
0637名前は開発中のものです。
2006/01/20(金) 08:22:06ID:2iTzpS+yまずNATとIPマスカレードを混同するのをやめること。
それからIPマスカレードでUDPが使えなかったら、ドメインを引くことすら出来なくなるぞ。
0638名前は開発中のものです。
2006/01/20(金) 08:28:59ID:xWSHaoVX0639名前は開発中のものです。
2006/01/20(金) 10:45:30ID:cuy72tDd>>IPマスカレードでUDPが使えなかったら、ドメインを引くことすら出来なくなるぞ。
えーと、DNSサーバーへの問い合わせにはUDPが使われているのでしたよね?
>>NATとIPマスカレードを混同するのをやめること。
ちょっと勉強し直してきます。
0640名前は開発中のものです。
2006/01/20(金) 13:09:31ID:cuy72tDd板違いなような気がする初歩的な疑問がわいてきたのですが、どうかお教え下さい。
NATと静的IPマスカレードは以前ルーターに設定した事があり、外側からアクセスできる事
も確認していました。でも普通のIPマスカレードに関しては特に設定した事がなく、きっと設定
が難しいのだろうと関わらないようにしていました。
ところが今勉強してきた内容によると、特にルータへの設定はいらないと思ったのですが、こ
れは正しいのでしょうか?
最近のルーターは特に設定しない限り(グローバルIP設定等の設定以外)IPマスカレードが
基本なのでしょうか?
0641名前は開発中のものです。
2006/01/20(金) 13:40:27ID:cuy72tDd>まずNATとIPマスカレードを混同するのをやめること。
外側からアクセスできないのはIPマスカレード(動的)の場合のみという事で正しいでしょうか?
>それからIPマスカレードでUDPが使えなかったら、ドメインを引くことすら出来なくなるぞ。
UDP も IP も扱いは同じと言う事でしょうか?
となるとやはり、IPマスカレードの場合、ゲートウェイ内部から外側へのアクセスはできるが、外側から
内側へのアクセスはできないという事になるのですか?UDP、IPに関わらず。
あ、またちょっと勉強してきます。
0642名前は開発中のものです。
2006/01/20(金) 16:06:33ID:f4A/Q0C3WM_PAINTが呼ばれたときのみ描画するという方法以外に何かないでしょうか。
ありましたらご教授願います。
0643名前は開発中のものです。
2006/01/20(金) 18:36:33ID:kMfWH2Ff徹底的に軽量化しる。あとWM_PAINTを使うのはなんか間違ってる希ガス
0644名前は開発中のものです。
2006/01/20(金) 21:52:48ID:lXuWX4xzFPSちゃんと考えてる?
0646642
2006/01/20(金) 22:13:41ID:1+fLDQsB返答ありがとうございます。
>>643
十分軽くしてるつもりなんですが・・・。
>>644
考えてません。タスクシステムを使えということでしょうか。
0647名前は開発中のものです。
2006/01/21(土) 04:36:25ID:mg8wRruj0648名前は開発中のものです。
2006/01/21(土) 10:52:47ID:FcJBx5+Jまずは部分毎に時間を測って
どの処理に時間が掛かっているのか特定しよう。
0649名前は開発中のものです。
2006/01/21(土) 11:12:25ID:E5l3VzaB0650642
2006/01/21(土) 11:39:57ID:7OciQh2jif(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
if(msg.message == WM_QUIT)
break;
else {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else {
Paint(); // 描画処理です
}
Sleep(1);
}
0652名前は開発中のものです。
2006/01/21(土) 11:57:20ID:cOBg8t3k0653名前は開発中のものです。
2006/01/21(土) 11:59:39ID:7OciQh2j返答ありがとうございます。さっそくやってみます。
0654名前は開発中のものです。
2006/01/21(土) 12:17:55ID:E5l3VzaB0655名前は開発中のものです。
2006/01/21(土) 12:24:15ID:gndLCiDdうちはこんな感じ。スレッドなんかいらんw
INTRun()
{
MSG msg;
msg.message = WM_NULL;
PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE);
while (WM_QUIT != msg.message)
{
if (PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE))
{
if (GetMessage(&msg, NULL, 0U, 0U))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else
{
//ゲームの処理へ
}
}
return (INT)msg.wParam;
}
0656名前は開発中のものです。
2006/01/21(土) 12:41:58ID:nqZd1DMC0657名前は開発中のものです。
2006/01/21(土) 12:41:58ID:FcJBx5+JPaint(); をコメントアウトした場合と
掛かる時間を比較しよう。
劇的に速度が違うなら Paint() の中に問題があるんじゃないのかな。
0658名前は開発中のものです。
2006/01/21(土) 12:58:21ID:gndLCiDdそうなん?どこが駄目か教えて。
ちなみに少し前のDirectXSDKサンプルのまんまです。
0659642
2006/01/21(土) 13:08:25ID:7OciQh2jみなさんありがとうございます。
>>655
うらやましい
>>657
大きな違いはありませんでした。
DirectXを使わなければ問題は起こらないので、初期化の地点で問題があるのかもしれません。
もう少し見直してみます。
0660642
2006/01/21(土) 13:54:29ID:7OciQh2jD3DCREATE_MIXED_VERTEXPROCESSING を
D3DCREATE_SOFTWARE_VERTEXPROCESSING に代えるだけでした。
まさか初期化にミスがあるとは思わなかったもので・・・。
アドバイスを下さった皆さん本当にありがとうございました。
0661名前は開発中のものです。
2006/01/21(土) 14:07:21ID:/mV6xXb2ここのサンプルを実行してみたのですが
画面消去の命令があるにもかかわらず、
画面が更新されないで指定画像が重なって表示されてしまいます。
ClsDrawScreen() ;だけが効いていないようなのですが、何が問題なのでしょうか。
ClsDrawScreen() ;をコメントアウトしてもしなくても同じ結果になります。
0662名前は開発中のものです。
2006/01/21(土) 15:26:20ID:+T+cr/VJSleepしないとCPUの処理時間を占有するからじゃないかなぁ…。
急いで書いたから汚いけど、スレッド分けるとセオリー的にはこんな感じかな?
DWORD WINAPI gMainLoop(LPVOID lpDone){//ゲームのメインループ
bool* pDone = dynamic_cast<bool *> (lpDone);
while(!(*pDone));//ここでループ
ExitThread(0L);
}
class CGameMain{/ゲームクラス
public:
CGameMain():done(false){CreateThread(NULL, 0, gMainLoop, &done, 0, NULL);}
~CGameMain(){done = true;WaitForSingleObject(hThread, INFINITE);}//スレッド終了
bool CGameMain::IsDone(void){return done;}
void CGameMain::Kill(void){done=true;}
private:
bool done;
HANDLE hThread;
};
// WinMain側の処理
MSG msg;
CgameMain *pGMain = new CgameMain();
do{
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)){
TranslateMessage(&msg);DispatchMessage(&msg);
}else{
if (pGMain->IsDone()) DestroyWindow(g_hWindow);
}
} while (msg.message != WM_QUIT);
delete pGMain;
0665名前は開発中のものです。
2006/01/21(土) 16:56:03ID:gndLCiDdスレッドの話をすると荒れるのでやめとこうw
0666名前は開発中のものです。
2006/01/21(土) 17:14:45ID:VeQ0DG52DirectXのサンプル自体はあくまでサンプルであって、
あくまでDirectXの機能を紹介するために作られただけであのままでは実用出来ない。
理由はサンプルのままだとFlip時にV-Sync相当のウエイトを入れているので、
フレームスキップや、動作が重くなった場合に描画以外の処理だけ先に進めることが出来なくなる。
逆にウエイトを外すと無限にぐるぐるまわすことになり、
ベンチマーク用に能力を測るのなら適切だけど、実際のプログラムとしては不適切。
またループの内側でSleepをすると、その間ウインドウメッセージが処理できなくなる。
だからDirectXの機能紹介と能力測定のサンプルとしては適切なソースでも、
実際のプログラムには不適切な書き方なんだよ。
■ このスレッドは過去ログ倉庫に格納されています