無料で俺がRPGを作れるようにするスレ
at GAMEDEV
[前50を表示]
100:98
04/02/10 23:00 +W/E8UNm.net
cout<<"ドラクエっぽいRPG"<<endl;
myhelp();
while(1){
cin>>n;
if(n=="w"){
x++; //キーを押したら、移動先の座標取得
if(x==2){ //立入禁止区域の座標を入力、複数可
//移動先が立入禁止なら行き止まり
x--; //進めないはずなので、1引いて座標あわせとく
cout<<"行き止まりだ。"<<endl;
}
else{
myit="上";
mygo(myit);
}
}
else if(n=="d"){
y++;
if(y==2){
y--;
cout<<"行き止まりだ。"<<endl;
}
else{
myit="右";
mygo(myit);
}
}
101:98
04/02/10 23:04 +W/E8UNm.net
else if(n=="a"){
y--;
if(y==-2){
y++;
cout<<"行き止まりだ。"<<endl;
}
else{
myit="左";
mygo(myit);
}
}
else if(n=="x"){
x--;
if(x==-2){
x++;
cout<<"行き止まりだ。"<<endl;
}
else{
myit="下";
mygo(myit);
}
}
102:98
04/02/10 23:08 +W/E8UNm.net
else if(n=="s"){
cout<<"その方向には誰もいない。"<<endl;
}
else if(n=="f"){
cout<<"ゲームを終わります。"<<endl;
break;
}
else{
myhelp();
}
}
};
課題はNPC作ることとAPI。本屋にAPIの本置いてないんだが・・・
うpろだ誰か教えてクレクレ
103:名前は開発中のものです。
04/02/11 00:10 6KcKUVZ5.net
俺もドラクエ風RPG作りたいので参考にさせてください
自分も同じコンパイラでやりたいと思っています
うpろだ
URLリンク(gamdev.org)
104:98
04/02/11 19:04 xqz1E56h.net
コピペミスとか修正バージョン
URLリンク(gamdev.org)
APIの解説サイト行っても、CかVC++基準で書かれてていまいち理解しにくい。
とりあえず一週間をめどにコンソール卒業しようと思う
>>103
マターリがんばりませう
105:名前は開発中のものです。
04/02/11 20:27 IIhh0aZu.net
釣り堀
106:98
04/02/11 21:20 xqz1E56h.net
>>105
釣りじゃないです。
なぜ釣りだと思ったんですか?
107:名前は開発中のものです。
04/02/11 22:14 PyR1xJwk.net
ドラクエタイプのRPG(Windows用/ソース付)
URLリンク(www.sm.rim.or.jp)
スクロール処理とかゲームシステムなどの解説もあり。
108:98
04/02/11 23:40 xqz1E56h.net
>>107
ありがとうございます。
ざっと見てみたんですが、APIの命令語と思われるものだらけで手に負えません。
今まで作った物がマッタク使えなくなりそうな悪寒
まだビットマップを表示させるのにてこずってる段階なんで、
そのくらいのクオリティになるのはかなり先になりそうです。
109:名前は開発中のものです。
04/02/12 13:44 aukATfXt.net
>>108
>ざっと見てみたんですが、APIの命令語と思われるものだらけで手に負えません。
まあ、「ウインドウ上にグラフィックを表示する」タイプのゲームなら、
当然「APIの命令語と思われるものだらけ」になるわなw でも、APIは
使い方自体はそれほど難しくない(どこにウインドウを出して、どれだけ
の大きさのビットマップを作りどこにビットマップを描画するか、とか
の指定をするだけ)から、少しずつ慣れていけば大丈夫。
まず、「ウインドウをだす」だけのプログラムを作って、そのウインドウ
に適当な色で点を打つ、というあたりからやってみる(これでウインドウ
の出し方とそのウインドウに何かを描く方法がわかる)とよいかも。これ
ができれば、あとはビットマップを作って絵を出すことも簡単にできるよ
うになる。
110:98
04/02/12 19:32 xscJNd+f.net
毎回うpろだに頼るのも気が引けるので、サイトスペース借りてみた。
URLリンク(www.geocities.co.jp)
やっとwindowsアプリの入り口に来れたが、ゲームとは呼べない物になってしまった。
ウィンドウプロシージャにコンソール版のキー取得イベントを詰め込んでみたんだが、
マップスクロールのことも考えると、後で書き直すことになりそう
>>109
命令語(関数?)と、それに付属する引数の種類と数が多いんで、
記憶力のない漏れにはAPIは天敵です。
次はウィンドウ上にドットを表示してみます。
111:名前は開発中のものです。
04/02/13 12:27 c7MTKmdy.net
>>110
WinAPIはよく使う命令だけ覚えればおk。
大体どんな機能があるかを覚えといて、使いたいときは本なんかで調べる。
それを繰り返せばいつのまにか覚えてる。
112:98
04/02/13 19:11 YwOWpj4L.net
>>111
だいたいの流れが理解できてきたんで、その方向で逝ってみます。
スクリプトなのにコンパイル必要なのと、謎の言語であるという点で
リソース・スクリプトが理解できないんですが、これは放置でもいいのでしょうか?
これが分からなくてビットマップが表示できないです・・・
113:名前は開発中のものです。
04/02/13 21:41 NsiLkd+i.net
>>112
リソースから読むんじゃなくて、最初はまず「自分で作ったビットマップ」
を表示する処理を書いてみた方がよいよ。
114:98
04/02/13 23:35 YwOWpj4L.net
>>113
自分で作ったビットマップというのは、こういうのでしょうか?↓
URLリンク(www.geocities.co.jp)
それとも、リソーススクリプトなしでビットマップ表示ができるということでしょうか?
とりあえず上の方法で簡単なゲームから作ってみようかと思う今日この頃。
115:98
04/02/14 00:21 0N5qgnUm.net
×ビットマップ表示ができるということでしょうか?
○ペイントで描いた絵を表示できるということでしょうか?
116:98
04/02/14 23:25 0N5qgnUm.net
URLリンク(www.geocities.co.jp)
キーを押すと、その方向に動く○
ドラクエって作るの簡単な部類だと思うんだが、先は長い・・・・
117:98
04/02/16 22:01 EaOpAIgY.net
やっと絵が表示できた。
でもマップチップの並べ方が分からん。
ひたすらBitBltするしかないのだろうか・・
118:98
04/02/16 22:19 EaOpAIgY.net
なんか日記みたいなのでRPG作ってる人どんどん参加してください(´・ω・`)
(ツクール除く)
ってことであげ
119:名前は開発中のものです。
04/02/16 23:38 4tM5r8pl.net
>98
私もRPG作成しています。製作環境はdelphi6です。
共に頑張りましょう。
URLリンク(www.geocities.co.jp)
120:名無しさんは14才
04/02/17 01:13 3jAAI9V7.net
>98,119
わたしはJavaスレでまったり製作ちゅう。
がんばろうね♪
121:名前は開発中のものです。
04/02/17 16:16 HV2czGyE.net
>>98
ゲーム作りの解説してるサイトとか見てる?
検索すればいろいろあるから見た方が良いよ。
あといきなりRPGは厳しいので、簡単なのから作った方が良いよ。
マップチップはループさせて表示すれば。
122:98
04/02/17 21:52 hWbX7oGp.net
人がキターー
>>119,>>120
言語違うけどがんばりましょう
どうでもいいけど、この板ってけっこう過疎化してますね・・
>>121
ブックはしてあるんですが、まだあまり見てないです。
directX使っているところが多いので、先にAPI解説サイトかなあ、と。
簡単なのというと、パックマンとかですかね?
forを二重にしたら敷き詰まったんですが、これだと好きな場所に
好きなマップチップを置けないような気がするんです
123:名無しさんは14才
04/02/18 15:42 UkGMdZe5.net
>98サン
そうですねー。けっこう人少ないですよね。
でも、個人的にはまったりしてていいかな、と思います。
ちなみにわたしも今マップ関係を製作ちゅう。微妙に音楽に浮気ちゅうだけど。
Javaスレも再利用中(占拠中?)。
みんなまったりがんばりましょー!
124:名前は開発中のものです。
04/02/18 16:00 wGSU8Vo8.net
>>98
Cで作るとなると覚えることが沢山あって大変だよ…
HSPとかやってみたら?
Cと比べてすげー簡単だし、画像処理関係のAPI揃ってるし。
考え方ってのは一緒だから無駄にはならんよ。
125:98
04/02/19 00:59 8yMY9wg9.net
>>123
あんたスゲェよ・・・
俺もマップ製作中だけど、マップを並べるプログラムで手こずってる orz
>>124
他の言語にしたほうが楽なんだろうな、ってのは薄々感づいてるんですが、
ゲームを作ること自体が目的ではないので、もうしばらくはこのまま行ってみようかと。
126:名前は開発中のものです。
04/02/19 06:43 ZuScVm6q.net
> forを二重にしたら敷き詰まったんですが、これだと好きな場所に
> 好きなマップチップを置けないような気がするんです
そりゃあforの中で同じマップチップ置く処理しかしなければそうなるさ
例えば2次元配列使ってマップデータを格納しておいて、forの中ではその情報を元にマップチップを描画するとかしないと。
127:124
04/02/19 11:10 4j3KDMl/.net
HSPでやってみれば?とかいった人間だが
俺も参加させてもらう。
一応今はHSPで作ってる。
まだゲーム作ったことがないので、あんま役には立てんが
お互い完成までがんばってみよう。
ちっちゃいRPG作成中……
URLリンク(henachoko.homeip.net)
ここにHSPだけどマップ表示のサンプルアップした。
map_sam.asがソース。
map_sam.exeが実行ファイル。
終了はウィンドウのXボタンで。
map.bmpが使ったマップチップ。
動かんかったら言って。
128:98
04/02/20 23:43 WBg2coIl.net
>>126
ちょっとやってみたんですが、まだ理解不足でコンパイル時にエラー10個くらいでますた。
今はとりあえずBitBltしまくっておいて、マップスクロール時に問題が出てきたら
それでやってみます。
>>127
がんがりませう。
マップは出たんですが、動かないです。ソース見た感じだと、もとから動かない仕様でしょうか?
129:名前は開発中のものです。
04/02/21 00:50 b1rfLJZj.net
98もゲムを実行するには何のランタイムが必要ですか?
130:名前は開発中のものです。
04/02/21 01:54 Jr2f0/ES.net
>>128
好きな場所にマップチップが置けないってのは解決したの?
131:124
04/02/21 10:59 SOonC27/.net
>>128
ああ、マップ表示のサンプルですよ。
動かない、というかキャラクター表示はまだ。
一応マップ表示の原理をHSPで書いてみたんだけど。
>>126の言ってることをやってます。
132:98
04/02/21 23:50 n2vfldWV.net
>>129
ランタイムいらないです。コンパイラが必要です。
まだゲームといえない段階なので、もうちょっとできたらexeでうpします。
>>130
好きな場所に置くこと自体はできたんですが、今のまま作っていくと、
マップが大きくなったときに死ねそうです。↓
URLリンク(www.geocities.co.jp)
>>126氏の方法で挫折したのが↓ エラーイパーイ
URLリンク(www.geocities.co.jp)
>>131
bmpファイル一つからマップチップ4つ取り出す方法もあるんですね。
bmpファイルを4つに分けるより効率がいいんでしょうか?
133:名前は開発中のものです。
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
おめでd
>>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
上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな
上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな
上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな
上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな
上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな
上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな
上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな
上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな
上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな
上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな
上げ忘れちまったよ。ごめんな上げ忘れちまったよ。ごめんな
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
3465日前に更新/167 KB
担当:undef