04/02/22 00:16 qoGQgaC2.net
>>132
そりゃaryはintなんだから、HBITMAPつっこもうとすればエラー出るだろう。
この場合で言えば、ary[x][y]にはhBitmapのインデックスだけ入れるべきかと。
まあこのマップ構成ならば、
int ary[3][3] = {0, 0, 0,
0, 1, 2,
0, 0, 0};
としておいて、描画する時は
SelectObject(hBuffer , hBitmap[ary[map_x][map_y]]);
とするのが正しいかと。
マップデータがでかくなってきたら、データをファイルに移してそこから読み込ませるようにすればさらに一歩前進。
あとせっかく配列を使ってるんだから、読み込みとか解放でも一個ずつやらんでループ使った方がいいんでは?
for(int i=0;i<3;i++) DeleteObject(hBitmap[i]);
ちう感じで。
134:124
04/02/22 00:20 qJjHo9kX.net
>>132
基本的には、一つの場所(街なら街、洞窟なら洞窟)のチップは全て
一つにまとめるのが普通だと思いますよ。
読み込むときに、「ファイルを探してー>読み込む」という手順を踏むわけですから、
一つにまとめておけば、一回探せば後は読み込むだけです。
135:98
04/02/23 00:24 yOz6UeEe.net
>>133
ありがとうございます!できますた!
>マップデータがでかくなってきたら、データをファイルに移して
これはdllというのでしょうか?まだ全然やってない分野です。
>>134
さっそく真似しようとしたんですが、絵をまとめるとソースが長くなる、
ソースまとめると絵がまとめられない、という状況になってます・・
いろいろ問題が出てきてしまったけど、前半最大の山場と思われる
マップスクロール実装にとりかかってみます。
136:名前は開発中のものです。
04/02/23 01:41 tZlxc2xv.net
>>135
>>マップデータがでかくなってきたら、データをファイルに移して
>これはdllというのでしょうか?まだ全然やってない分野です。
普通にマップ構造を記述したファイルを読み込むだけだと思うんだけど、
そうしないとマップをちょっといじるだけで再コンパイルせにゃならんし。
137:98
04/02/24 19:40 +E54f9HV.net
>>136
リソースからは読み込めたんですが、デメリットしかないので、これではないですよね・・
xxx.txtから読み込めるとしたら、メリットがかなりありそうなんで、もうちょっと調べてみます。
なめらかスクロールは処理が多そうなので、まずは
キーを押したら1マス(32ドット)瞬間移動プログラム↓
URLリンク(www.geocities.co.jp)
goto使ってしまった orz
138:名前は開発中のものです。
04/02/24 20:01 Y7quTbTQ.net
>xxx.txtから読み込めるとしたら、メリットがかなりありそうなんで、もうちょっと調べてみます。
fopenやfgetsを使ってファイルを操作したことないのか…?
139:名前は開発中のものです。
04/02/24 20:03 HARgZ9D7.net
InvalidateRectしてるなら明示的にWM_PAINTにジャンプしなくても次のメッセージループでWM_PAINT呼び出してくれると思うが・・・
もしやるとしても、gotoじゃなくcase WM_KEYDOWNの下にcase WM_PAINTをおいといて、breakを書かない、という風にした方がいいんじゃないかな。
140:98
04/02/24 21:07 +E54f9HV.net
>>138
ファイル操作はゲームに関係なさそうだったので、ほとんど勉強してないです。
fopenというのを調べて出直してきます。
>>139
今、gotoなしでやってみたんですが、不正終了?みたいになりました。
>gotoじゃなくcase WM_KEYDOWNの下にcase WM_PAINTをおいといて
こっちでは大丈夫でした。
caseって全部並列なものかと思ってたんですが、順番関係あるんですね
141:名前は開発中のものです。
04/02/24 21:28 HARgZ9D7.net
>>140
goto抜いたらbreakつけなきゃダメよ(;´Д`)
breakつけないと、次のcaseラベルが実行されるから、この場合だとWM_CREATEが実行されてまう。
不正終了は多分そのせいかと
142:名前は開発中のものです。
04/02/24 21:30 HARgZ9D7.net
>ファイル操作はゲームに関係なさそう
データファイルがないゲームなんてそうそうないと思うが・・・
最低でもセーブデータとか作るためにはファイル操作は不可欠だろう
143:名前は開発中のものです。
04/02/24 21:34 QzqFx48f.net
RPGの半分はデータベースで出来ています
144:名前は開発中のものです。
04/02/24 22:31 kFyAt63U.net
>>137
>リソースからは読み込めたんですが、デメリットしかないので、これではないですよね・・
いや最終的には、画像などのデータはリソースにまとめたほうが良いよ。
ただしバイナリのリソースね。画像なら、RGBデータの形で持つ、とか。
画像については、RGB配列(DIB)の扱いを練習しておいたほうが良いかも。
キャラクタの透過描画や画面の特殊効果などさまざまな場面で必要になって
くる。
145:98
04/02/25 19:38 g+59HVuE.net
>>141
あ、なんとなく理解しました。break;の代わりにreturn 0;でもいいってことですね。
>>142
作り始めた当初は、セーブが必要になるほど長いゲームは作れない気がしてたので。
いざとなったら ふっかつのじゅもん にすればファイル操作いらないな、とか思ってました。
>>143
まだシナリオとか考えてないんで、データベースの半分は手抜きです。になりそう・・
>>144
ぱっと見で難しそうだったんで、まだほとんどやってないですが、ちょっとずつやってみます。
146:名前は開発中のものです。
04/02/25 19:52 MjBoX65v.net
>>145
この場合はreturn 0;でも動くけど、出来る限りbreakは書くクセをつけるべきだと思う。
147:98
04/02/29 18:24 Ycy/2GWo.net
DIBが理解できなくて停滞中
148:名前は開発中のものです。
04/02/29 18:41 gj9x0Pg+.net
素直にJ-RPG使っとけ
149:98
04/02/29 19:41 Ycy/2GWo.net
C++でRPG作るのが目標なので、遠慮しときます
150:名前は開発中のものです。
04/02/29 20:14 CI/gdVj9.net
>>147
どの辺が分からんの?
151:98
04/02/29 21:21 Ycy/2GWo.net
一つのbmpファイルをウィンドウに複数表示はできるのですが、
複数のbmpファイルを表示させようとするとメモリ不足とか言われます
152:名前は開発中のものです。
04/02/29 21:30 CI/gdVj9.net
ソースを張ってくれないと何とも言えない
153:98
04/02/29 21:49 Ycy/2GWo.net
単一bmpファイル敷き詰め↓
URLリンク(www.geocities.co.jp)
複数bmpファイル表示(コンパイルは通るけれど実行注意)↓
URLリンク(www.geocities.co.jp)
下のは実行するとやばいので、コンパイルする人もしいたら気をつけてください
何か、根元から間違えてるような気がする。。
154:名無しさんは14才
04/03/02 17:40 W0CJyzOg.net
マカーのくせに口出ししてごめんね。
WinのAPIはほとんど触ったことないから半分カンなんだけど。
DrawMapの話だけど、せっかく定義してるのにMaparyをつかってないんじゃない?
icは4になってると思うから、添え字が範囲外なんじゃないかしら。
StretchDIBits(hdc , 32*map_x , 32*map_y , iWidth[Mapary[y][x]],(以下同)
みたいにしたかったんじゃないの?
というか、各BMPのサイズが同じなんだから、わざわざ画像からサイズ取得しないでも
StretchDIBits(hdc , 32*map_x , 32*map_y , 32, 32, 0, 0, 32, 32, lpPixel[Mapary[y][x]](以下略)
と書いちゃえばいいような気がする。
そんなカンジでがんばれ~。
わたしは当分応援モード。
155:124
04/03/02 18:49 0D6IPbfs.net
>>153
いきなりRPGは無謀スギかも。
でもがんばってるみたいだから応援するよ。
ちょっと今時間無いんで、時間出来たらマップ表示を
HSPからCに書き直したものをアップするよ。
まあ、そのときには解決してるかもしれんが…
>>154
>というか、各BMPのサイズが同じなんだから、わざわざ画像からサイズ取得しないでも
>StretchDIBits(hdc , 32*map_x , 32*map_y , 32, 32, 0, 0, 32, 32, lpPixel[Mapary[y][x]](以下略)
>と書いちゃえばいいような気がする。
あんまり定数はプログラム中には入れない方がいいと…
小規模ならマクロでも良いかもしれんが、constとかやるのがいいのでは?
ここはBMPからサイズ取得が一番良いかもしれんね。
156:98
04/03/02 21:58 YGTCiQU4.net
>>154
混乱してて、Mapary使うの忘れてました。
問題点を分かりやすくするために、StretchDIBitsの部分はとりあえず定数にしてみます。
>>155
javascriptで簡単なゲームは作ったことがあるんですが、C/C++でプログラム組むのは
初めてなんで、かなり無謀だとは思ってます。
マップ表示はたぶんできるんですが、その前に複数のbmpファイルを読み込むことが
できないんです。
デバッガ使ってみたところ、問題点らしきところは発見できたものの、なぜだめなののかが
分からない・・・
157:名前は開発中のものです。
04/03/02 22:18 euQtmlJ9.net
>>156
BMPの読み込み(BMPからのDIB作成)は、マップチップなら「ビットマップ
の大きさ」を決めておくと楽。そうすれば自動的にBMPに格納されている
DIBピクセル列の大きさも特定できるから、ただ「ピクセル列までのオフ
セットから決まったバイト数読み込む」だけの処理になるからね。
1枚のBMPからDIBを作成できるようになったら、BMPも「マップチップを縦
に並べたビットマップ」にしておけば、一枚のビットマップから連続して
読み込める(24ビットで横幅が4の倍数なら、横幅×高さ×3バイトずつ
区切って読んでいけばよい)。ただし、この場合はDIBの座標系に注意。
158:98
04/03/02 23:19 YGTCiQU4.net
>>157
一週間悩んでたのに、一瞬でできますた。
URLリンク(www.geocities.co.jp)
複数ファイルが読み込めないと何かが困るような気がしてたんですが、
ドラクエのようなものなら、困ることないですね。
159:98
04/03/04 20:15 UUYCFgVb.net
DIB版矢印キー押すと32ドット移動ウェイトつき
URLリンク(www.geocities.co.jp)
Sleep中は全ての処理が止まるのかと思っていたら、その間入力した
キーを記憶しているらしく、Sleep中のキー入力が反映されてしまう。
160:名前は開発中のものです。
04/03/05 02:41 dAc27ulc.net
>>159
タイマー使ってみたら?
自前でフラグ用意してtimeGetTimeではかっても良いだろうけど
161:98
04/03/06 17:58 9gF+FHHa.net
timeGetTime使ってみました。
URLリンク(www.geocities.co.jp)
まだキーが記憶されてしまいます。
MSDN調べてみたら、
The GetAsyncKeyState function determines whether a key is up or down at the time the function is called,
and whether the key was pressed after a previous call to GetAsyncKeyState.
なので、GetAsyncKeyStateを使うこと自体をやめるか、いったん破棄しないといけなかったみたいです
162:98
04/03/06 20:21 9gF+FHHa.net
瞬間移動完成。
URLリンク(www.geocities.co.jp)
微妙にゲームらしきものになってきた。
GetAsyncKeyStateのほうがゲームに適しているとどこかで見たけれど、
押したキーを勝手に記録してしまうため、使いこなせなかった。
次はキーを押したら16ドット移動を2回繰り返すものを作ろうと思う。
すでにDIB使ってるので、たぶん簡単にできるような気がする
163:名前は開発中のものです。
04/03/07 01:10 gNoMVuak.net
自分も2月の最初くらいからAPI始めた者です。
使用言語はCで、今のところテトリスとかボンバーマンもどきを作りました。
現在URLリンク(www.sm.rim.or.jp)を見ながら、
DIBを勉強中ですが、かなり苦戦してます。
>>98さんは何で勉強しましたか?良かったら教えて下さい。
164:名前は開発中のものです。
04/03/07 12:27 /QKwfpo/.net
>>162
そろそろファイル入出力もかじり始めた方がいいかもね。
DIBが使えるならファイル入出力はそんなに難しくはない・・・はず。
165:名前は開発中のものです。
04/03/07 13:40 Ha7O6gmU.net
なんでPeekMessage使ってるの?
166:98
04/03/07 14:44 /nCa36PZ.net
>>163
URLリンク(black.sakura.ne.jp)
ここと、MSDN見てます。
同じ時期に始めてもうボンバーマン作れるってすごい・・・。
>>164
DIBの前に少しかじったんですが、挫折しました。
xxx.iniというファイルを使えばいろいろできそうだけど、絶対パスで指定しなければいけない
ので、使えねー!ってところで思考停止してます。
難しくてトラウマになってるんですが、ここを乗り越えないとしょぼいゲームしか作れなそうなので
ちょっとずつやってみます。
>>165
昔の名残です。if(PeekMessage(&msg , NULL , 0 , 0 , PM_NOREMOVE))があってもなくても
同じだと思うので、使うときのために消していないだけです。
167:名前は開発中のものです。
04/03/07 15:08 gNoMVuak.net
>>166
レスありがとうございます。
そこも前から見てたんですが、分からないのです。
でも、同じのを見て出来る方がいるという事は自分の努力が足りないって事ですね。
もう少し修行してきます。
ボンバーマンは全部マスク画像を使ってAND・ORする方法でやったのでそんなに難しくは無かったです。
では。RPG製作頑張って下さい。
168:98
04/03/07 17:38 /nCa36PZ.net
>>167
俺もまだよく分かってないんですが、ちょっとずついじってれば使えるようになると思います。
汚くてよければ>>153と>>158にソースがあるので、よかったらドゾー
右スクロール時のみ16ドット移動を2回するプログラム
URLリンク(www.geocities.co.jp)
効率が悪すぎるような気がする。こういうのをスパゲティソースというのかもしれない。
(´-`)。oO(AND ORってなんだろう)
169:98
04/03/09 18:14 quioYjmo.net
C/C++始めて一ヶ月たったので、今回はEXEでうp(28.4KB)
URLリンク(www.geocities.co.jp)
次はキャラ表示をしようと思う。透過処理が難しそう。
170:名前は開発中のものです。
04/03/09 20:50 nDvOJ8eM.net
>>169
透過処理はAND OR
171:名前は開発中のものです。
04/03/09 22:45 sCetmjvX.net
>>169
透過処理は単に「抜き色を決めてその色以外を転送する」処理をすれば
よいだけ。キャラクタのDIBを1ピクセルずつ背景に転送していっても、
速度的には問題ない。
この場合は32ビットDIBだと楽だね(DWORD単位でアクセスできるから)。
172:98
04/03/11 19:38 e07lqvXR.net
>>170
AND ORでググルとグーグルにヌッコロされるのでだめです
URLリンク(www.google.co.jp)
>>171
肝心な部分が分かってないからなのか、実際にやろうとするとなぜかできないです。
URLリンク(www.geocities.co.jp)
1ピクセルずつ表示もやってみたんですが、俺のPCのスペックのせいか、若干遅く感じました。
ところで、俺はPCゲームはあまりやったことがないのでよく分からないんですが、
キャラが32*32ドットってどうなんでしょうか。どうも小さく感じます。
173:98
04/03/11 21:52 e07lqvXR.net
微妙にずれるものの、透過しつつキャラクタのDIBを1ピクセルずつ背景に転送は成功。↓
URLリンク(www.geocities.co.jp)
なめらかにスクロールさせるためにマップをtimeGetTimeで30msごとに描画しているんですが、
この透過方法だとキャラクタ描画処理が遅いため、歩行アニメーションをつけるときに
いろいろと苦労しそう。
メモリに読み込むときに透過処理をしたほうがよさそうだけど、なぜか透過しない。
174:98
04/03/12 20:39 grlqwW2o.net
上がソースで下が実行ファイル
URLリンク(www.geocities.co.jp)
URLリンク(www.geocities.co.jp)
問題点:画面がちらつく。キー入力を微妙に記憶してしまう。
次は街を作って、マップ切り替えをしようと思う。
どんなゲームにするかとかもそろそろ考えないといけないけど、そっちは興味がないので
適当に募集中。
175:名前は開発中のものです。
04/03/12 21:26 qU+SxdKI.net
>画面がちらつく。
CreateDIBSectionでオフスクリーンバッファを作るんだ!
ダブルバッファリングともいう。
>キー入力を
簡潔に説明するのは難しいんだが、今のキー押下処理→描画処理のやり方は
ゲームのつくりk他としては完全に間違ってる。
ゲームループとか検索してみるとわかるかもしれん。
他のスレのレスからヒントをば。
スレリンク(gamedev板:124番)
>タイマ(WM_TIMER)は不安定なので普通ゲームには使わないぞ。
>↓ここの1.4.1みたいに処理すべし。
>URLリンク(www.microsoft.com)
176:98
04/03/13 19:41 xCK866zy.net
>>175
キー入力はできますた。かなり操作性向上
DIBSectionが難しくててこずってます。
本の通りにDIBSectionを使ってるはずなのに、エラーが出るのはなぜだろう。
177:名前は開発中のものです。
04/03/14 08:15 wW4VHkXB.net
>>176
コンパイル時のエラーなら、型があっていない(またはSelectObjectなどが返す値を適切にキャストしていない)とか。
178:名前は開発中のものです。
04/03/14 17:48 a3XrN6fU.net
>>176
とりあえずエラーを貼り付ける。
179:98
04/03/14 22:20 13t3R65N.net
エラー E2034 zz53.cpp 135: 'void *' 型は 'HBITMAP__ *' 型に変換できない(関数 __s
tdcall WndProc(HWND__ *,unsigned int,unsigned int,long) )
エラー出るソース
URLリンク(www.geocities.co.jp)
(HBITMAP)つけてみたらコンパイルは通ったんですが、DIBSectionには何もさせていない
のに、強制終了します。
本はCで書かれているんですが、自分の書いてるのがたぶんC++なので、
そのへんの問題でしょうか。
180:名前は開発中のものです。
04/03/14 22:32 RZwlVtdf.net
>>179
>(HBITMAP)つけてみたらコンパイルは通ったんですが、DIBSectionには何もさせていない
>のに、強制終了します。
とりあえず、怪しいところをコメントアウトするなり変数の値を表示さ
せるなり(デバッガがあるならブレークポイントを入れる)してどこで
落ちるのか、特定してみた方が良いね。
>本はCで書かれているんですが、自分の書いてるのがたぶんC++なので、
>そのへんの問題でしょうか。
そうだね。
CとC++では、デフォルトの型チェックが違う。
C++でSelectObjectの返すハンドルをGDIのハンドルを保持する変数に
入れたいなら、個別にGDIのハンドルの型に合わせたキャストが必要。
まあ、拡張子をcにしてCのソースとしてコンパイルしても良いかもし
れんがw
ところで「本」って何の本?
181:98
04/03/14 23:00 13t3R65N.net
ゲームプログラミング練習帳 という本見てます。
デバッガですが、今問題にしている部分より前の段階ですでに止まってくれるので
使い物にならない状態です。止まる部分も、CとC++の違いのせいの気がします。
Cは全然知らないんですが、見ているサイトも本もCを使ってAPIの解説をしているので、
Cで書き直すのが早いような気がしてきました・・・
182:名前は開発中のものです。
04/03/14 23:21 gdC9c3eD.net
>>179
原因は133行目の&lpPixel。
hBMP = CreateDIBSection(hdc , &biInfo , DIB_RGB_COLORS , (LPVOID *)(&lpPixel) , NULL , 0);
↓
hBMP = CreateDIBSection(hdc , &biInfo , DIB_RGB_COLORS , (LPVOID *)(lpPixel) , NULL , 0);
おかしな指定をしたせいで、lpPixelのポインタの値が変な値に書き換わって壊れてしまっている。
HeapAllocしたときのlpPixelの値と133行目でのlpPixelの値を調べてみれば、壊れているのが分かるはず。
なぜ、上の指定の仕方ではいけないのか、とか、どうして値が壊れるのかとかは、自分で考えてみてね。
183:名前は開発中のものです。
04/03/14 23:32 gdC9c3eD.net
あぁ、97行目の
>iOffset = *(LPDWORD)(lpBMP + 10);//iOffset ピクセルが格納されてるアドレス、ここでなぜかデバッガ止まる
でとまるのは、BMPファイルが見つかってないからでしょ。多分。
ちゃんとCreateFileのエラー処理を汁!
あと、
>(HBITMAP)つけてみたらコンパイルは通ったんですが、
これは、Windows的には正しい。Cだと書かなくてもコンパイルと折るけど、
C++は型違いを厳密に見るから、型変換しないといけないわけだ。
184:182
04/03/15 00:06 mfA2vkrj.net
ごめn>>182は違った。
CreateDIBSection()なんか久しぶりに使ったから忘れてたよ。
>>179の使い方なら、
hBMP = CreateDIBSection(hdc , &biInfo , DIB_RGB_COLORS , NULL , NULL , 0);
でいいんじゃない?一応うごいたよ。
185:名前は開発中のものです。
04/03/15 00:14 BH49Bw7k.net
ちうか、CreateDIBSectionで作ったビットマップ使って無いじゃん…
あと、hdcをグローバル変数にするのはよくないと思う。
186:98
04/03/15 00:37 YR7Ealek.net
>>182
(LPVOID *)(lpPixel)でもNULLでも動きました。
CreateDIBSectionの第4引数にはポインタのポインタを指定しなければいけないのに、(LPVOID *)(&lpPixel)
だとアドレスのポインタのポインタだから間違いというところまでは分かったんですが、
Cだと(LPVOID *)(&lpPixel)が正しくて、C++だと(LPVOID *)(lpPixel)が正しいということは
ポインタの書き方がCとC++で違うということなんでしょうか。。
>>185
使おうとしてコンパイルエラーが出たので、まずは何もさせずにコンパイルできることを目指してました。
>hdcをグローバル変数にするのはよくない
ローカル変数の呼び出し方がよく分からないので、とりあえずグローバル変数にしてあります。
分かり次第直します。
187:名前は開発中のものです。
04/03/15 11:07 BH49Bw7k.net
>>186
>(LPVOID *)(lpPixel)
は間違い。
引数の指定の仕方としては、もとのソースの(LPVOID *)(&lpPixel)が正しい。
ただし、(LPVOID *)(&lpPixel)のままだと、CreateDIBSectioiでlpPixelが上書きされてしまうから
今度は透過処理の部分で今度は止まるよ。
CreateDIBSectionの説明をよく読んで、正しく使うべし。
>ローカル変数の呼び出し方がよく分からないので、とりあえずグローバル変数にしてあります。
まずは、そっちを勉強した方が良いよ。
188:名前は開発中のものです。
04/03/16 21:28 av2PqUu3.net
ローカル変数は関数の冒頭で処理を記述する前に宣言する。
C言語の場合はね。
C++はドコでも良いことになっている。
189:98
04/03/16 23:08 ALMDs/3/.net
難しくて混乱してきたのでちょっと整理
1.DIBとしてもDDBとしても操作可能なビットマップをCreateDIBSectionで作る
2.デバイスコンテキストを2つ用意する
3.デバイスコンテキストAに表示するマップより1マス分大きいマップを描画する。
4.AからデバイスコンテキストBに表示する部分だけ描画
5.Bから画面に描画
たぶんこうすればいいんだと思うんですが、4くらいで行き詰ってます。
hdcですが、仮引数とか使ってみたんですがだめでした。
190:名前は開発中のものです。
04/03/16 23:47 R0OmoIwo.net
>>189
DIBSectionベースで、一マス多く描いたスクロール用ビットマップから
表示用ビットマップに転送していく、というのならこんな感じでやるとか。
URLリンク(www.sm.rim.or.jp)
191:名前は開発中のものです。
04/03/16 23:52 PRaC3s4r.net
だめですた、とかいうなら、詳細な症状を言うか、ソースを提示すべし。
初心者はエキセントリックなソースを書くからな。
>3.デバイスコンテキストAに表示するマップより1マス分大きいマップを描画する。
そんなことはない。CreateDIBSectioniで作るのはウィンドウサイズと同じ大きさで良いよ。
というか誰だよこんな嘘おしえたの。わざわざ難しく教えて面白いのか、といいたい。
これまでウィンドウのhdcに対して行ってきた描画とまったく同じ事をCreateDIBSectioinで
つくったDIB(を設定したhdc)に行えばいい。
んで、ウィンドウのhdcに対しては、かわりに↓をおおなう。
>4.AからデバイスコンテキストBに表示する部分だけ描画
この部分は、CreateDIBSectionで作ったDIBの内容をそのままウィンドウに転送するだけでいい。
ウィンドウのhdcは、BeginPaintで得られたhdcか、GetDC(hWnd)で得られたhdcだ。
なぜわざわざCreateDIBSectionで作ったDIBに描画してからウィンドウに転送するのか
といえば、それはチラツキをなくすためだ。なぜちらつきが起こるかは本に書いてあった?
192:98
04/03/17 00:57 AN01uPyl.net
>>190
今の状態でマルチスレッドにまで手を出すのはちょっときついです・・・
>>191
URLリンク(www.geocities.co.jp)
StretchDIBitsのデバイスコンテキストをhdcにすれば描画されるんですが、1段階ふむとなぜか
だめです。
>なぜちらつきが起こるか
本には、DIBSectionを使うことで効率がよくなるようなことは書いてありました。
193:名前は開発中のものです。
04/03/17 02:56 QickIzjR.net
>>192
なぜかじゃねーよ。
まじで、ローカル変数のこと勉強しろ!今すぐ。
変数スコープって分かるか?
まぁ、一応答えを。
↓をグローバル変数に。以上。
86:HDC hdcBMP;
ローカル変数は一度関数から出ると無効になるんだよ!
WM_CREATEでhdcBMPに設定しても、WM_PAINTの時はすでに無効になってるんだよ!
ローカル変数のことがちゃんと理解できるまでstatic変数も禁止。
グローバル変数も最小限に汁!それが出来るまで先に進むべからず。
194:190
04/03/17 07:13 EmljVs5P.net
>>192
いや、マルチスレッドにしろという話じゃなく、描画の流れを参考にしたら、ということなんだがw
195:名前は開発中のものです。
04/03/17 09:55 ukkq6pEc.net
>>193
まぁ落ち着けや。
196:98
04/03/17 23:43 AN01uPyl.net
変数と、ついでにクラスも勉強しておきました。
>変数スコープって分かるか?
:: 知らなかったけど使ってみます。
先に進むの禁止されたのでソースを見やすくした。
URLリンク(www.geocities.co.jp)
スクロール中に画面が消えるのは仕様なので気にしないでください
197:名前は開発中のものです。
04/03/18 00:33 Si6/VCoc.net
つーか、OO使わないのかね?
198:名前は開発中のものです。
04/03/18 00:33 Si6/VCoc.net
ヤターIDにVCデタヨー
199:名前は開発中のものです。
04/03/18 02:13 XsvAPJOC.net
>>196
グローバル変数は「使う目的を明確にあらわした」変数名をつけるようにね。
たとえば、「lpbiInfoってどのBITMAPの情報なの?」ということが、変数名を見ただけで分かるように。
んで、前からずっと気になってたけど
>while((timeGetTime()-timeSc)<SecondPerSc);
このビジーループは本に載ってたやり方なの?
もしそうならその本は糞と認定せざるを得ないので書名を教えて。
「ビジーループ」って単語が分からない?なら、googleとかに聞いてみてね。
200:名前は開発中のものです。
04/03/18 02:53 Si6/VCoc.net
今始めてマトモにソース見たんだが・・・・
猫でもわかるプログラミングから始めることをお勧めする。
もっとコンソールいじってからにしておきなさい。
201:98
04/03/18 23:35 r5sO1u2T.net
>>197
よく分からないのでたぶん使わないです。
>>198
おめで㌧
>>199
自分で作ったSleepもどきです。
ビジーループでググったら、負荷が高くなるからやめろと書いてあったので
他のやり方を考えてみます。
>>200
コンソールだけだと何を作っていいのか分からないのと、モチベーションが続かないので
winAPIと並行してやっていきます。
202:名前は開発中のものです。
04/03/19 00:17 whgiIXKB.net
>>201
>自分で作ったSleepもどきです。
>ビジーループでググったら、負荷が高くなるからやめろと書いてあったので
>他のやり方を考えてみます。
そか。えらい。
あとは、ちゃんとしたゲームループを作って、
・入力→ゲームの状態(主人公のマップ上での位置とか)の更新
・描画処理
をきっちり分ければ、ゲームの基礎は出来たも同然。
なぜ分けないといけないかというと、今のままだと、画面上に主人公とは独立して
動くNPCが出てきたときに処理できないからね。
203:200
04/03/19 08:07 5YapUc1Z.net
>>201
気持ちは分かるんだけど、せめて一回くらい目を通しておくべきだと思う。
それだけで大分違うはず。
204:98
04/03/20 18:53 th+dSxtZ.net
>>202
NPCの数が一定ならなんとか作れそうなんですが、
不定になるとどうやればいいのかさっぱりです。
>>200
理解したかどうかは置いといて、一通り読んでおきますた。
今のまま作っていくとグローバル変数だらけになりそうなので
URLリンク(www.geocities.co.jp)
こんなの作ってみた。
変数名考えるのがマンドクセなんですが、何かこつとかありますか?
205:98
04/03/20 23:02 th+dSxtZ.net
たぶん完成。上がソースで下が実行ファイル
URLリンク(www.geocities.co.jp)
URLリンク(www.geocities.co.jp)
・ちらつきが減った。
・グローバル変数が少し減った。
次はマップ切り替えは中止して、エンターキーを押したらコマンドが出る、というのをやろうと思う。
206:名前は開発中のものです。
04/03/20 23:23 70F0it+2.net
まだちょっとちらつくのは、InvalidateRectの最後の引数がTRUEだから。
あと、無意味なクラスが気持ち悪いぜ!
207:名前は開発中のものです。
04/03/21 00:26 BKuLrlOv.net
>>205
動くが遅いけど、逆にそれが心地よかったり。クラスが分からんから
見れないけど、遅いのはたぶん1ドットずつずらしてるからだと思う。
2ドットずつ、極端な話32ドット一変にずらしてしまうと早くなると思う。
>自分で作ったSleepもどき
自分もコンソールの時はそれで、ウィンアプリの時はちゃんとPeekMessageを
使わずGetMessage+イベント取り分でやってた。ライブラリのTimerだと精度が
悪くなるから何か工夫していたと思うけど忘れてしまった。
>変数名考えるのがマンドクセなんですが、何かこつとかありますか?
自分もよく悩みます。自分はできるだけ1単語にして、その分
コメントをしっかりつけるようにしています。ただ、グローバル変数は
まず使いません。ファイル分割するようになると返ってめんどくさくなったり
するので。後、以下の所も参考にどうぞ。
スレリンク(tech板)l50
スレリンク(gamedev板)l50
208:98
04/03/21 19:51 P8h6pce6.net
>>206
ちらつき撲滅できますた!
>>207
ビジーループを避けるためにいろいろ工夫したら結局Sleepになってしまった orz
>コメントをしっかりつけるようにしています
これいいですね。真似してみます。
コマンドは無理だったので、メッセージウィンドウ表示。
URLリンク(www.geocities.co.jp)
URLリンク(www.geocities.co.jp)
メッセージウィンドウの背景と文字色を変更したいんですが、
SetTextColorが使えないです。
こういうときはどうしたらいいんでしょうか
209:名前は開発中のものです。
04/03/21 20:02 lBIVIhzW.net
静止状態では、結局CPU100%使っちゃってるよ。だめじゃん。
あと、マップ表示がスクロール終わるまで帰ってこない関数って後で困るよ。
スクロールしてる最中に同時にNPCを動かしたくなったらどうするのさ?
210:98
04/03/21 20:27 P8h6pce6.net
進むの中断して組みなおして出直してきます。。
211:名前は開発中のものです。
04/03/21 21:20 lBIVIhzW.net
スクロール位置の更新と描画が分離されてなかったり、
GDIじゃなくDirectXつかってたりするが、
↓見たいな感じにすればいいよ。
URLリンク(www.sm.rim.or.jp)
ゲームプログラミング練習長持ってるんだっけ?
読んだこと無いけど、そっちのほうもこういう処理になってない?
212:98
04/03/22 21:35 qIg3ILGt.net
>>211
見てみました。↓draw()でSleep代わり?にこうしてるみたいなんですが、
if (GetTickCount()>dwTime+5) dwTime=GetTickCount();
else return;
前に自分で作ったのが↓
dwTime = GetTickCount();
while(GetTickCount()<dwTime+5);
上と下って何か違いあるんですか?どっちもビジーループに見えるんですが。
>そっちのほうもこういう処理になってない
本のほうではDirectX使ってないです。他の細かいところも、違う書き方してます。
213:名前は開発中のものです。
04/03/22 22:18 IkgfwbwO.net
ていうか>>211のURLはゲームプログラミング練習帳の作者ジャン。
んでね、
URLリンク(www.sm.rim.or.jp)
} else
draw(); // 描画処理
ここを
} else {
draw(); // 描画処理
sleep(1);
}
にすれば少なくともビジーループじゃないでしょ。
んで、>>211で言いたかったのはビジーループのことじゃなくて、>>209の
>あと、マップ表示がスクロール終わるまで帰ってこない関数って後で困るよ。
>スクロールしてる最中に同時にNPCを動かしたくなったらどうするのさ?
これのこと。
上のURL(+Sleepバージョン)と>>208のプログラムを良く比べてみ?
214:練習帳著者
04/03/22 22:50 8UFWL+KK.net
>>212
>if (GetTickCount()>dwTime+5) dwTime=GetTickCount();
>else return;
これは、一つのif文の中で書けば
if (GetTickCount() > dwTime + 5) {
dwTime = GetTickCount();
ゲームの処理(draw()の中身)
}
という流れ。
「前回処理時間から指定時間(5ms)が過ぎていたら、現在の時間を
処理時間として記録し処理を行う」もので、処理を行わない場合には
そのままメインループ(if文の外にあるメッセージポンプ)に処理が
返るから、処理がそこで停まるビジーループにはなりません(あの
ソースももう5年前・・・。RPG関連の記事はそろそろ全面的に書き
直さないといけないですかねえ)。
>while(GetTickCount()<dwTime+5);
だと「指定時間が過ぎるまで」どうなります?
215:練習帳著者
04/03/22 22:58 8UFWL+KK.net
まあ、実際にRPG作ってみると「一定の周期で処理を行う関数」にゲーム
の処理をすべてまとめるのは無理があるから、メインループよりはゲーム
処理用にスレッド作った方が楽になるかな、という気がしてきたんですが。
特に厄介なのは、戦闘シーンやイベントの待ち時間・・・。 最初はあち
こちでPeekMessege()してたけど、これはちょっと違うかな、と。
スレッド作れば、最悪無限ループにしてもUI停まりませんからね(^^;。
もちろん、最終的なプログラムにするときにはスレッド内からの終了処理
(メインスレッドからの終了指示の監視)は必要だろうけど。
>>214
>ていうか>>211のURLはゲームプログラミング練習帳の作者ジャン。
そうですね。あのページの内容はもうかなり古いものもあったりして
書き直さないとなあ、と思っている部分が多いんですが、あちこちに
URL張られているようでちょっと焦ってます(^^;。
とりあえず、「4方向スクロールのマップ表示とキャラクタの透過描画」
あたりに関しては、もうちょいましなソース上げておくつもり。
216:名前は開発中のものです。
04/03/22 23:27 hc5U3G0l.net
本物キター
217:名前は開発中のものです。
04/03/22 23:29 mioo0vPT.net
著者降臨age!
218:名前は開発中のものです。
04/03/22 23:33 nq9Pmduh.net
上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな
上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな
上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな
上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな
上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな
上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな
上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな
上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな
上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな
上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな
上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな
219:98
04/03/22 23:46 qIg3ILGt.net
>>213
ああ、分かりました!
1ドット描画するたびに関数を終了して、グローバル変数とか構造体とかで
描画回数をカウントしておいて、1マス描画し終わったらカウンタリセットする。
すると割り込み処理ができるようになる。
>>215
うお・・・著者様ですか・・・
while(GetTickCount()<dwTime+5);
だと5ms経過するまで待機しかできない上に、処理が重くなってしまう。でいいでしょうか・・
220:名前は開発中のものです。
04/03/23 00:02 4auKbf0z.net
>の処理をすべてまとめるのは無理があるから、メインループよりはゲーム
>処理用にスレッド作った方が楽になるかな、という気がしてきたんですが。
この辺は、伝統的には所謂タスクシステムで解決してきたのかな。
スレッドだと同期が大変過ぎるしこういう用途には重すぎると思う。
まぁ、タスクシステムっていってもいろいろなやり方があるみたいだけど…
221:名前は開発中のものです。
04/03/23 00:47 9F6tXsaP.net
シナリオスクリプトを実装する時にはスレッドにしたりもする
ファイバー(コルーチン)という手もあるようだけどね
異なるプログラム方式の連携
URLリンク(www.jah.ne.jp)
222:名前は開発中のものです。
04/03/23 01:05 PMWtRlHb.net
シナリオなんかだと、タスクシステムでコールされるタスク関数を
ファイバ(マイクロスレッド、コルーチン、継続でもOK?)にしておくと
効率よく開発できるかな、とかおもったりしたけど全然試してない。
このへんは、やね本2だかに書いてあるらしいけど読んだこと無いです。
223:名前は開発中のものです。
04/03/23 02:20 JCV/36ob.net
俺もスレッド使わないほうがいいと思う
マルチスレッドを毛嫌いするわけじゃないが、明確な理由なしにスレッド化するのはやめたほうがいい
ゲームで必要になる場面があるとすれば、SLGの思考ルーチンくらいだと思う
で、ちょっとスレ違いの話題になるが、
ファイバってCreateFiber関数とか使う奴のこと?
だとするとあんなの使わなくても関数ポインタ切り替えでいいじゃん、と思うんだが・・・
#少なくともゲームにおいては。なんかいい利用方法あるならスマン
224:名前は開発中のものです。
04/03/23 02:48 PMWtRlHb.net
>だとするとあんなの使わなくても関数ポインタ切り替えでいいじゃん、と思うんだが・・・
その関数を減らすために使うんだよ。
普通はその関数の操作対象のオブジェクト(やシーンなど)の状態が変わったら
関数を切り替えるわけでしょ。ファイバを使うと、その「状態」が「関数をどこまで
実行したか」で表せるようになるから、状態ごとにいくつかに分かれてた関数を
ひとつに出来る、と。
まぁ、でもこういうのは大概スクリプトで実現するような気がしないでもない。
225:223
04/03/23 05:14 JCV/36ob.net
>>224
ちょっと待て、その利点は間違ってると思うぞ
ファイバ使っても関数減らすことになるとは思えない
このスレなのでRPGの例で行くが、
RPGにおける「状態」ってたとえば
・マップ移動(キー入力待ち)
・マップ移動(スクロール)
・戦闘中
とかに分かれるよね
ファイバを使う場合、これらの関数をCreateFiber関数で登録し、SwitchToFiberで切り替えるだけだ。
使わなくとも一旦呼び出し元ループに戻って別の状態用関数を呼び出すのと関数の数はほぼ変わらん
#状態の定義が食い違ってるかも?
スレ違い継続&長文スマソ
226:名前は開発中のものです。
04/03/23 08:41 PMWtRlHb.net
>>225
もっと先の話だよ。
イベントシーンとかそのへん(応用先はそれだけじゃないよ?)
スレ違いだが、シューティングの敵の動きの記述に使ったりもした。
227:名前は開発中のものです。
04/03/23 09:03 PMWtRlHb.net
あぁ、でもこの場合、少なくてもマップ移動はまとめられるね。
ヘンテコ擬似コードだけど、こんな感じ?(描画はメインファイバ側でやるという前提)
void MapMove() {
while(1) {
//方向キーが押されるまで待つ
while (!CheckHitCursorKey())
SwithFiber(mainFiber);
MoveMap(GetKeyState());//スクロール方向を決める処理
//ここからスクロール処理
for (int i = 0; i < MAP_CHIP_SIZE; i++) {
ScrollMap();//1ドット分スクロール
SwitchFiber(mainFiber);
}
}
}
この場合にまとめるのが正しいかは議論ありそうだがそれはおいといて、例としてね。
228:練習帳著者
04/03/23 09:10 R4NaancD.net
>>220
別スレッドの利点は、他のスレッドと同期する必要をなるべく生じさせ
ない、ゲームに関する処理を一本道の流れに分離しておくような形式に
できた場合、Windowsのシステムの流れをあまり意識しないでゲームの
処理に集中できるかな、と。
実際、戦闘やスクリプトベースのイベント処理も含めてRPGのデータ処理
やバックバッファ(あとはウインドウのDCに出力するだけのDIBSection)
への描画処理をすべて別スレッド内で行うシステムを作ってみたんですが、
比較的単純なシステムではプログラムも一本道の単純なものにまとめられ
そうで、これはこれでよさそう。
小規模で単純なRPG/ADVでは、こういったタイプの処理もありかも。
まあ、一定時間ごとに呼び出す処理用関数で状態を管理しながら処理して
いく、という形にまとめられればその方がよさそうですけどね(ただ、
ゲーム本体の処理以外の部分でたいしたことをしていなければ毎回状態を
管理しながら一定時間ごとに処理を行う、という流れはスレッドで連続的
に実行しているように書く、というのと流れとしては同じになりそう)。
私もメインループ内で一定時間ごとに状態に応じて振り分け、という設計
を考えていましたが、別スレッドで処理する実験結果を見ると意外にうま
くいきそうだったんで、とりあえず別スレッドを作る方向で作っています。
ゲームの処理の流れを本格的に管理するつもりなら、フレームワークの開発
からやる方がよさそう・・・。
229:名前は開発中のものです。
04/03/23 11:14 PfXAGYNf.net
エェー?本当にちゃんと同期できてる?データの整合性もちゃんと保ててる?
マルチCPUの場合は、同じデータをアクセスするコードが「同時に」2つ以上走ることも
あるんだよ?
マルチスレッドは、データの不整合性、デッドロック、抜け出せないロッキング、
優先順位の逆転などなど気をつけないといけない罠が多すぎるので、どうしても必要
なところ意外では使わないことにしてるよ。
スレッドがだめって言ってるわけじゃないけど、初心者向けでは無いよね。
「処理の流れ」を記述したいときは、大概スクリプトにするかなぁ?
マイクロスレッドでもいいと思う。
230:名前は開発中のものです。
04/03/23 12:01 JCV/36ob.net
>>227
んー・・・なんとなく言いたいことは分かった、ありがとう
けどやっぱタスクシステムから乗り換えるほどの理由じゃないっす
#スレ違いすまんがSTGの敵の動き制御部分は特に意味がなさそう
#理由はたとえば同じ種別の敵が10いたら同じ関数を10回実行しなきゃいけない。
#けど同じ関数を回すわけだから結局状態データは外部に置かなきゃいけない
#同じ関数を10個ファイバとして登録して再利用するにしても、
#結局被弾したとかの状況によって初期化するわけだから外部で制御しても大差なし
#そもそも最近のハードだと敵の動きは外部データで持つことが多いので
#違う敵でも同じ関数で処理する
>>228
Windowsのシステムの流れってぶっちゃけメッセージループだよね
なら別スレッドにする必要はないかと
PeekMessage(およびそれに付属する処理)を1タスクとして考えればいいだけ
たとえばバックバッファを作った後でPeekMessageを呼び出せばいい
231:名前は開発中のものです。
04/03/23 12:25 rzkxl8IS.net
>>230
>けどやっぱタスクシステムから乗り換えるほどの理由じゃないっす
いや、タスクシステムと併用するんだよ当然。
タスクシステムからタスク関数を呼び出すと思うけど、それをファイバにするという話。
>#同じ関数を10個ファイバとして登録して再利用するにしても、
>#結局被弾したとかの状況によって初期化するわけだから外部で制御しても大差なし
まぁ、被弾とか非同期で状態が変わる部分は、別関数にせざるを得ないよね。「例外(Exception)」だし。
でも、多数の状態が(ほぼ)シーケンシャルに切り替わっていく状態なんかでは、状態ごとに関数分けたり
状態変数作ってswitchで分けたりするよりは、すっきりしたプログラムになると思う。
まぁ、もちろん、
>#そもそも最近のハードだと敵の動きは外部データで持つことが多いので
なので>>224ではスクリプトでやる場合が多いと書いたわけだけど…
どっちにしろ「使いようによっては便利なときもある」って話だ。
全ての場合で使えると言ってるわけでもない。ファイバはメモリ食うしね。
232:名前は開発中のものです。
04/03/23 16:31 cY6fF1y+.net
マルチスレッドにする利点はタイトルバーをクリックしても処理がとまらないことかな
233:98
04/03/23 21:04 s4+zR2jB.net
よく分からないんですけど、マルチスレッド使えないとやばいっていうことでしょうか?
今度こそマップスクロール完成版↓
URLリンク(www.geocities.co.jp)
URLリンク(www.geocities.co.jp)
・静止状態にCPU100%になっていたのを修正(Sleep(1);をつけた)
・メッセージウィンドウ表示時にCPU100%になっていたのを修正(Sleep(1);をつけた)
・描画関数を2つに分割
なんか処理が重くなったような気がする・・・
234:名前は開発中のものです。
04/03/23 21:12 PMWtRlHb.net
んじゃ、次は、DrawMapの、「~スクロール時描画」を「静止マップ表示」ひとつにまとめよう!
これでかなりすっきりするはず。
235:98
04/03/24 22:18 w/FFfgKd.net
すっきりしたかどうか分かりませんが、まとめてみました↓
URLリンク(www.geocities.co.jp)
・描画方法を少し変更
メッセージウィンドウ表示は置いといて、次はNPCを作ってみる予定
236:98
04/03/29 19:11 hm6pjM86.net
ログが消えてる(´・ω・`)
NPCの移動をなめらかに描画するのが難しいんですが、
なんかいい方法とかないでしょうか・・・
237:98
04/03/30 22:16 W6u+pmd7.net
NPCがどうしてもうまく描画できないので、マップ自体の描画方法を
「何か起こったら描画」から「常に一定時間おきに描画」に変更してみた。
URLリンク(www.geocities.co.jp)
URLリンク(www.geocities.co.jp)
方向性が間違ってるような気がしないでもないんですが、
こういう描画方法でもいいんでしょうか
238:98
04/04/01 21:53 xdIEUIEH.net
NPCなめらか移動
URLリンク(www.geocities.co.jp)
URLリンク(www.geocities.co.jp)
NPCの移動がランダムではないような気がする。
気のせいかもしれないけれど、ある方向にいったん進んだら、
次に進む方向も同じになる確率が高い。
次は当たり判定をつけようと思う。
239:200
04/04/02 00:46 HxQygUy0.net
srand((unsigned)time(NULL));
は、最初に一回だけね。ループには入れないで。
srandは乱数ジェネレータの初期値。
rand()関数はsrandを実行しなくても一回一回違う値を返すけど、もう一度プログラムを実行してもまた同じ値を返してきてしまう。
一回目の結果:7,2,5,6,4,1...
二回目の結果:7,2,5,6,4,1...
こんなカンジで。
srandでtime(NULL)を与える理由は、プログラムを起動するごとに違う値を出力するようにするため。
一回目の結果:7,2,5,6,4,1...
二回目の結果:5,1,8,4,3,7...
ってカンジで。
timeは確か秒単位だったから1秒以内ならrandが同じ結果を返すことになる。
って、コレも猫でもわかるプログラミングで説明されていたような・・・
240:200
04/04/02 00:49 HxQygUy0.net
あ、別のサイトだったっぽいです。
241:98
04/04/02 20:19 RjQBCx/D.net
おまじない程度の認識しかなかったので、ここが原因とは思いませんでした。
ランダムに動くようになりました。
ふと思ったんですが、WINAPIなら timeGetTime()%10; でも0~9のほぼ乱数ができるような
気がするんですが、これって邪道でしょうか。
242:98
04/04/02 22:26 OS/Q3nYt.net
↑自己レス 同時に複数の乱数を得たいときに不便なのでやっぱりだめ
当たり判定をつけた。ついでに歩行アニメーションもつけた。
URLリンク(www.geocities.co.jp)
URLリンク(www.geocities.co.jp)
次はマップエディタを作る予定。
243:98
04/04/03 22:19 eDSQOtXr.net
マップエディタセーブ機能なし
URLリンク(www.geocities.co.jp)
URLリンク(www.geocities.co.jp)
マップエディタ作る時間 > テキストでマップを作る時間
な気がしてきた。
APIのファイル操作はできれば避けたいんですが、
#include <window.h>をすると#include <fstream>できなくなるんでしょうか?
244:練習帳著者
04/04/03 23:40 ClmmNDdO.net
>>243
マップエディタはイベント配置機能なども含めRPG開発では必須
になるけど、開発するのは本体よりも大変かもしれませんね。
まあ、開発自体が良い練習になるしマップの仕様はゲーム設計で
いくらでも変わるから、時間はかかっても独自のマップエディタ
を作るのも良いでしょう。
あと、バイナリファイルは、特に理由がなければAPIで扱うのが
一番楽な気がw
245:名前は開発中のものです。
04/04/04 00:10 8gkVG1Fa.net
私も参戦してよいでしょうか。
環境はVC++6だけど、DirectX(8or9)つかうかWinAPI(SDK)だけで行くか悩み中。
SDKだけでいけそうだけど、勉強のためにDX使おうかなぁとも。
覚えたほうが後々いいですかね。。(どうでしょう?)
とりあえずマップチップ表示してその上を歩き回れるようなものを作ろうと思ってるんですが。
246:98
04/04/04 19:29 mMmF0Gyi.net
>>244
マップエディタも奥が深いんですね・・
作成したマップをどういう形式で保存するかっていうのも悩みどころです。
>>245
言語問わず参戦歓迎です。
マターリがんがりましょう
247:98
04/04/04 23:33 t/HUZNZd.net
右クリックすると、直前に描画したマップの種類をテキストに出力するようにした。
URLリンク(www.geocities.co.jp)
URLリンク(www.geocities.co.jp)
保存の仕方がいまいちよく分からないので、
配列で記録しておいて、こぴぺでソースに貼り付けれるようにする予定。
248:245
04/04/05 00:00 Exj/seSL.net
ども。
では最初の目標として、
なんか表示してキーボードで動かせる奴を作ってうpします。
DX使うかまだ未定。訳わかんなかったらSDKでやります。
249:名前は開発中のものです。
04/04/05 12:22 qkWA7QuF.net
SDK -> Software Development Kit
250:245
04/04/05 13:40 Exj/seSL.net
WinAPIどぅえす。
どっかのサイトでAPIのみでつくるのをSDKって言ってんの見て変な癖ついちゃいました。
それで、やっぱDirectXはこのくらいの規模の2Dもので使うにはめんどいだけで
恩恵無さそうな気がしてきたので使わないかもしれません。
(突っ込みが欲しい所であります。)
251:98
04/04/05 20:25 jO2LaB8o.net
俺はDirextX使えないけど、将来的にすごいもの作ろうとしたら
避けて通れない道な気がするから、敢えて使ってみるのもいいかも
252:245
04/04/06 14:51 I/KdK9GY.net
実は超最終的な目標は3Dのネットゲー作りたいんですよねぇ。
だからDXは絶対覚えないと・・・
でもCのプログラミング自体基本ができてないから
とりあえず難しいDXは抜きに多少使った事があるAPIでやって、
C自体の基本的なところの習得に集中してからDXに移ろうかなぁ
なんて気分になってきました。
253:98
04/04/06 20:50 VKrLl24Q.net
>>252
教材が見つからなかったんで、俺は諦めたけどELっていう手も。
でもAPIの知識が必要だった気がするから、結局APIだけでやってみるのが
一番いいのかもしれません・・・
初期化ファイル(MapDataAlpha.ini)にセーブするようにした。操作方法はソースの上のほうに書いてあります。
URLリンク(www.geocities.co.jp)
URLリンク(www.geocities.co.jp)
・WM_RBUTTONDOWN時に
POSITION[0][0] = ...
POSITION[1][0] = ...
POSITION[2][0] = ... のように記録させたいんですが、どうすればいいんでしょうか?
254:名前は開発中のものです。
04/04/07 03:10 6G2QeT26.net
RPG製作に興味あってこのスレきますた。
後半部を流し読みしかしてませんが、なにやらAPIやDXベースで話がすすんでるようですが
それらを学習しながらはたしてモノが完成するのかなぁと思ったので。
最初は253氏が触れてるようなEL等のライブラリを使用するのがいいかと思います。
ゲームの中身の処理以外で悩むのつまんないし。
255:245
04/04/07 05:36 RS4YRj46.net
>>253>>254
結局APIで作り始めますた。
私のほうは、あくまで技術の学習・習得が第一の目的でして、
特にゲームを完成させることに拘りはないです。
でも「作るスレじゃ」なくて「作れるようにするスレ」なので
あんまり矛盾はないかなぁなんて。
現状ですが、とりあえず超適当ですがPCの画像を表示できました。(うpする価値なし)
次はテキストファイルを読み込み、それにしたがって
マップチップを敷き詰めてみようと思います。
256:98
04/04/07 20:26 MMz7Nn2x.net
>>255
一応、目安ということで見ておくといいかも↓
URLリンク(gamdev.org)
最低限の機能しかないけどマップエディタ完成
URLリンク(www.geocities.co.jp)
URLリンク(www.geocities.co.jp)
次はメッセージウィンドウを表示させようと思う。
257:98
04/04/07 20:27 MMz7Nn2x.net
URLミス・・・
URLリンク(www.geocities.co.jp)
URLリンク(www.geocities.co.jp)
258:245
04/04/08 05:12 rdLQdFbl.net
>>256
おぉそこは知りませんでした。凄く参考になります。
現状ですがテキストファイルからマップデータを読み込み、
表示することができました。
URLリンク(gamdev.org)
本当はバイナリにして暗号化したりした独自形式にしりたいんだけど
よくわかんないのでとりあえず放置。
次はキーボードでキャラを移動して画面をスクロールさせてみようと思います。
しかし98さんは進歩早いですね。私も早く追いつけるようにがんばります。
259:98
04/04/08 20:18 GQOUbMkn.net
2ヶ月前からやっててまだこの程度なので、かなり遅いと思われます・・
保存形式ですけど、
XML→難しい割りにメリットなさそう バイナリ→シラネ レジストリ→怖い
ってことで、消去法で初期化ファイル使ってます。
データ書き換えが簡単で、ゲームとして成り立たなくなりそうですが。
260:245
04/04/08 22:58 rdLQdFbl.net
ファイル操作の辺りって結構でかい壁ですよね。(俺だけかも)
いずれ絶対やらなきゃなんないし、かなり面倒くさそう。。。
今回はPCを矢印キーで操作して画面をスクロールできるようにしました。
ついでに当たり判定もつけました。
URLリンク(gamdev.org)
現状はまだ隣のマスへワープしてる状態なので、
つぎは滑らかに移動できるようにしたいと思います。
261:98
04/04/09 00:11 vWYKL39D.net
俺もファイル操作で何回も挫折してます。
バイナリでの保存方法教えて。エロイ人。
>ついでに当たり判定もつけました
ダウソしてみたんですが、実行前の注意必読.txt読んだら
怖くて実行できなくなってしまったorz
262:200
04/04/09 00:16 PDI25ArR.net
うぃっす。そのうち暇になったら俺も晒そうかな。今は忙しいが。
>>259
XMLはHTMLと同じようなマークアップ言語のことじゃないん?
だから出力形式としてはテキストorバイナリになると思うんだけど。
あと、ツール関係もC言語で作るって言うのはどうかと。
ツールは他の言語で作って出力データだけ使うのが良いと思われる。
テキストで出力するのであれば、マップチップ番号をカンマで区切って出力したり
すればいいんじゃない。
コレが有名なCSVファイルね。
ちょうど245の晒しているマップデータをカンマで区切ったような形式。
もちろん、出力するデータの桁が決まっていれば区切る必要はない。
バイナリはただ単に数値をそのまま出力しただけのデータ。
通常のテキストファイルは文字コードによって人間の理解できる文字になっているが、
コンピュータで扱っている数字はそのまま出力した場合、テキストファイルのように
数字を読み取ることは出来ない。
しかし、プログラムから読み込む場合は余計な数字>数値変換を行わなくて済むのと、
サイズが小さくなると言うメリットがある。
263:200
04/04/09 00:23 PDI25ArR.net
発言が前後しちまったーヨ。
出力・・・猫でもわかるミレ
264:245
04/04/09 06:14 PD92y+NK.net
>>261
何があるかわかんないので、一応、免責事項を書いておいたほうがいいかなと思って。
フリーソフトに限らず書いてあるのが多いので見習いました。
多分大丈夫だと思います。多分。。。(でもやっぱり責任はもてませんw)
>>262
CSVにしようと思ったんですけど、まんどくせのでとりあえずあんな感じに。
カンマとかって普通に文字列操作でくっ付けて~.CSVでWilteFileすれば
出来上がるんですかね。そのうちやってみようと思います。
ちなみに私のほうはVC++でやってるので、
マップツールの方はダイアログベースで作るか
APIでクライアントにコントロール直張りにして作るか、
普通のクライアントウィンドウ+モーダレスダイアログで作る予定。
MFCは使わない。というか使い方知らない。
「猫でもわかる」に「MFCの使い方覚えてるうちにAPIで1000個くらいアプリ作れちゃう!」
とか書いてあるので、それを信じてひとまずMFCは放置しようかな、と。
ところで↓みたいに
URLリンク(www.nurs.or.jp)
チップをスクロールバー付きで並べて表示して、
それを選択したりするようにするのって「リストビュー」をつかうのかなぁ、、、
↑のはどうやってやってんだろう。ここが難関。誰か教えてたもれ。
265:練習帳著者
04/04/09 08:53 NNIXc1rk.net
>>261
バイナリファイル保存は、CreateFile()でファイルハンドルを作って
バイナリデータ(データを記録したバッファ)をWriteFile()で書き
出し、ファイルハンドルを閉じる、という流れでできます。
lpszFilePathをファイルパス、lpDataをデータの先頭アドレス、dwSize
をデータのバイト数とすればこんな感じ。
HANDLE hFile = CreateFile(lpszFilePath, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
WriteFile(hFile, lpData, dwSize, &dwWrote, NULL);
CloseHandle(hFile);
ファイル操作は、標準関数よりAPIの方が楽ですね。
266:200
04/04/09 18:37 PDI25ArR.net
>>264
VBとかもっとらんの?
VCしかもってなくて、C言語しかやってないっていうのなら、しょうがないけど。
チップセレクトは多分スクロールバーとBMPをあわせているだけだと思う。
スクロールされたらそれに合わせてプログラム内でBMPの表示位置を変えてるんじゃない?
267:245
04/04/09 21:40 PD92y+NK.net
滑らかにスクロールするようになった。
けど、なんか無理矢理できてる感が強し。やたら重いし、
デバイスコンテキストとかこんなに何枚も作る必要あるのだろうか。。
hdc//一番表。ディスプレイ
hdcMem//一枚裏。ここにいろいろ合成して最終画像を作る。
hdcMap//マップの画像ファイル読み込んでおいておく所。
hdcChr//キャラの画像ファイル読み込んでおいておく所。
hdcFld//マップデータにしたがってマップを描く所。スクロールに備えて一マスでかい。
URLリンク(gamdev.org)
次はNPCを勝手に歩き回らせようと思います。
次回はきつそうだからソース晒して助けを求めることになるかも。
>>266
リストビュー使ってないんですかねぇ。
でも使ってもできそうな感じです。なんとなく。
268:98
04/04/09 22:43 Hsbv26Yj.net
>>262
>ツール関係もC言語で作るって言うのはどうかと
C++以外だとJavaScriptしか使えないです。保存できない・・・
>>265
ありがとうございます。バイナリと思われる意味不明な文字列で保存までできますた。
読み込みもたぶんできそうです。
>>267
特に重いとは思いませんでした。
つか、あと2,3日で追い抜かれそうな気がしてきたorz
269:245
04/04/10 18:02 rQAMSH7v.net
適当に動くNPCを追加して、キャラの余白は透過するようにしました。
URLリンク(gamdev.org)
次はキャラ同士で当たり判定をつけて、
NPCの数を動的に増やしたり減らしたりできるようにしようかと思ってますが、
めんどいだけで特に得るものは無さそう。。。
でも見た目楽しそうなのでやってみようと思います。
>>つか、あと2,3日で追い抜かれそうな気がしてきたorz
ふぉぉぉぉぉぉおおおお!!!
270:98
04/04/11 21:26 ih6xwcUu.net
>>269
左移動・上移動はいいんですが、右移動・下移動の時の画面に現れてくる部分の描画が遅いような感じです。
・エンターキーを押すとコマンドが出るようにした。
・マップデータはバイナリのまま読み込むようにした。
・ソースを修正しやすいように修正した。
URLリンク(www.geocities.co.jp)
URLリンク(www.geocities.co.jp)
次はスクリプトを使ってNPCと話せるようにしようと思う。
271:245
04/04/11 22:41 OD43hm2K.net
今日はハマリ中でうpできそうにない・・・
>>270
試してみてもらえたようで、ありがとうございます。
起動時のままのウィンドウサイズでも変になってますか?
家でもウィンドウを広げると確かに下とか右の方の描画が変なんですが、
一応起動時のサイズが標準なので、普通だったら見えないところだから
そのままでいいやと思って直してなかったんですが、
標準サイズのままでおかしくなってるとしなら直さないといけませんね・・・
ちなみにソース拝見しましたが、APIのCreateWindowでゲーム内ウィンドウを
作ってるのが新鮮ですた。こういうのって自力で原始的に作んなきゃならないと
思い込んでたので作るのを逃避してきたのですが、
APIのウィンドウを使えるならマウスドラグで位置移動とかサイズ変更とか
もできそうですね。
272:98
04/04/12 00:16 A/n3T6P2.net
>>245
あ、起動時のままなら問題ないです。
>APIのCreateWindowでゲーム内ウィンドウ
自力で描画っていうのもやってみたんですが、いろいろ問題があったので
子ウィンドウにしました。
ただ、子ウィンドウを使うとウィンドウが無効になったときの処理が
面倒だったりするので自力で描画したほうが楽なのかもとか思ってます。
273:名前は開発中のものです。
04/04/12 00:35 4A1duCG6.net
君らまだまだ先は遠いぞ
274:245
04/04/12 01:08 +oNLbu0z.net
>>272
環境によってウィンドウの出方とか違うのかと思ってましたが、
よかったです。安心しました。
>面倒だったりするので自力で描画したほうが楽なのかもとか思ってます。
そうですか。。。今の課題をクリアしたら私も色々テストしてみるとします。
段階的学習っていうの見てますが、もっと先のレベルも欲しい所ですね。
別に無くてもやらなきゃならないことは山ほど見つかりますけど、、、
275:245
04/04/12 18:29 +oNLbu0z.net
キャラ同士に当たり判定をつけ、移動するとき向きを変えるようにした。
NPCをテンキーの+-キーで増減できるようにした。(お遊びで。でも予想外に辛かった。。)
なぜか12,3体辺りでバグるので10体までに制限してあります。
URLリンク(gamdev.org)
ちなみに前回のバージョンでは
キャラの透過転送にGetPixel,SetPixelをつかって原始的にやっていたんですが、
キャラの数が増えるとかなり重かったので今回はTransparentBltなる関数を使うようにしました。
でも環境によっては(Win98とか)リークを起こすいわく付きの関数らしいので
実行時は自己責任でおながいします。うちは2000ですが、特に問題ないです。
276:98
04/04/12 22:51 Zs0PVIFw.net
>>275
XPですが、いい感じでした。
NPC増やすのって何気に難しそう・・・
277:とおりすがりの親父PG
04/04/13 00:14 MuenDC6+.net
>>252
オジサンはAPIで作るほうがめんどいと思いますorz...
278:245
04/04/13 00:54 4GaN7j22.net
>>276
どもです。
あれをちょっと改良したらへぼいARPGみたいなのができそうかなという気が。
でもとりあえずなんかウィンドウを表示してみようかなぁ。
次に何をやるか迷い中です。
>>277
>オジサンはAPIで作るほうがめんどいと思いますorz...
まじですか。通りすがりなんていわないで、
オラのためにDX習得までの段階的学習目標を50段階くらい作って下さい。
お願いします。お願いします。
ところでDirectXの画面ってAPIのコントロール類って貼れないんでしたっけ。
279:とおりすがりの親父PG
04/04/13 01:19 MuenDC6+.net
>>278
では、DirectXのSDKを落としてきてインストール
デモをコンパイルして 三角形を回してみる。
とりあえずここまでかな。
280:245
04/04/13 21:24 4GaN7j22.net
>>279
できました!サンプルをほんのちょっと改造して矢印キーで回転するようにしました。
実行時にカーソルが砂時計なのは何ででしょう。
支障ないみたいだけど激しく気持ち悪い。
URLリンク(gamdev.org)
次の、、次の課題をください!
それまで今までの2Dを改造してます。
281:とおりすがりの親父PG
04/04/13 22:39 qfExSMIG.net
>>280
それでは、頂点の数を増やしてみる
あとは5種類ある頂点の種類をそれぞれ試してみる。
次にこのサンプルはSDKが供給する「ライブラリソース」をインクルードしていますが
それを別フォルダにコピー(複製)して、自分用のライブラリファイルとすべし
自分用(スケルトン)フレームを作成する
282:98
04/04/13 23:17 eA8EtTKv.net
DirectX早くやりたい(´・ω・`)
URLリンク(www.geocities.co.jp)
URLリンク(www.geocities.co.jp)
・NPCと話せるようにした。
・タイトル画面をつけた
・スクリプトのメリットがよく分からないので使わなかった。
・ソースが多くなったせいか、汚いせいか、自分でも読みにくくなってきた。
次はNPCに話しかけたらエンディング、という流れを作ろうと思う。
あとはごりごり作っていけば完成しそう
283:245
04/04/13 23:53 4GaN7j22.net
>>281
さっきうpした奴に頂点一個追加して正方形を表示するのはできました。
5種類ある頂点の種類っていうのが何をさしているかちょっとわかんないのですが、
トライアングルストリップとかトライアングルファンとかの事だとしたら
試してみて違いを確認しました。
>>282
なんかウィンドウ表示が変ですた。
NPCに隣接しててもしてなくても、コマンドを実行すると
下の会話ウィンドウにもコマンド一覧があらわれるみたいです。
古いバージョンがうpされてるのかも。。。
284:98
04/04/14 00:12 ASstlwbG.net
>>283
ぁ、ほんとですね・・・タイトル画面作るのに集中してて気づきませんでした。
原因調査してみます
285:98
04/04/14 00:54 ASstlwbG.net
やっとバグとれた('A`)
lpszClassNameがかぶってるのが原因でした。
今までかぶってても平気だったのは何でだろう・・・
286:通りすがりの親父PG
04/04/14 05:41 EE4mRz9N.net
>>283
それですそれです。線分と点などもあると思います。
あるものは偶数しかNGなものもあります。
ではライブラリソースを自分用にしてください。
それを改造していきます。
287:245
04/04/14 17:34 TCeeFkNf.net
>>親父PG
正直に言うであります。
意味が分からないであります! 壁| 〇 =3 | ̄|_
開発にはVCを使ってますが、
現在のソースでは、一つのヘッダファイル(d3dx9.h)を
SDKの入ってるフォルダからインクルードしてまして、
コンパイルしたら「外部依存関係」の所に他のヘッダファイルが色々追加されました。
これらを自分のプロジェクトのフォルダの方などにコピペするってことでしょうか。。。
こんなヘタレですいません。
288:とうりすがりの親父PG
04/04/14 19:01 EE4mRz9N.net
>>287
そうです。自分用のライブラリフォルダを作ってそこに複製します。
(元の位置のものは残しておかないと、他のサンプルが動かなくなる)
d3dapp.cppを覗くとフル画面モードの切り替えやウインドサイズの変更
ポーリングループの部分等があり、なかなか面白いものがありますよ。
289:245
04/04/14 22:05 TCeeFkNf.net
>>親父PG
できました。一応、画像です。点とか線にもなりました。
d3dapp.cpp見てみましたが、かなりムズイです。そんなレベルです。
ですが、がんばって習得するので課題を、、課題を下さい!
URLリンク(gamdev.org)
2DPRG、ちょっとだけ改造しました。
「+」キーを押すと適当なHPをもったNPCが発生します。
NPCに向かって「-」キーを押すとHPが減って、0になると倒せます。
けど連射が効いちゃってるので押しっぱで移動してるだけで事がすみます。
URLリンク(gamdev.org)
環境によって速度も一定じゃないし、ソースも描画部分とか入力部分とか
バラバラなのでその辺を一旦綺麗にできたらウィンドウを描画してみようと思います。
290:とうりすがりの親父PG
04/04/14 23:45 EE4mRz9N.net
>>290
ここのサイトを参考にしてポリゴンを貼ってみると良いですよ
URLリンク(www.realdigital.co.jp)
291:245
04/04/15 23:47 DNQtOokO.net
>>とうりすがりの親父PG
テクスチャ張れました。
URLリンク(gamdev.org)
もっと、、、、もっと課題をください!
ShadowbaneとかWorcraftみたいなカッチョいいゲームを作りたいのであります!
292:名前は開発中のものです。
04/04/16 00:28 HZnOSJqT.net
課題
フレームレートを一定に保ち、フレームスキップを実装せよ
293:245
04/04/16 15:24 rC4Ao3Jo.net
とりあえずFPS測ってみました。
前の課題作ってるときから「どうも遅い」と薄々感じてたんですが、
DX9SDKに入ってるチュートリアルの三角が回るやつを改造して測ってみたら
案の定40fpsしか出てませんでした。
試しに、DX8に入ってる同じ三角が回るサンプルに同じ改造をして測ったら
400fpsとか出てる模様・・・
ビデオボードがGF2GTSだからDX9だとダメなのかなぁ。。。
8と9のサンプルで特別違う事をしてるとは思わないんですが、なんでですかね?
294:98
04/04/16 18:11 Lk4Qkb2j.net
完成しますた。クソゲーです。
URLリンク(www.geocities.co.jp)
URLリンク(www.geocities.co.jp)
全然ドラクエじゃねえ・・・・
次はDirectXやります。
295:親父PG
04/04/17 01:25 N6rYd7aK.net
>>293
テクスチャ貼れましたか。頑張っているようですね。
ではスプライトもついでにやっておきましょう。
DirectXのほうが簡単という私の前の意見に、そろそろ納得していただけると思います。
さてこのサンプルでは高精度タイマーユーティリティが使われています。
どこに在るか確かめ、どのように使われているかを探し出せば、自ずと遅くなっている原因もわかるかもしれません。
296:245
04/04/17 15:31 UZYSuoQB.net
>>親父PG
ありがとうございます。
fps抑えられてた原因がわかりました。(というか教えてもらいました)
危うくビデオボード買うところでした。スプライトも表示できました。
URLリンク(gamdev.org)
楽なのかどうかはまだ慣れてないのではっきりと実感できないのですが、
はやく自由に使いこなせるようにがんがります。ので、ので、何か適当に課題を下さい!
>>294
ふぉおおおおぉおぉぉぉぉぉぉ!!俺も仕上げるぞー!
297:98
04/04/17 17:56 lFucyLLi.net
三角形って
\Samples\C++\Direct3D\Tutorials\Tut02_Vertices\Vertices.cpp
↑これですか?そのままだとコンパイルできないんですが・・・
エラー E2209 Vertices.cpp 14: インクルードファイル 'd3d9.h' をオープンできない
エラー E2141 Vertices.cpp 22: 宣言の構文エラー あと6行ほど続く。
もしかしてbccだとDirectX使えないっていうオチですか?
298:名前は開発中のものです。
04/04/17 20:44 O0XDlP+3.net
URLリンク(therpg.sourceforge.jp)
↑これやってみそ
299:とおりすがりの親父PG
04/04/17 22:47 mXcf9nch.net
>>296
245さん お疲れさまでした。
さてここから先ですが、それは作る対象によって異なると思います。
今の状態でBGとスプライトが表示できるわけですから、最低条件である「表示」に関してはクリアできたわけです。
ではこの先何をすべきでしょう?。
純粋に表示能力を学習したいのであれば、3D表示>ピクセルシェーダー>キューブテクスチャ
他にランドスケープのライブラリを設計するなど
またRPG等などスクリプトが必要なシステムであれば、そちらの設計も必要です。
「マウスクリックの場所を検地した後、どのように振舞うか」この部分を内部でインラインで処理するか、
「処理データ-(外部ファイルの読み込み等)」によってコントロールするようにするか? など
また包括的なシステムというのも念頭において、全体のクラス設計も必要になります。
ということで、私が教えた?(実は何も教えていないw)事はここで一旦終了です。
DirectXの導入と実際にPGを組む事ができたという事で、当初の目的は達成できました。
おめでとう!
不詳、私もここの板でスレッドを立てていますので、おひまな時には覗いてみてください。
300:245
04/04/17 23:39 UZYSuoQB.net
>>親父PG
今までありがとう!
まだまだ先は長そうですががんばります。Shadowbaneみたいなゲームを作るまで!
親父PGさんもたまには私の成長っぷりを見にきてください。
これからはまたシコシコ取り組みます。
とりあえずはハイトフィールドを歩けるくらいになるまでを大きな目標にしようかなぁ。
つうことでモーション無しXファイルを読み込んでみる事にします。
>>297
私が弄ってたのはそれです。DXがんばってマスターしましょう!
301:98
04/04/18 20:41 6QlIhFIw.net
>>300
むしろ挫折しそうですorz
>>298
4.のmakeでCommand syntax errorというのが出てmakeできません。
で、bccは諦めてVC++が無料なのでインスコしてみたんですが、
clのパスはたぶん通ったんですが、ヘッダファイルのパスが通せなくて苦戦してます・・・
302:245
04/04/19 00:12 3QCXa6Lb.net
ウチはVC++6使ってるんですが、
「ツール」→「オプション」→「ディレクトリタブ」内で、
「表示するディレクトリ」を「インクルードファイル」に指定し、
下のところの「新規作成」でDXSDKのIncludeディレクトリを追加。
同様に「表示するディレクトリ」を「ライブラリファイル」に指定し、
DXSDKのLibディレクトリを追加。
そしてプロジェクト毎の設定として、
「プロジェクト」→「設定」→「リンクタブ」内で、
オブジェクトライブラリモジュールのところに
d3d9.lib d3dx9.lib dxerr9.lib dxguid.lib
などを追加してます。
ウチと環境違ってたら私はヘタレなのでよく分んないです。スマソ。
303:98
04/04/19 18:57 x8GMNOCf.net
無料版なので、dos窓でいろいろやらないとだめなんです・・・
VC++ ->DirectXどころか、coutすらまだ使えない状態(printfは使える)
bcc ->三角形をコンパイルしようとすると
Fatal: オプションが必要 : LD:\directx9sdk\Lib\Borland といわれる。
ここを参考にしてみた。↓
URLリンク(www.geocities.co.jp)
304:名前は開発中のものです。
04/04/19 20:17 eJn0oU39.net
>303
VCでのライブラリモジュールのリンクは
#pragma comment(lib, "ライブラリ名.lib")
を使うと少し楽できるかも。(正しいやり方じゃないかもしれないけど・・・・)
305:245
04/04/19 20:55 3QCXa6Lb.net
>>303
あぁ、無料のVC++ってなんだろうと思ってたら
コンパイラが無料配布されてるんですか。。。
お役に立てずに申し訳。
306:親父PG
04/04/19 23:42 HvqP5Z0m.net
>>301
Visual Studio 6.0 を使う場合
インクルード ファイルの検索パス
ヘッダー ファイルのパスが正しいこと、DirectX のヘッダー ファイルのディレクトリがコンパイラに最初に検索されるパスになっていることを確認すること。
インクルード パスを確認するには、[ツール] メニューの [オプション] をクリックし、[ディレクトリ] タブをクリックする。これにより、次のようなダイアログ ボックスが表示される。
ここでリストの先頭に表示されているパスが、最新の DirectX のヘッダー ファイルを置いているフォルダになっていなければならない。
このデフォルト パスは、C:\DXSDK\Include である。このパスが表示されていない場合は、それをリストに追加し、[ディレクトリ] タブ内のツールバー コントロールを使ってそのパスをリストの先頭へ移動すること。
↓
エヂエタ|タブ|デバック|互換性|ビルド|ディレクトリ|ワークスペース|||
プラットホーム
「WIN32」
ディレクトリ
C:\DXSDK\Include ←これ
リンカの検索パス
リンカがリンク ライブラリを検索する際に使う検索パスと、その検索順を確認すること。リンクの検索パスのリストも、[ディレクトリ] タブで確認できる。
これを行うには、[ツール] メニューの [オプション] をクリックし、[ディレクトリ] タブをクリックする。ダイアログ ボックスが表示されたら、[表示するディレクトリ] ボックスの [ライブラリ ファイル] をクリックする。
これにより表示されたリストの先頭のパスが、最新の DirectX のリンク ライブラリを置いているフォルダになっていなければならない。このデフォルト パスは、C:\DXSDK\Lib である。
プロジェクトのリンク ライブラリ
サンプルと一緒に提供されたプロジェクト ファイルを使う場合は、この設定を確認する必要はない。この設定値はプロジェクト ファイル内で指定されている。
新しいアプリケーションをコンパイルする場合は、[プロジェクト] メニューの [設定] をクリックする。これにより、次のようなダイアログ ボックスが表示される。
307:98
04/04/20 00:31 2oyWdrfK.net
>>304
#pragma comment(lib , "libcp.lib")
をつけてみたんですが、だめでした。
自分でもよく分からないんですが、環境変数いじってたらいつの間にか
coutが使えるようになってました。
>>305
clとかvccとか言ったほうが分かりやすかったですね
>>306
ありがとうございます。でもVisualStudioではないんです・・・
bccはDirectX8以上と相性が悪いらしいのでさっきアンインストールしてしまったんですが、
clでwindows.hが使えるようになったら再びインスコしてみます。
308:名前は開発中のものです。
04/04/20 01:42 TlrWn8fZ.net
URLリンク(goldfly.ld.infoseek.co.jp)
ガイシュツ?
309:名前は開発中のものです。
04/04/20 22:55 eL87iK8i.net
>307
私の環境では、インストール先のディレクトリに出来る”vcvars32.bat”と言うバッチファイルを実行しただけで、
環境変数がすべて設定されました。
310:98
04/04/21 18:22 bfgLD/fX.net
>>308
やってみたんですが、
外部シンボル 'Direct3DCreate9' が未解決
というエラーが出ます。意味が分からないんですが、何がいけないんでしょうか?
>>309
そうだったんですか・・・必死に自分でやってましたorz
PlatformSDKも、XMLが読めないとか言われて落とせないので、
VC++(製品版)を買ったほうがいいような気もしてきました・・・
311:名前は開発中のものです。
04/04/21 18:29 +YydXBKM.net
「プロジェクトの設定」のリンクのところで、d3d9.libをリンクすればいいハズ。
あと、必要に応じてほかのLibもリンクしてやる。
関数ごとに必要なLibはドキュメントに書いてある。
312:311
04/04/21 18:38 +YydXBKM.net
>>310
BccDevの設定のことな。
これでDX9がBCCで使えるはずだが、
できたプログラムがDLLを導入した環境じゃないと動かないかも知れない。
試してないのでわからん。スマン。
313:98
04/04/21 18:56 TkqwtIOq.net
>>311
コンパイルできました。
でもVertices.exeをダブルクリックしても何も起きないです。
\Samples\C++\Direct3D\Binのファイルも半分ほど開けないので、
ビデオカードのせいでしょうか?
314:311
04/04/21 19:08 +YydXBKM.net
Vertices.exeはハード依存ではないハズなので、
起動しないのはどこかがおかしいのかも。
俺も初心者なのでBinのプログラムやビデオカードについては正直わからん。
315:98
04/04/21 19:33 TkqwtIOq.net
>>314
別のPCでやったら三角形が表示されました。
なんでだろう
316:245
04/04/21 19:46 KyjgQXxH.net
意味があるかわかんないけど、
Windowsの「スタート」メニューから「ファイル名を指定して実行」で
dxdiagっていれるとDirect3dとかDrawの環境テストができますよ。
ダメだったらビデオボードのドライバを新しいのに更新してみるとか。
317:98
04/04/21 23:45 HhcihRE8.net
>>316
テストしてみたんですが、問題なしでした。
ドライバを更新したら、今まで見れなかったサンプルが見れるようになったんですが、
Vertices.exeはまだ見れないです・・
318:98
04/04/22 00:12 56TmnEhv.net
画面の色数のようなものをいじってたら見れるようになりました。
やっとスタートラインに立てました。
教えてくれた人ありがとうございます。
319:311
04/04/22 00:31 bRXr1w99.net
おお、原因はわからんが(w、とりあえず動いてよかった。
これからもガンガレ!
320:245
04/04/24 22:29 jIgXjODn.net
Xfileのロードができた。
今更ながらクラスをちょっと勉強したので、
一つのモデルを読み込み、オブジェクトとして沢山配置したり
位置とか向きを管理できるようにしてみようと思う。
321:名前は開発中のものです。
04/04/25 13:27 kOXdBOhy.net
ある点のRGB値を取得するときに使うGetPixelってありますよね
あれのRの値のみ取得する方法ってあるんですか?
あったら教えてください
322:名前は開発中のものです。
04/04/25 15:10 pLOIoMuL.net
GetRValue
323:321
04/04/25 19:05 kOXdBOhy.net
>>322
マジありがと
324:98
04/04/26 21:10 bAZf+D6a.net
サンプルのソース見ててもさっぱり分からん・・・
DirectXのお勧めの本とかサイトあったら教えてください
325:とおりかかった親父PG
04/04/27 23:00 6oVtyqti.net
ところで気になるのですが、メモリ内に仮想的にDIBを造る方法をご存知ですか?
HDC hDC = CreateCompatibleDC( NULL );
DWORD* pBitmapBits;
BITMAPINFO bmi;
ZeroMemory( &bmi.bmiHeader, sizeof( BITMAPINFOHEADER ) );
bmi.bmiHeader.biSize = sizeof( BITMAPINFOHEADER );
bmi.bmiHeader.biWidth = ( int )tW;
bmi.bmiHeader.biHeight = ( int )-tH;//ここを-すると左上頂点のDIBができるマジお勧め
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biBitCount = 16;//1 pixcel あたりのBit数
// Create a bitmap for the font
hbmBitmap = CreateDIBSection( hDC, &bmi, DIB_RGB_COLORS,( void** )&pBitmapBits, NULL, 0 );
これでメモリの中にDIBが作成されます。
先ほどからGetPixcel 関数の話が出ているので書き込みました。
画像を扱う場合は一気に転送がセオリーだと思います。
もし既出であればスレ汚しすみません
326:親父PG
04/04/27 23:02 6oVtyqti.net
>>324
URLリンク(www.realdigital.co.jp)
327:98
04/04/28 21:34 /L+BRof0.net
>>326
ありがとうございます。見てみます。
328:名前は開発中のものです。
04/04/29 09:25 fKr8I6Zs.net
hoshu
329:98
04/04/29 20:54 eFo7PbpH.net
三角形を、押したキーに応じてX,Y,Z軸について回転するところまでできました。
著作権とかよく分からないんですが、ほとんどサンプルの元の状態から変わってないんですが、
ソース公開しても大丈夫なんでしょうか?
330:245
04/05/02 11:03 OAzbaBIZ.net
誰が書いてもほとんど同じになるような短いコードだし、
適当に改造しときゃ大丈夫じゃないですかね。コメントけしたり。
もちろん責任はもてませんが。
331:名前は開発中のものです。
04/05/26 09:52 ZkbU9bqo.net
とまっちゃったよ?
332:名前は開発中のものです。
04/05/26 10:16 RveiUJUf.net
ツクール買え
333:98
04/06/01 00:42 51ZpkQEi.net
別のスレでゲーム作ってるのでこのスレは卒業します。
サイトも適当につぶしておきます。
334:名前は開発中のものです。
04/06/01 18:51 TjtQoeyw.net
98の卒業祝いあげ
335:名前は開発中のものです。
04/06/01 21:45 clhKLVnl.net
どこのスレに進学しましたか。
336:名前は開発中のものです。
04/06/02 03:14 K5/c3qHf.net
廃人スレ
337:尿 ◆TQRzkzBQz6
04/06/02 16:39 G5yOjIbE.net
.
338:名前は開発中のものです。
04/07/15 22:01 X+w0MHvL.net
新入生募集上げ
339:新入生
04/07/16 15:46 rveJEKqt.net
オレが応募します。
7月22日から開始します。
340:245
04/07/16 16:23 +XSBeZ7m.net
ヒロシです。俺だけジャージの色が違います。
ヒロシです。みんな俺のことをさん付けで呼びます。
341:名前は開発中のものです。
04/07/17 12:16 5LuAOAhe.net
ヒロシです
教科書の表紙が俺だけ違うとです。
342:新入生2
04/07/28 14:45 5jDkoPBH.net
俺も応募していいですか?
C/C++とWINDOWS APIでRPG作りたいです。
343:新入生2
04/07/29 15:33 +VMuaX4q.net
へんじがないただのしかばねのようだ・・・
んじゃ勝手に居座らせてもらいます。
とりあえず98氏のサイトで勉強してみます。
(´-`).。oO(人来ないかなぁ…)
344:名前は開発中のものです。
04/07/29 15:52 +VpB19P6.net
ROMはたくさんいると思われ
345:新入生2
04/07/30 10:12 zk8Gdi3K.net
良かった。見てる人いたのか。
では、まだそんなレベルまで行ってないんですが質問させて下さい。
マルチスレッドはRPG製作に使いますか(使った方が良いですか)?
そこの辺りはチョットしか勉強していないので…
346:名前は開発中のものです。
04/07/30 11:09 5XdzxF19.net
普通にタスクシステムで十分だろ?
347:名前は開発中のものです。
04/07/30 11:12 A0tDow7H.net
ネトゲだったら使う
348:新入生2
04/07/30 11:43 zk8Gdi3K.net
そうですか。じゃあマルチスレッドの勉強はまた今度にします。
349:新入生2
04/07/31 11:36 ypOdEBQi.net
DIB訳分からん
350:新入生2
04/07/31 15:36 ypOdEBQi.net
すいません。DIBのところで質問させて下さい。
URLリンク(www.sm.rim.or.jp)
では、バッファの1ラインの長さの計算に
if ((dwWidth*3) % 4==0) ~という式を使ってますが、
URLリンク(www.sm.rim.or.jp)
では、if (iWidth % 4 == 0) ~になっています。
この違いは何でしょうか?
351:新入生2
04/07/31 15:40 ypOdEBQi.net
すいません。自己解決しました
352:名前は開発中のものです。
04/07/31 19:47 YZJtdaLG.net
自己解決したら、内容を書いてくれると、後々の人のためになりますよ
# というか、自分の質問に責任もって下さい!
353:新入生2
04/07/31 22:58 ypOdEBQi.net
>自己解決したら、内容を書いてくれると、後々の人のためになりますよ
上はビットマップの横の長さが4の倍数か見てて
下は横一列のバイト数が4の倍数か見てるんではないかと。
間違ってますか?
>というか、自分の質問に責任もって下さい!
結構悩んだので質問したんですが、その直後閃いたというか何というか…申し訳ない
354:新入生2
04/07/31 23:01 ypOdEBQi.net
>上はビットマップの横の長さが4の倍数か見てて
>下は横一列のバイト数が4の倍数か見てるんではないかと。
逆だった…_| ̄|○
下はビットマップの横の長さが4の倍数か見てて
上は横一列のバイト数が4の倍数か見てるんではないかと。
です。ほんとごめんなさい。まじでごめんなさい。
355:練習帳著者
04/08/01 11:09 b9uMxnzb.net
>>345
>マルチスレッドはRPG製作に使いますか(使った方が良いですか)?
今、マルチスレッド(メインスレッドの他にゲーム処理用スレッドを
もつ)でRPGを作っていますが、あちこちにメッセージポンプを仕込む
必要がなくなってなかなか良い感じかも。スレッド別に処理を明確に
切り分けられるのなら、マルチスレッド化する、という道もあるでしょ
うね。
ただ、これまでスレッドを使ったことがないのなら、RPGを作るために
わざわざスレッドを覚える、という必要はないと思いますが。
>>350-354
>この違いは何でしょうか?
深い意味はありません(^^;。
どっちでも同じなので。
>下はビットマップの横の長さが4の倍数か見てて
>上は横一列のバイト数が4の倍数か見てるんではないかと。
そうですね。
ビットマップの横幅が4の倍数であるか、と24ビットDIBピクセル列
の横幅が4の倍数であるか、は結果的には同じ(n % 4が0ならば、
(n * 3) % 4も0)なので、プログラムではn % 4 == 0で判定した方
がすっきりするでしょうけど。
私も以前は「ピクセル列の横幅を4の倍数に合わせる」意味を明確
にするためにiWidth * 3という書き方をしていた面もありますが・・。
356:新入生2
04/08/01 11:38 gbRGZbfr.net
著者さん、わざわざレスありがとうございます。
サイトの方、いつも参考にさせて頂いてます。
この場を借りて感謝
357:名前は開発中のものです。
04/08/06 15:31 vsNkeVch.net
夏季講習上げ
358:新入生2
04/08/06 16:43 jaMpxEea.net
今、98氏のソースを見て勉強しているのですが、「NPC実装」のプログラム
URLリンク(www.geocities.co.jp)
をコピペして実行するとプログラム終了時に
Rum-Time Check Failure #3 - The variable 'lpDIB' is being used without being defined.
というエラーが出てしまいます。
一方、氏の「NPC実装 のEXE 」
URLリンク(www.geocities.co.jp)
を実行しても終了時にエラーが出ません。
何故でしょうか?教えてください。
環境はWindowsXP、Visual C++ .NETです。
359:名前は開発中のものです。
04/08/07 12:34 0vLmZFUE.net
今年の新入生は教えて君でだめだ。
360:名前は開発中のものです。
04/08/08 04:33 0wp5pRWn.net
もう諦めてツクールXPのスクリプトでもいじっとけ
361:名前は開発中のものです。
04/08/14 14:03 6/dV8pRa.net
無料でRPGツクール作れるようになりたいんですが、どうすればよいんですか?
362:名前は開発中のものです。
04/08/14 17:22 gmz99cAj.net
作ればいいんだよ
363:名前は開発中のものです。
04/08/14 18:10 yswnRgvv.net
>>361
ツクールを作るのか。
完成したら使ってあげるよ。
364:245
04/08/22 00:11 Em5qF6oY.net
P2Pの適当なチャットができるようになったけど今一理解が怪しい。
現在はIME制御クラスを製作中。
標準コントロール貼り付けるのは何かダサいし。
これが完成したら、もっとクラスの理解を深めたいので
自作ウィンドウのクラスでも作ってみたいと思っているけど
今の段階ではどうやって作ればいいか全く見当もつきません。
365:245
04/08/23 18:15 GI7MfX74.net
IMEもそこそこできてきた。練習に3Dで
見下ろし視点のボンバーマンでも作ってみようかな。。。
366:名前は開発中のものです。
05/01/06 14:46:34 TOA2E2ip.net
新年上げ
367:名前は開発中のものです。
05/01/06 16:08:43 bcRDIiW3.net
1はどこいった
368:名前は開発中のものです。
05/01/23 00:12:12 CdrNb8aJ.net
1は使命を成し遂げ平和に暮らしましたとさ
369:名前は開発中のものです。
05/01/23 09:51:39 EM9WdJXX.net
低脳はツクールツカエ
370:名前は開発中のものです。
05/02/15 14:07:03 6fYiWk+0.net
シナリオ記述にXMLを使おうと思っている
371:名前は開発中のものです。
05/03/05 04:20:35 lOW9T/w5.net
URLリンク(www.geocities.co.jp)
をクラス化して戦闘を付けてみた
改造大歓迎
URLリンク(gamdev.hp.infoseek.co.jp)
372:名前は開発中のものです。
05/03/25 18:08:47 hyYLgofF.net
>>371
だめでしたorz
URLリンク(gamdev.hp.infoseek.co.jp)
373:名前は開発中のものです。
05/06/27 16:26:44 m0GTyq92.net
なにこの良スレ
374:名前は開発中のものです。
05/08/02 18:28:41 cG1sgAYD.net
良スレ保守age
375:名前は開発中のものです。
05/08/16 20:45:04 /7e8XzCG.net
VC++とAPIでシミュレーションゲームを作ろうと思ってるんですが、
文章やデータなどをファイルから取り出す方法が分かりません。
セーブデータなどの作り方なども載ってるサイトとかってありませんか?
376:名前は開発中のものです。
05/08/17 16:58:26 fVmpEYfu.net
ふつうに関数用意されてるだろ。
C標準のつかうもよしAPIの使うもよし。
377:名前は開発中のものです。
06/02/26 17:16:58 QrnNw6+0.net
test
378:名前は開発中のものです。
06/08/07 17:58:48 fVrofJ4N.net
test
379:名前は開発中のものです。
06/09/17 17:51:08 UMZZv4Jy.net
URLリンク(tomhsp.hp.infoseek.co.jp)
↑これはネ申
380:名前は開発中のものです。
06/09/21 22:06:07 A82GeSKk.net
NEETスレの1って、実はこのスレの1だったのかもな。
いや、ただスレタイが似てるなぁと思っただけなんだがな。
381:名前は開発中のものです。
06/09/21 22:59:22 amkqCpKL.net
作れようにするスレと作るスレじゃ全然違うのよ
382:名前は開発中のものです。
06/10/12 20:48:12 ai4G0Iyz.net
俺様の出番か
383:名前は開発中のものです。
07/03/27 21:01:02 CibhAwPa.net
しさしぶり(←なぜか変換できない)に覗いてみたら、2年以上誰も進歩なしかよw
384:名前は開発中のものです。
07/03/28 14:11:37 2xhC3EIi.net
まぁ>>1はカールグスタフでも作っとけってこった
385:名前は開発中のものです。
07/07/08 19:52:23 r+xyIZh0.net
無料でRPG作れるように修行する
URLリンク(gameover.blog.shinobi.jp)
Level_1
URLリンク(gamdev.org)
386:名前は開発中のものです。
07/12/25 10:41:17 JqjujtnB.net
―― そろそろ誰も見てなさそうなので再利用 ――
開発環境 : VisualStudiam2005ExpressEdition(無料のやつ)
言語 : C++ あとWin32API、DirectX9.0
ブログでやろうかと思ったけどCSSに凝りそうで進まなさそうなのでとりあえずここで。
目標
・2000年頃のパソコンでギリギリ動く。
・ベクターにゲーム掲載される。
・余裕があったらMMOも作る。
387:名前は開発中のものです。
07/12/25 11:10:39 JqjujtnB.net
とりあえずは
1.DirectXのソースをコピーしてまるごとコンパイル
2.四角形表示
3.テクスチャを貼ってみる
4.マップを表示
具体的には、Win32APIのみでのマップ描画のように、マップチップを並べてバックバッファへ描画→
それをテクスチャとしてポリゴンに貼り付ける→ポリゴンを画面へ描画
5.アルファなんとかを駆使してマップ上に主人公を描画
6.完成!
マップの他に主人公も表示する必要があるから三角形のポリゴン4つでいいのかな。
DirectXを使う意味があるのかどうかよく分からないけど、これでいけそうな気がする。
イメージとしてはドラクエ1のようなものを2Dで。
388:名前は開発中のものです。
07/12/25 12:05:59 3Uuo4Sp0.net
はいはい晒しあげ