FPSを作ってみる@wiki
04)
最終更新:
slice
-
view
(2010/04/28)
パドル動かしてボールをバウンドさせるとこ(同期含め)までは出来たがそこから先は・・
とりあえず仕様変更を繰り返してこんがらがってきたから作り直す.
毎回ボールの速度等をやり取りするのって通信負荷的にどうなんだろ?
pongに限って言えばそんなの気にするレベルじゃないだろうけど.
できればボールがバウンドしたならバウンドに関する情報(時刻と角度と位置)だけ
やり取りしたほうがスマートだよね.等と要らぬ事を考えたりする.
座標ズレの補正に関してはズレていると判断したらずれ方の大小で
座標をワープさせるか見た目の座標を緩やかに目標座標まで線形補間してごまかすか選ぶようにした.
でもこれにキャラクターのアニメーションが加わったらどうすればいいかはまた考えなくちゃいけないか.
とりあえず仕様変更を繰り返してこんがらがってきたから作り直す.
毎回ボールの速度等をやり取りするのって通信負荷的にどうなんだろ?
pongに限って言えばそんなの気にするレベルじゃないだろうけど.
できればボールがバウンドしたならバウンドに関する情報(時刻と角度と位置)だけ
やり取りしたほうがスマートだよね.等と要らぬ事を考えたりする.
座標ズレの補正に関してはズレていると判断したらずれ方の大小で
座標をワープさせるか見た目の座標を緩やかに目標座標まで線形補間してごまかすか選ぶようにした.
でもこれにキャラクターのアニメーションが加わったらどうすればいいかはまた考えなくちゃいけないか.
(2010/04/25)
あんまし進んでないけど進捗をば.
pongのクローンゲーでズレを修正しつつ同期するの,動き始めたかな?という状況.終わり.
本当にそれだけ・・2Dゲーで通信プレイといったら以下の事項が必須だろうと考えたので
色々と面倒な事になっている.
pongのクローンゲーでズレを修正しつつ同期するの,動き始めたかな?という状況.終わり.
本当にそれだけ・・2Dゲーで通信プレイといったら以下の事項が必須だろうと考えたので
色々と面倒な事になっている.
- ホストとクライアントで平等なラグ
- 座標等がズレたら目立たないように同期する
(2010/04/18)#2
作業しようと思ったがテンションが上がらないので溜まってた事項を消化しよう.
1つ目はweb拍手ちゃんと見てますありがとうございますという事.もちろんコメントも読んでます.
コメント貰えると更に良いけど,クリック1つでも励みになるものです.
その中に「オンボードでは動かなくなるのか?」という問いがありまして.
現時点では「わからない」としか.そう答えると更に疑惑が深まりそうだけど
このエフェクトはゲーム上絶対に必要だ,これ無しではゲームとして成り立たない!とか
切り替えできるとゲームバランス調整に差し支える!とかでなきゃ要求スペックに入れないつもり.
1つ目はweb拍手ちゃんと見てますありがとうございますという事.もちろんコメントも読んでます.
コメント貰えると更に良いけど,クリック1つでも励みになるものです.
その中に「オンボードでは動かなくなるのか?」という問いがありまして.
現時点では「わからない」としか.そう答えると更に疑惑が深まりそうだけど
このエフェクトはゲーム上絶対に必要だ,これ無しではゲームとして成り立たない!とか
切り替えできるとゲームバランス調整に差し支える!とかでなきゃ要求スペックに入れないつもり.
無名の状態での公開だし出来るだけ多くの環境でプレイできた方がいいよね
通信も含めると人が居てナンボなわけで,そうなると
別途ビデオカード積んでるPCじゃないと動かないって結構な敷居だと思うわけです.
別の理由としては単にそこまでディティールを作りこむ余裕と技術がないというのも.
通信も含めると人が居てナンボなわけで,そうなると
別途ビデオカード積んでるPCじゃないと動かないって結構な敷居だと思うわけです.
別の理由としては単にそこまでディティールを作りこむ余裕と技術がないというのも.
やるとしたら弾痕に視差マップ施して立体的に見せる,
煙のポリゴンをピクセルシェーダーで細工して壁との境目を目立たなくさせる等
見た目をちょっとよくする味付け程度に用いる予定.これだったら切り替えが楽そうだ.
あとは静的ライトマップの計算にGPUを使ってるので高性能なGPUを積んでれば
オンボードと比べて計算する解像度を上げられたりして,それなりに恩恵はあるかと.
ラジオシティもやりたい野望.
これは前に試したら流石にオンボードだと計算時間が現実的でなかったのでハイスペックPC専用になりそう.
また同じ時期に興味本位で
「ゲームを動かしながら空いてるGPU時間を使って裏でライトマップ計算」なんぞやってみた事があって
次のレベルを裏で計算しつつ計算が終わる前にプレイヤーがその地点に差し掛かったら
ローディング画面をいれようか,等と考えてました.
実現するのかは未知数ですが.
煙のポリゴンをピクセルシェーダーで細工して壁との境目を目立たなくさせる等
見た目をちょっとよくする味付け程度に用いる予定.これだったら切り替えが楽そうだ.
あとは静的ライトマップの計算にGPUを使ってるので高性能なGPUを積んでれば
オンボードと比べて計算する解像度を上げられたりして,それなりに恩恵はあるかと.
ラジオシティもやりたい野望.
これは前に試したら流石にオンボードだと計算時間が現実的でなかったのでハイスペックPC専用になりそう.
また同じ時期に興味本位で
「ゲームを動かしながら空いてるGPU時間を使って裏でライトマップ計算」なんぞやってみた事があって
次のレベルを裏で計算しつつ計算が終わる前にプレイヤーがその地点に差し掛かったら
ローディング画面をいれようか,等と考えてました.
実現するのかは未知数ですが.
(2010/04/18)
正確にはこれは進捗ではない.
makeplex salon:史上最大のコーディングスキル判定というのをやっていた.
てか麻雀知らねえ!ごめんなさい.
まずは用語を調べてちょっとルールとか調べて
おもむろに実装を始めたら途中で物凄い勘違いしてるのが判明してまたやり直して・・・ってやってたら
余裕で時間オーバーでした.本当に(ry
まあ一応出来たっぽいからこれはこれとして,次の機会にまた頑張ろうかなと.
一言言うならばもうちょっと問題を明確に書いてくれないかなあ.
七対子は考慮するの?しないの?とか.
makeplex salon:史上最大のコーディングスキル判定というのをやっていた.
てか麻雀知らねえ!ごめんなさい.
まずは用語を調べてちょっとルールとか調べて
おもむろに実装を始めたら途中で物凄い勘違いしてるのが判明してまたやり直して・・・ってやってたら
余裕で時間オーバーでした.本当に(ry
まあ一応出来たっぽいからこれはこれとして,次の機会にまた頑張ろうかなと.
一言言うならばもうちょっと問題を明確に書いてくれないかなあ.
七対子は考慮するの?しないの?とか.
入力と出力の対応表も欲しかった(途中までは書いてあるのに.これじゃ正しいのかどうか判断がメンドイ).それと
麻雀を知らない人は、順子・刻子・アタマ・待ちといった用語の意味だけ調べてから解答に取りかかってください
とあるが文字通り意味だけ調べてもドン詰まります.用語の意味を理解するにはその前にルールを知らなければ無理.
もしコンテストでこの問題に遭遇したら麻雀知らない人は速攻後回しにするだろうな.
もしコンテストでこの問題に遭遇したら麻雀知らない人は速攻後回しにするだろうな.
とはいえこういうプログラミングコンテストのような問題って
普段みたいに例外処理とか汎用性を意識しなくていいので純粋にアルゴリズムを考える事ができて時間を忘れる.
FPS作る時もこのくらい集中できればいいのだが!
普段みたいに例外処理とか汎用性を意識しなくていいので純粋にアルゴリズムを考える事ができて時間を忘れる.
FPS作る時もこのくらい集中できればいいのだが!
(2010/04/14)
また作業が思うように進んでない感じですが.同期の方法を幾つか試したりしてた.
単純にキー入力を相手に送るだけの(最低限時刻によるタイミング合わせはする)方式で
実際どのくらいズレるの?とか,PONG-likeのパドルを上下に振りまくって確認したり.
案の定10秒程でずれ始める.30秒続けると10ピクセルくらいずれる.
単純にキー入力を相手に送るだけの(最低限時刻によるタイミング合わせはする)方式で
実際どのくらいズレるの?とか,PONG-likeのパドルを上下に振りまくって確認したり.
案の定10秒程でずれ始める.30秒続けると10ピクセルくらいずれる.
ただ試したのはフレーム単位のタイミング同期なのでこれをミリ秒単位にしたらもうちょっとマシにはなるかと思う.
何れにしても根本的にズレの蓄積は避けられないのは明白なのでやらなかったが.
ズレにくい仕組みも重要だが,必ず溜まる差分をどこかで誤魔化して帳尻を合わせにゃならんわけで.
何れにしても根本的にズレの蓄積は避けられないのは明白なのでやらなかったが.
ズレにくい仕組みも重要だが,必ず溜まる差分をどこかで誤魔化して帳尻を合わせにゃならんわけで.
まずは毎フレームプレイヤの操作情報やボールの座標をやり取りしてたら
それだけで負荷が高くなる&無駄すぎると判断したので
ゲーム内物体の状態が変化した時だけその旨送信するように作り変えている.
具体的にはパドルの移動方向が変わった時だけ相手にパケットを送信する等.
(TCPなので送信は一回で済む)
その後はまだエディタ上でああだこうだやってる状態で決まらない・・
それだけで負荷が高くなる&無駄すぎると判断したので
ゲーム内物体の状態が変化した時だけその旨送信するように作り変えている.
具体的にはパドルの移動方向が変わった時だけ相手にパケットを送信する等.
(TCPなので送信は一回で済む)
その後はまだエディタ上でああだこうだやってる状態で決まらない・・
(2010/04/11)
予定通りサクッとPONGのようなものを実装.まぁボールが跳ね返るだけだからね.
で,これまでに書いたwinsock関連のクラスをライブラリにまとめて自前3Dエンジンにリンクしようと思ったら
接続先のIPをGUIで指定するのにダイアログボックスを使っているのだが,このリソースファイルの扱いで詰まった.
で,これまでに書いたwinsock関連のクラスをライブラリにまとめて自前3Dエンジンにリンクしようと思ったら
接続先のIPをGUIで指定するのにダイアログボックスを使っているのだが,このリソースファイルの扱いで詰まった.
というのもそのままリンクするだけだと基本的にlibファイルにはリソースを含められない仕様らしく
リソースが一緒にコンパイルされないのだった.
(そりゃまあねえ,vcが出力するリソースファイルなんてウィンドウズ専用だもんねぇ)
DLLにすると含まれるようだが面倒なので強引に解決する.
具体的にリソースファイルのインクルード機能でライブラリのリソースを含めた.
折角ライブラリの形でプログラムを1つのファイルに梱包したのにリソースを別途インクルードとか
意味が分からんが,近いうちに作り直す予定なので今回はこれでいく.
リソースが一緒にコンパイルされないのだった.
(そりゃまあねえ,vcが出力するリソースファイルなんてウィンドウズ専用だもんねぇ)
DLLにすると含まれるようだが面倒なので強引に解決する.
具体的にリソースファイルのインクルード機能でライブラリのリソースを含めた.
折角ライブラリの形でプログラムを1つのファイルに梱包したのにリソースを別途インクルードとか
意味が分からんが,近いうちに作り直す予定なので今回はこれでいく.
(2010/04/10)
前回,FPSのプログラムのコンパイルは通ったのだけは確認して油断していたがいざ実行すると
エラーが出た(メッセージは失念)
とりあえず実行時にランタイムライブラリが見つからない系のエラーだった.
結果としてはogg vorbis形式の音楽再生用に外部ライブラリであるliboggをリンクしていたが
それをコンパイルした時にvc2005を使ったので今回のvc2008のランタイムと競合を起こしていたと.
初歩的といえば初歩的.の割にちんたらググッてたら2~3時間掛かったけど・・
久々に自作の3Dプログラムを動かしてみた感想.やはり今時のビデオカードは速い.
ファンの騒音対策のためGPUクロックを4分の1に落とした状態でも使用率が数パーセント程度である.
エラーが出た(メッセージは失念)
とりあえず実行時にランタイムライブラリが見つからない系のエラーだった.
結果としてはogg vorbis形式の音楽再生用に外部ライブラリであるliboggをリンクしていたが
それをコンパイルした時にvc2005を使ったので今回のvc2008のランタイムと競合を起こしていたと.
初歩的といえば初歩的.の割にちんたらググッてたら2~3時間掛かったけど・・
久々に自作の3Dプログラムを動かしてみた感想.やはり今時のビデオカードは速い.
ファンの騒音対策のためGPUクロックを4分の1に落とした状態でも使用率が数パーセント程度である.
負荷の程度としてはオンボードで60fpsを維持できるギリギリのレベル(もっとも,最適化してない状態なのだが)だったと記憶しているのでオンボードの精一杯の能力は
今のクロックダウンしたhd4770の10パーセントが相当すると考えていいだろうか.
ちなみにAMD690Gは市販ソフトで言えばhitman2がオプション最高の解像度1024x768で60fps,
half-life2は設定ミディアムの同解像度20~30fpsで動作する.参考までに.
今のクロックダウンしたhd4770の10パーセントが相当すると考えていいだろうか.
ちなみにAMD690Gは市販ソフトで言えばhitman2がオプション最高の解像度1024x768で60fps,
half-life2は設定ミディアムの同解像度20~30fpsで動作する.参考までに.
話を戻してリアルタイムゲームの通信対戦実験をする為に
まず2Dベースのクラスを書いてみてサクッと「PONGのようなもの」を動かす所から始めようか.
まず2Dベースのクラスを書いてみてサクッと「PONGのようなもの」を動かす所から始めようか.
「サクッと」は自分にとって死亡フラグな件 (ボソ
(2010/04/09)
将棋はひと段落.そしてその動画は例のところへ.
ビデオカードを新調したのでシェーダー2.0止まりだった描画関係の新しい手法なんぞ試してみたい気はするが・・・
(ピクセル単位のライティングを当たり前のようにしてうねる水面やソフトな影とかね)
ここはグッとこらえてリアルタイムなネットワークゲームの作成に取り掛かる.
ビデオカードを新調したのでシェーダー2.0止まりだった描画関係の新しい手法なんぞ試してみたい気はするが・・・
(ピクセル単位のライティングを当たり前のようにしてうねる水面やソフトな影とかね)
ここはグッとこらえてリアルタイムなネットワークゲームの作成に取り掛かる.
さて過去のページを見返すとFPSのプログラムに触らなくなって実に3ヶ月.
いくら自分が書いたとはいえ3ヶ月もしたら立派に他人のソースコードである.怖い怖い.
まずはサッと動かして見てどこまで組んだか,何所でほっぽりだしたかを把握する作業からだな.
その辺進捗状況1月分を読めば大体はわかるのがせめてもの救いか.
いくら自分が書いたとはいえ3ヶ月もしたら立派に他人のソースコードである.怖い怖い.
まずはサッと動かして見てどこまで組んだか,何所でほっぽりだしたかを把握する作業からだな.
その辺進捗状況1月分を読めば大体はわかるのがせめてもの救いか.
(2010/04/08)
クラス構造を半分以上書き直したので大幅に進んではいないけど機能追加の繰り返しによる冗長な記述が減った.
関係ないけど持ち駒表示の画像2つ.
種類が増えると幅を調整して収まるようにしてある.横に並べる間隔も可変にした.
関係ないけど持ち駒表示の画像2つ.
種類が増えると幅を調整して収まるようにしてある.横に並べる間隔も可変にした.
(2010/04/07)
いかん.いかんよ.何時までもこんな事やってる場合じゃあ・・・
詰み判定に手間取りそうな悪寒.まぁやってみないとわからんが.
詰んだらorどうやっても詰むと踏んだら事前に投了するのがルールだけど
最後どうやってゲーム終わろうか?
リバーシの時みたいに投了ボタンでも表示するかなあ.
詰み判定に手間取りそうな悪寒.まぁやってみないとわからんが.
詰んだらorどうやっても詰むと踏んだら事前に投了するのがルールだけど
最後どうやってゲーム終わろうか?
リバーシの時みたいに投了ボタンでも表示するかなあ.
さて次に取り掛かるリアルタイムゲームの通信実験でPONGのクローンをやるという話をした.
またWINAPIでゴリゴリやってたら本気で終わらないし微妙にレガシーなAPIを
使いこなしても無駄なので素直にDirectXを使う方向に(今だとWPFなんだろうか).
しかしDirectXを使うにしてもやはり一から組んでたんじゃあ(以下略)であって,じゃあ
使い慣れた既にある自作エンジンもどきを利用しようという至極真っ当な結論に行き着く.
先日開発環境をvc2005から2008にしてもソースの変更ほぼ必要無しだったのを踏まえて
エンジンを組みなおす前の状態で作ろうかと.
というのもエンジン組みなおすといっても基本構造は同じでソースを整理する程度に留まる予定なので.
またWINAPIでゴリゴリやってたら本気で終わらないし微妙にレガシーなAPIを
使いこなしても無駄なので素直にDirectXを使う方向に(今だとWPFなんだろうか).
しかしDirectXを使うにしてもやはり一から組んでたんじゃあ(以下略)であって,じゃあ
使い慣れた既にある自作エンジンもどきを利用しようという至極真っ当な結論に行き着く.
先日開発環境をvc2005から2008にしてもソースの変更ほぼ必要無しだったのを踏まえて
エンジンを組みなおす前の状態で作ろうかと.
というのもエンジン組みなおすといっても基本構造は同じでソースを整理する程度に留まる予定なので.
関係ないが2005から2008への移行でソースコードエディタの描画速度向上を期待していたが逆に更に遅くなっていた.
WinXPだからなのか,Vistaや7でGPUも駆使したら速いとでも言うのか.
DX10のジオメトリシェーダーでも遊びたいし・・もう少し安かったらすぐにでもOS移行したいところだが.
WinXPだからなのか,Vistaや7でGPUも駆使したら速いとでも言うのか.
DX10のジオメトリシェーダーでも遊びたいし・・もう少し安かったらすぐにでもOS移行したいところだが.
(2010/04/06)
主に表示部分で苦戦した.マスク付き画像の描画ってどうやんだっけ?など.
取った敵の駒を並べて表示するルーチンは書いたので判定が間違ってる部分を直して
持ち駒を指定位置に打つ(打てるかの判定も)処理を加えたら完了か?
王手かかってる時は次に王手を避ける手しか打てない様にするとスマートだが面倒かなあ
取った敵の駒を並べて表示するルーチンは書いたので判定が間違ってる部分を直して
持ち駒を指定位置に打つ(打てるかの判定も)処理を加えたら完了か?
王手かかってる時は次に王手を避ける手しか打てない様にするとスマートだが面倒かなあ
画像だと後手のプレイヤは盤面を180度回転して見た図になってるけど駒の部分だけ回転してるので
盤の数字はそのままという謎.これは直さないと.
盤の数字はそのままという謎.これは直さないと.
(2010/04/01)#2
PCで動く将棋それも通信対戦できる物なんてブラウザゲーで沢山あるわけですが.というか本題じゃないし.
だがしかし,やると言った傍からやっぱ辞めるなんて幾らなんでもアレ過ぎる(以後気をつける)
なのでサクッと実装してリアルタイムゲームへ移る方向で.
手始めに将棋の盤と駒の画像を作成した.これからプログラムを書いていく.
あくまで練習なので最低限の機能だけ実装するのは当たり前として・・だからといって
画面が見にくかったりしてプレイしづらいのは避けねばならん.
だがしかし,やると言った傍からやっぱ辞めるなんて幾らなんでもアレ過ぎる(以後気をつける)
なのでサクッと実装してリアルタイムゲームへ移る方向で.
手始めに将棋の盤と駒の画像を作成した.これからプログラムを書いていく.
あくまで練習なので最低限の機能だけ実装するのは当たり前として・・だからといって
画面が見にくかったりしてプレイしづらいのは避けねばならん.
- 持ち駒は同種類の駒はまとめて表示する
- 平手のみ
- アニメーションは無し
- 千日手の判定も無し
- 棋譜も無し
こんなとこか.もちろんCPUプレイヤも居ない.
なにしろ自分がルール知ってる程度だし.
なにしろ自分がルール知ってる程度だし.
(2010/04/01)
なにがってわけじゃないけど,漠然と考えてはいたものの結局まったく手を付けてなかったので今日は何もありません.
やるならちゃんと用意しないとね.急ごしらえの中途半端はイカン.
って去年もそんな事言ってたような・・
やるならちゃんと用意しないとね.急ごしらえの中途半端はイカン.
って去年もそんな事言ってたような・・
さて.リバーシが実装できたので何時ものように動画を上げておいた.
次はどうしようか・・いよいよリアルタイムゲームか?と思いきや将棋やってみます.
ところで先週突然現れたweb拍手ボタンにお気づきだろうか.
製作者がへたれてると思ったらポチッと押していただければ励みになって大変助かるので是非.
任意のコメントも,どのボタンから送信された物か区別できるようにID振ってるので日記の内容へツッコミ入れたい時にもどうぞ.
次はどうしようか・・いよいよリアルタイムゲームか?と思いきや将棋やってみます.
ところで先週突然現れたweb拍手ボタンにお気づきだろうか.
製作者がへたれてると思ったらポチッと押していただければ励みになって大変助かるので是非.
任意のコメントも,どのボタンから送信された物か区別できるようにID振ってるので日記の内容へツッコミ入れたい時にもどうぞ.