- 1 名前:1 [02/05/28 20:36 ID:pts0IQX6.net]
- ゲームの改造、製作等のプログラムに興味をもっています。
厨房に分かる程度優しく教えてくれた方にはお礼をイイマス
- 237 名前:社内ニート ◆OpY5DDvqSw [2011/02/08(火) 04:22:46 ID:0uhgadeq.net]
- 近似的に角度を得ることができました。
継続的に落下しているときだけ機体を水平に保つとかもやらせたいけど、それはまた次の機会に。 次は玉を発射させることと、地形を変化させることに挑戦です。 というか、いったい何時までおきてるんだおれ。
- 238 名前:社内ニート ◆OpY5DDvqSw [2011/02/16(水) 20:17:05 ID:6gCXsN0z.net]
- テス
- 239 名前:社内ニート ◆OpY5DDvqSw [2011/02/16(水) 20:23:46 ID:6gCXsN0z.net]
- なんかアク禁食らってたらしい。
引き続きよろしくお願いします。 では、質問行きます。 弾飛ばしたいんだけど、弾の軌道と位置はどういう式で表せばいい? 弾は左右に吹く風でながされます。 それと、高速で弾を飛ばすと当たり判定を突き抜けることがあるかもしれない。 そのあたり考えてください。 あと、ここで人に聞くこともできず、自分で考えてもわからないのでインターフェイスつくったりしてました。 ttp://218.219.242.231/~kuroneko/imgboard1/img-box/img20110216201831.jpg 射撃角度を変えたり、発射ボタン(スペース)を押しつづけると下のバーが伸び縮みするようにもなりました。
- 240 名前:名前は開発中のものです。 mailto:sage [2011/02/17(木) 07:41:33 ID:jsy99J9k.net]
- 通りすがったが、面白そうなので首を突っ込んでみる。
DirectXや関連ライブラリの知識はないのでアルゴリズムの基本を地でいく。 >弾の軌道と位置はどういう式で x方向:横からの風は弾のx方向の速度に風速の値を加減すればOKっしょ。 y方向:弾が重力で落ちる→放物線→2次関数という連想を出来るようになるべし。 >当たり判定を突き抜けることがあるかもしれない 基本は、弾が今ある座標と次に移動する座標を結ぶ直線(線分)を考えて、 その間に障害物があるかを判定していく。(中学〜高校レベルの代数幾何) 高速/低速の判断なく常時やっても問題ないだろう。(効率の良いやり方は パフォーマンスがネックになってから考えろ) でもこれはライブラリにありそうだな。(真偽はエライ人に聞いてくれ) 精進するでござる。ニンニン
- 241 名前:社内ニート ◆OpY5DDvqSw [2011/02/18(金) 01:08:24 ID:2Ex7ENec.net]
- 通りすがりの方。今後ともよろしくお願いします。
弾の軌道は2時関数の放物線軌道といっていますが、 そこに時間の概念も加えないといけません。 弾が等速で動くわけではないということが重要です。 私が最初に考えていたのは、 x=0、y=0の座標を発射地点 発射角度を r (ラジアン) 発射パワーを p 重力は 1 cx1,cy1は時間(1ループ)ごとの増加座標 cx2,cy2は弾の存在位置です cx1=p*cos( r ); cy1=-p*sin( r ); while(以下、座標計算と表示を繰り返す) { cy1=cy1+1; //時間当たりの増加分、重力を加算し続ける cx2=cx1+cx2; cy2=cy1+cy2; //弾の存在位置、cx1,cy1の累積 x=cx2 , y=cy2 に弾を表示 } これに、重力と同じように風の影響も加えたものは以下のような結果になりました。 ttp://218.219.242.231/~kuroneko/imgboard1/img-box/img20110218003141.jpg もっときれいに滑らかに表示されるように調整します。 その上で問題になるのが、やはり地形との当たり判定です。 どこで当たるのか、どのタイミングで当たるのか。それが問題です。
- 242 名前:名前は開発中のものです。 mailto:sage [2011/02/18(金) 02:09:02 ID:FPQVKYtr.net]
- >そこに時間の概念も加えないといけません。
惜しい。というか、ソース上は考え方はあってる。 普通2次関数を思い浮かべるときはxy座標系が基本だが、重力はy方向にのみ 影響するパラメータで時間tに伴う変化なので、ty座標系になる。つまり y=at^2+bt+c (^2は階乗) になるわけだな。これをtで微分(つまり速度)すると cy1=2at+b (cy1は>>237 の変数ね) となる。
- 243 名前:名前は開発中のものです。 mailto:sage [2011/02/18(金) 02:10:04 ID:FPQVKYtr.net]
- これを >>237のソース cy1=cy1+1 に当てはめると
右辺のcy1→b 右辺の1→2a 「tはどこ行った?」と思うかもしれないが、cy1は累積して加算しているので while()をまわして+1していることがすなわちtを掛けていることになる。 つまり無意識のうちに2次関数を使っていることになるのだ(考え方が一足飛びだけどね)。 「言葉で言うと小難しいが、ソースに落とすと結構あっさり」というのは わりとある。(逆も然りw) x方向にも変な加速度をつけたり、弾の座標によって+1の値を変えたりすると、 異常重力っぽくなってゲームとしてのバリエーションが増えて面白いのだが、 それはまた先の話。 この調子でどんどん行くでござる。ニンニン
- 244 名前:名前は開発中のものです。 [2011/02/18(金) 07:17:22 ID:FPQVKYtr.net]
- 誤記ってた。
誤) 重力はy方向にのみ影響するパラメータで時間tに伴う変化なので、 正) 重力はy方向にのみ影響するパラメータでy方向は時間tに伴う変化なので、 誤) y=at^2+bt+c (^2は階乗) 正) y=at^2+bt+c (^2はべき乗)
- 245 名前:名前は開発中のものです。 mailto:sage [2011/02/18(金) 12:16:32 ID:ZrrW6s/S.net]
- 考え方としては
0ほとんどの空間 1地表にものすごく近い空間 2地面 で移動後が0の時は高頻度なので実行速度を稼ぐためスルーし 1の時は2を通過したかを調べて突き抜けを判断し 2の時は通過した地表の点を求める
- 246 名前:社内ニート ◆OpY5DDvqSw [2011/02/19(土) 10:08:49 ID:XjdQQ+3S.net]
- xとtの二次関数 yとtの二次関数にすればよかったのか。
言われてみれば当たり前のことだけど気づかなかった。 つーか、二次関数とか三角関数とか高校以来10年ぶりぐらいでなつかしいw これでうまくいきそうだ。 あと、重力加速度の単位って m/s^2 だったんだな。 最初からこれをググってれば迷わなかったかも。 風の影響も重力とまったく同じやりかたでいいや。 ということで、こういう式で弾の表示位置を計算 pはパワー rは角度 wは風 gは重力 tは時間 a = p*cos(r) b = -p*sin(r) while() {t++ x = t*( a + w*t ) y = t*( b + g*t )}
- 247 名前:社内ニート ◆OpY5DDvqSw [2011/02/19(土) 10:13:15 ID:XjdQQ+3S.net]
- ↑の式では
t++で tが1増加するごとに弾の表示位置を計算させているけど、 その間に t をもっと小刻みに増やして、当たり判定を計算すればなんとかなりそう >>238-240 助かった。 ありがとう〜。
- 248 名前:名前は開発中のものです。 mailto:sage [2011/02/19(土) 12:35:32 ID:BPXTZO+O.net]
- >>242
>二次関数とか三角関数とか高校以来10年ぶりぐらいでなつかしいw 上記に複素数と行列を加えれば、今あるほぼすべてのゲームの数学的要素はコンプリート。 全部高校までに習う内容で充分。 3Dゲーム(擬似/ポリゴン)もこれらの要素だけで出来る。四元数の話があるけど、ゲームで あればこれは各要素の組み合わせで充分。 あとはOS(Windows/DirectX等)の使い方を知ればゲームプログラマとしては一人前。 ネットワーク使うとなると、さらにその先やね。 これらのほうが数学云々よりも何倍も面倒くさい。(あまり難しくはない) ある程度いくと Don't think, FEEL!な世界になってくる。 それとx方向の話や当たり判定についてはあえて突っ込まない。(細かいことだし、一概に間違いとも言えないので) いろいろ試して自分がやりたいことを表現できるようになるべし。 さて、長々と書いたが拙者の講義はここまで。以降は適当にROMって ニヤニヤしているので、踊りまくるでござる。ニンニン
- 249 名前:社内ニート ◆OpY5DDvqSw [2011/02/19(土) 15:14:22 ID:XjdQQ+3S.net]
- 次は当たったところを変形させるほうほうだな〜。
>>201でうpされたようなやり方に変えてみたほうがいいかな。
- 250 名前:社内ニート ◆OpY5DDvqSw [2011/02/19(土) 15:20:39 ID:XjdQQ+3S.net]
- でも今日はやらねーけどな!
- 251 名前:名前は開発中のものです。 mailto:sage [2011/02/19(土) 23:41:27.07 ID:UpL2Vi1Q.net]
- アク禁がやっと解除されたようなので今更ですが、参考までに、>>212では、
@弾の位置を(x,y)、弾の発射速度を(vx,vy)とする。 ※(x,y)は砲台の位置から、(vx,vy)は砲台の角度から計算する。 考え方は>>242のa,bの計算方法と一緒ですが、pは1フレーム期間を基準にしています A1回の計算ごとに、 - vyに重力加速度gyを足す(gも1フレーム期間あたりの加速度です) -足し終えた(vx,vy)を(x,y)に加算する -(x,y)の地面を判定する/および描画更新 を繰り返しています。 風は考慮してませんでしたが、 いくら追い風でも風速より弾丸が早くなるのは不自然かと思うので、 水平方向に加速するのではなく相対速度が一致させるように漸近させる方法にします。 つまり、毎ループごとに vx= (1-k)*vx + k*windx (kは漸近化係数)で更新します。
- 252 名前:社内ニート ◆OpY5DDvqSw [2011/02/21(月) 21:43:01.40 ID:3YAa7u9w.net]
- おお、あんたもアク禁くらってたんですか。
何ででしょうね。 例の、通り魔予告兄弟の関係で広範囲にアク禁かかってたんでしょうか。 まあ、なんにしろ、ほんの1週間程度で解除されてよかったです。 それで、次にやってみようと思うのは、 弾の当たった地形が円形にえぐれるってことです。
- 253 名前:社内ニート ◆OpY5DDvqSw [2011/02/21(月) 21:44:08.08 ID:3YAa7u9w.net]
- 今、当たり判定は二次元配列に0か1の数字を入れたものでやっています。
まず、地形画像(地形.bmp)と、それと同じ形の白黒画像(地形_a.bmp)を用意します。 白黒画像をアルファチャンネルとして、地形画像の何も無いところを透明にします。 さらに、白黒画像と同じ形の二次元配列を別に用意して、それで当たり判定を行います。 この配列内に直接円形の変化をつけたいんです。 [0000000111110000000] [0000011111111100000] [0000111111111110000] [0000111111111110000] [0000011111111100000] [0000000111110000000] [0000000000000000000] こんな感じ。
- 254 名前:社内ニート ◆OpY5DDvqSw [2011/02/21(月) 21:57:39.46 ID:3YAa7u9w.net]
- すいません、話をうまくまとめられないので
結論だけいいます。 白黒BMPファイルを当たり判定に利用したいので BMPファイルなどについて質問させてください。 当たり判定用に、画像と別に2次元配列を用意するのは中止します。
- 255 名前:社内ニート ◆OpY5DDvqSw [2011/02/21(月) 22:13:55.56 ID:3YAa7u9w.net]
- まず、BMPファイルっていうのは
1.ファイルヘッダ 2.情報ヘッダ 3.ビットフィールド 4.カラーパレット 5.イメージデータ というものの集まりだということはわかりました。 そして、5.イメージデータっていうのが2次元配列になってるんだろうってこともわかりました。 ここまで合ってますか? そして、イメージデータに、 『map[640][2400]』 みたいなハンドルをつけてしまえば、 BMPファイル内のイメージデータを当たり判定用の配列としてそのまま利用できるんじゃないかと。 >>201のやってることってそういうことですか?DXライブラリじゃない書き方なんでいまいちわかりませんでした。
- 256 名前:社内ニート ◆OpY5DDvqSw [2011/02/21(月) 22:28:33.49 ID:3YAa7u9w.net]
- >>249-259は無視してください。
- 257 名前:社内ニート ◆OpY5DDvqSw [2011/02/21(月) 22:29:14.08 ID:3YAa7u9w.net]
- >>249-250です。すみません。
- 258 名前:名前は開発中のものです。 mailto:sage [2011/02/21(月) 22:57:16.81 ID:N0QjpwZi.net]
- BMPファイルには、白黒(2値)、16色、256色、フルカラーなどの種類があります。
それによってカラーパレットがあったり、なかったりします。 本題のイメージデータですが、やはり種類ごとに格納形式が違います。 この部分を2次元配列に直接読み込んで使おうとするなら、 256色無圧縮のファイルであることを前提に、配列はchar型で確保しておくことになります。 メモリの使用量を考えると非効率的なので、あれこれ検討していくと、 >>201の方式を含めて、なんらかの方法で2次元配列を用意することになるんじゃないかと思います。 ちなみに現時点で戦車の傾きを求めるとき、ピクセルの有無の参照には何を使っていますか?
- 259 名前:社内ニート ◆OpY5DDvqSw [2011/02/21(月) 23:44:32.25 ID:3YAa7u9w.net]
- >>254
ピクセル有無の判定のために、 白黒画像とは別に用意した、2次元配列を使っています。 この配列は、 GetPixelSoftImage で、白黒画像のピクセルを一つずつ調べて、 黒なら 0、白なら 1、といった風に、fprintf でファイルに書き出していきます。 そうやって作っておいた0と1のテキストファイルを ゲーム開始時にマップデータとして読み込んでいます。 ファイルに書き出したりしないで、 GetPixelSoftImage で、ピクセルが白か黒か調べて、いきなり配列 『map[640][2400]』 に、0と1を入れていってもよかったんですけど。
- 260 名前:名前は開発中のものです。 mailto:sage [2011/02/22(火) 00:06:54.21 ID:vXGD/Huf.net]
- この場合、白黒画像のBMPファイルと、0/1のテキストファイルの両方は、重複するんないんじゃないかと思いますが、
ここまでの実装をそのようにしてきて、うまく進んでいるのなら、とりあえずそのまま進めるといいと思います。 確認ですが、戦車を処理するときは、GetPixelSoftImage(x,y)ではなく、map[y][x]でアクセスしてるのですか? もしそうだとするなら、着弾地点を中心にmapの配列を書き換え、かつ画面表示も同じようにすれば、 所望の動作をすると思います。
- 261 名前:社内ニート ◆OpY5DDvqSw [2011/02/22(火) 00:21:48.52 ID:s/YhWNAt.net]
- >>256
そう思ったんですが、 白黒BMPにDrawCircleの塗りつぶしで描いた円と、 配列内に0と1で描いた円が、1ドットでもずれていたら、 何も見えないところに地形が存在したり、 見えている地形を突き抜けてしまったりということがおきると思いますし、 どうやって配列内に円形の変化をつけるかっていうところも、シンプルにまとまった方法が思い浮かばないので。
- 262 名前:社内ニート ◆OpY5DDvqSw [2011/02/22(火) 00:27:20.13 ID:s/YhWNAt.net]
- 追記、
戦車を処理するときはmap[y][x]を使っています。
- 263 名前:社内ニート ◆OpY5DDvqSw [2011/02/22(火) 00:38:03.69 ID:s/YhWNAt.net]
- 今すぐ手っ取り早くできそうなのは>>256のいうとおり、
画面表示とmapの配列を同じように行うのが一番簡単な方法なんですけどねぇ。 できれば、 アルファチャンネル用の白黒画像と、 map[y][x]を連動させるって言うか、 白黒画像そのものがmap[y][x]、 みたいなやり方にしたい。 ゲームの土台になる部分は、ちゃんとしたものにしたいんです。 タンクの画像とか演出は多少陳腐でもでもかまわないけれど。
- 264 名前:名前は開発中のものです。 mailto:sage [2011/02/22(火) 00:56:35.31 ID:vXGD/Huf.net]
- 配列と画面を円でえぐる処理は、こんな方法はどうでしょうか?
void FillCircle(int Xc,int Yc,int R){ for(int x=-R; x<=R; x++) for(int y=-R;y<=R; y++) if(x*x+y*y<=R*R){ if(Xc+x>=0 && Xc+x<2400 && Yc+y>=0 && Yc<640){ map[Yc+y][Xc+x]= 0; // 地面判定用配列の加工 SetPixel(Xc+x,Yc+y,背景色); // 画面の(Xc+x, Yc+y)のピクセルを抜く処理 } } } SetPixelと書いた部分は適宜実装する必要がありますが、 配列の0/1と画面のピクセル状態がずれる心配はないと思います。 ところで、そもそも背景に地面を重ねる処理にαチャネルを使っているなら、 地面の画像は[640][2400][4] (R,G,B,A/pixel)の配列じゃないでしょうか? map[y][x]の代わりに、groundimage[y][x][3]を参照する方法は使えませんか?
- 265 名前:社内ニート ◆OpY5DDvqSw [2011/02/22(火) 22:31:11.81 ID:s/YhWNAt.net]
- >>260
おお、さすがです。 2つも解決法をありがとうございます。 1つ目の方法も完璧だと思うのですが、 2つ目の方法の、αチャンネルを使った画像のグラフィックハンドルを配列として使う(?) 方法も興味深いです。 ためしに、地形画像のグラフィックハンドルを配列として扱ってみたら、 なにかエラーが出てしまいましたが、もう少しαチャンネルについて調べてみたいと思います。 ありがとうございました。
- 266 名前:社内ニート ◆OpY5DDvqSw [2011/02/22(火) 22:38:21.20 ID:s/YhWNAt.net]
- ご存知かと思いますが、DXライブラリでは、
指定のファイル名の末端に『_a』が付く画像ファイルを透明情報として自動的に読み込んでくれる ということで、アルファチャンネルについてまったく何も知らずに使っていたので、 これを機会にすこしだけ勉強します。 たぶん、DXライブラリを使わずにアルファチャンネルを使うには けっこう複雑なことをしないといけないんだろうなぁ。
- 267 名前:社内ニート ◆OpY5DDvqSw [2011/02/22(火) 23:46:04.34 ID:s/YhWNAt.net]
- なかなか、望みの情報が見つかりませんが、
引き続き、map[y][x]の代わりにgroundimage[y][x][3]を参照する方法を考えていきます。 なにか、役に立ちそうなホームページとかありましたらまた教えてください。 ではまた。
- 268 名前:名前は開発中のものです。 mailto:sage [2011/02/24(木) 00:22:24.50 ID:o93X2te6.net]
- DxLibは使ったことが無いのですが、リファレンスページを読んだところ、
(1) 地表画像(RGB)および山形状(A)をLoadSoftImageで読み込む (2) GetPixelSoftImage(handle, x,y, &r,&g,&b,&ground)で、 x.,y地点の地面の有無を判定する (3) 地形の更新は、GetPixelSoftImageに引き続き、groundを0にして、 DrawPixelSoftImage(handle, x,y, r,g,b,ground); で書き戻す。 という手順が考えられます。 SoftImageのアルファを判定用にし、かつ地形の変形にも利用します。 敢えて配列を使わなくても、これで、事足りるのではないかと思います。 問題は更新結果を画面に反映させる方法なのですが、 リファレンスによれば、DrawSoftImageを使うか、 GreateGraphFromSoftImageでグラフィックハンドルを作ってから、 DrawGraphで描画するべきではないかと思われます。 DrawSoftImageの説明には負荷が高いようなことが書いてあるので、 いったんグラフィックハンドルを作るのが正式な手続きなのかもしれません。 また、地形の画像が2400x640と比較的大きいので、そういう時は、 CreateDivGraphFromSoftImageを使うべきなのかもしれません。 長々書いていますが、冒頭に書いたとおり、DxLibは使ったことがありません。 詳しい人、フォロー願います。
- 269 名前:社内ニート ◆OpY5DDvqSw [2011/02/25(金) 01:28:00.44 ID:gNKYJQnb.net]
- いろいろとアイディアを出していただいてありがとうございます。
とりあえずは、配列で当たり判定をするのにこだわらず、製作をつづけてみます。 日曜あたりに、 弾の当たった地形がえぐれるのと、 そこの当たり判定がなくなるようになるのを作ってみます。 その次は、一気に難しくなりそうですが、 ネットで対戦することを考えてみたいと思います。
- 270 名前:社内ニート ◆OpY5DDvqSw [2011/02/27(日) 18:19:36.84 ID:BoOhxSt8.net]
- ttp://218.219.242.231/~kuroneko/imgboard1/img-box/img20110227181444.jpg
>>260の上の方法で地形の変形はうまくいきました。 DXライブラリのリファレンスを見たところ、ネット対戦を取り入れるのはやっぱり難しそうですね。 どうも、IPアドレスとか調べるのはDXライブラリだけじゃできないっぽいし。
- 271 名前:社内ニート ◆OpY5DDvqSw [2011/02/27(日) 18:27:45.42 ID:BoOhxSt8.net]
- プレイヤーがホストを立てて、2〜8人までの対戦をできるようにします。
ホストを探したり、プレーヤー同士の交流を行うロビーみたいなものを 無料サーバーを借りて作ろうと思います。
- 272 名前:名前は開発中のものです。 mailto:sage [2011/02/28(月) 22:28:30.01 ID:g0je8oOR.net]
- 先に、通信抜きで2人対戦できるようにすべきじゃないのかな?
- 273 名前:社内ニート ◆OpY5DDvqSw [2011/03/01(火) 23:45:55.00 ID:uZgo1Fuw.net]
- 通信抜きでって、ひとつのパソコンで対戦ってこと?
絶対やるべきっていうならそうするけど、 ネット対戦前提で2人対戦ってところから作ったほうがよくない? ひとつのパソコンで対戦って、ターンが交互に回ってくるようにするだけでいいし。
- 274 名前:名前は開発中のものです。 mailto:sage [2011/03/02(水) 00:52:26.76 ID:jsVU/WxL.net]
- ひと通りのゲームの流れ(スタート画面->ゲームプレイ->勝敗処理->ゲーム終了)を単一PC内で
実現するのが一般的なひと区切り。 TCP/IPの基礎知識(socket利用あたりまで)があるのならこの時点でネット対応やっちゃってもいいけどその力量がワカラン。 ロビーサーバ構築となるとさらに別世界。規模/機能にもよるけどね
- 275 名前:名前は開発中のものです。 [2011/03/02(水) 13:34:35.92 ID:BF83P3je.net]
- とりあえず、ネトゲ制作のスレとか、DXライブラリのリファレンスを読んで勉強しながら、余裕があればダメージ計算とか細かいとこも作ってみます。
- 276 名前:名前は開発中のものです。 mailto:sage [2011/03/02(水) 21:25:02.39 ID:/NOpHlDA.net]
- ちゃんとゲームとして成り立つところまで作ってからネット対戦を考えたら?
戦車が2台出るだけでも色々問題が出てくるだろうし。 それと、とりあえず>>108まで完成したのなら一度見てみたい。
- 277 名前:社内ニート ◆OpY5DDvqSw [2011/03/03(木) 19:44:40.68 ID:eZVnKNXf.net]
- >>272
F5押したらデバッグはできるけど、 アプリケーションに作り上げる方法教えてください。
- 278 名前:名前は開発中のものです。 mailto:sage [2011/03/03(木) 22:11:29.10 ID:k5LomlRL.net]
- VC++でF5押したら普通に実行ファイルがビルドされてると思うが?
デフォルトならプロジェクトフォルダ内にReleaseかDebugのフォルダがあるでしょ。
- 279 名前:社内ニート ◆OpY5DDvqSw [2011/03/04(金) 20:02:56.37 ID:Vy+gp0Dp.net]
- Debugのフォルダはあったんですが、その中に入っているものをダブルクリックしても
ゲームが起動するものはありませんでした。 方法がわかったらうpすることがあるかもしれません。 それで、もっと細部まで作ってからネット対戦を考えたらどうかという意見ばかりのようですが、 後の細かいところというのは、一つ一つやっていけば自分だけでもできそうなことだと思うので ネット対戦の部分をどういう風に作るのか、考えていきたいと思います。
- 280 名前:社内ニート ◆OpY5DDvqSw [2011/03/04(金) 20:31:56.59 ID:Vy+gp0Dp.net]
- IPアドレスは各自が調べて、ゲームルームに入室したときに
他のプレーヤーたちと自分のIPを教えあう。 DXライブラリの ConnectNetWork と、IPアドレスを使って相互にPCを接続する。 って感じでいいんじゃないかとおもう。 しかし、サーバーってのはどういう風に扱えばいいんだろ。 各プレーヤーのPCにDLするゲームソフト以外に、 仲介するためのソフトを作って、それをサーバーにおく必要があるってことかな。
- 281 名前:名前は開発中のものです。 mailto:sage [2011/03/04(金) 22:18:57.26 ID:e0BGDa4h.net]
- >仲介するためのソフトを作って、それをサーバーにおく必要があるってことかな。
これについては既存のネトゲでも各種方式がある。 1)サーバプロセスが常にデータを中継する たいていの本格的MMOはこれ。データを随時中継する際に中身をチェックしてチートを防ぐ効果もある。 プレイ規模にもよるが、サーバのパワー(ハード、ソフト共)がある程度高くないとプレイに支障が生じる。 例:UO、EQ、WoW 2)ロビーサーバのみ独立させ、プレイ中はプレイヤー間で直接通信をする。 MO的なネトゲはこれ。ロビーサーバで各プレイヤーのIPをクライアントに通知して プレイ中はロービーサーバを経由せずクライアント間で直接通信する。所謂P2Pに近い。 リアルタイム的な要素に左右されるゲームに有利。 商用のネトゲはチート対策や同期ためにサーバにも随時データを送ってチェックするのが一般的。 例:Diablo(クライアントがゲームサーバの役割も持つ)、各種FPS系 例は古典的な有名どころ。 他にもありそうだけど、大抵はこれら2つの方式をいろいろな組み合わせで実装している。 最近の商用ネトゲだと「MOだけど1)方式」ってのも多い。 IPアドレス情報の交換についてはロビー(ゲームルーム)に入室した時点でロビーサーバがクライアントのIPを 分かっていることになるのでユーザが直に調べる必要は必ずしもない。(そういうつくりにしないといけないけど) むしろロビーのチャット等で直にIPを教えあうと、いたずら好きなバカがDOS攻撃対象にしたりする可能性もあるので あまり好ましくない。 システムを一般に公開しないのであればあまり問題はないと思うけどね。 その昔、インターネットでの掲示板も一般的じゃない頃は電話やメールで互いのIPを教えあったものさ・・・。
- 282 名前:名前は開発中のものです。 mailto:sage [2011/03/05(土) 11:23:37.39 ID:1BoPAtkM.net]
- ってか普通にクライアント同士1:1でちゃんと動くかってところを確認してからだろ
- 283 名前:社内ニート ◆OpY5DDvqSw [2011/03/05(土) 14:02:05.82 ID:ytiYcFyh.net]
- >>277
(2)の方法って、つまり>>267と同じことだよね? []- [ここ壊れてます]
- 285 名前:社内ニート ◆OpY5DDvqSw [2011/03/05(土) 14:04:21.14 ID:ytiYcFyh.net]
- とりあえず、ロビーで対戦相手を探すというところをはぶいて、
クライアント同士1:1で動かせるように作ってみます。
- 286 名前:社内ニート ◆OpY5DDvqSw [2011/03/05(土) 14:15:44.76 ID:ytiYcFyh.net]
- 自分のIPアドレスを調べるのってどんな方法がおすすめ?
winsockというものを使ったこんな方法がみつかったんですけど、これでいい? ttp://members.jcom.home.ne.jp/toya.hiroshi/get_my_ipaddress.html
- 287 名前:名前は開発中のものです。 mailto:sage [2011/03/05(土) 18:38:05.45 ID:1BoPAtkM.net]
- >>281
足元を固めていくという意味ではとりあえずはいいんじゃね? ipconfigキックで出力をリダイレクト→リダイレクト結果を文字列検索とかのシンプルな方法もアリだろう 複数枚NICがある場合考えるとめんどいがそこはWINSOCK使ってもも同じこと インターネット経由にする場合はローカル/グローバルの話があるので(一般的には)上記だけでは足りないってのは分かるよな? 分からなければ ローカルアドレス グローバルアドレスでググれ もっともロビーサーバをグローバルに立てればこれらの話は全部要らなくなるが
- 288 名前:名前は開発中のものです。 mailto:sage [2011/03/06(日) 07:27:32.42 ID:PFbDBYwQ.net]
- >>275
起動に必要なデータファイル(画像とか)が同じフォルダに入っていないんじゃないかと思う。
- 289 名前:社内ニート ◆OpY5DDvqSw [2011/03/08(火) 22:14:18.79 ID:O4hW3e3n.net]
- >>283
そのとおりみたいでした。 ためしに画像とか適当にぶっこんだら動きました。 ttp://www.dotup.org/uploda/www.dotup.org1407350.zip.html パス 1111 ネットへの対応はまったく進んでません。勉強もしてません。
- 290 名前:115 mailto:sage [2011/03/09(水) 02:02:38.65 ID:YYc1MNQ1.net]
- >>284
遂にここまでできたのか 暫くROMってたけど俺も完成期待してるから 頑張って下さい
- 291 名前:社内ニート ◆OpY5DDvqSw [2011/03/09(水) 19:33:20.78 ID:d+SmmaqK.net]
- >115
一人の応援だけでだいぶやる気が出た。 おひさしぶり。 元気ですか? 私は相変わらず暇人です。
- 292 名前:115 mailto:sage [2011/03/10(木) 22:24:04.84 ID:xJ6VL23e.net]
- 風邪ひいてきつかったけどやっと直ってきた
ネットワークの実装やったことないからアドバイス出来なくて残念だ
- 293 名前:社内ニート ◆OpY5DDvqSw mailto:sage [2011/04/04(月) 03:21:23.76 ID:hNri2z03.net]
- 地震で死んだわけじゃないけどね。
何をしていいかわからなくなったんで放置。 MMORPGの作り方を書いた本でも買ってみようかな。 まあ、うちの近所に大きな本屋がないんで中身を見て確かめられないのは痛いけど。
- 294 名前:名前は開発中のものです。 mailto:sage [2011/04/04(月) 20:57:43.80 ID:p78/gdyh.net]
- 1) ネット通信なしで、2P対戦を実装する
2) 次に2PをCPU制御で実現する 3) CPU制御の機体数を増やす 4) 通信プロトコルを設計する 5) 通信処理を実装する この順でやるといいよ。
- 295 名前:名前は開発中のものです。 [2011/06/22(水) 00:51:57.57 ID:mdgs9SFK.net]
- ワロタ
- 296 名前: ◆hUczjzHQ1. mailto:sage [2012/01/30(月) 00:07:24.07 ID:WlPxsZ4g.net]
- 基礎から学んで行こうと思います
分からない事がまだまだ沢山ありますが ご指導ご鞭撻の方宜しくお願いします c/c++の勉強をして行きたいです。 でもまずはCからお願いします。 基礎からみっちり叩き込んで下さい ボクも頑張って行きたいと思います。
- 297 名前: ◆ibj3Ub6oRZ3m [2013/09/28(土) 01:01:50.70 ID:eY+hrwyk.net]
- 基礎から学んで行こうと思います
分からない事がまだまだ沢山ありますが ご指導ご鞭撻の方宜しくお願いします c/c++の勉強をして行きたいです。 でもまずはCからお願いします。 基礎からみっちり叩き込んで下さい ボクも頑張って行きたいと思います。
- 298 名前:名前は開発中のものです。 [2015/08/31(月) 13:58:00.57 ID:0xjlLWq1.net]
- もうすぐ専門学校の学園祭の季節になるから見学に行くと良いかも。
- 299 名前:名前は開発中のものです。 [2015/09/22(火) 17:20:40.99 ID:J5BSdRWA.net]
- c言語の参考書ORサイトを読破する
- 300 名前:名前は開発中のものです。 [2015/09/22(火) 17:21:18.98 ID:J5BSdRWA.net]
- そしてDXライブラリでもいじりながら作りなさい
- 301 名前:過去ログ ★ [[過去ログ]]
- ■ このスレッドは過去ログ倉庫に格納されています
|

|