atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
FPSを作ってみる@wiki
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
FPSを作ってみる@wiki
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
FPSを作ってみる@wiki
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • FPSを作ってみる@wiki
  • 進捗状況(2010
  • 08)

FPSを作ってみる@wiki

08)

最終更新:2010年08月21日 14:06

slice

- view
管理者のみ編集可

(2010/08/21)

元々スクリプトで利用する事を考慮していない描画補助クラス等を,少しの変更で対応できるようにとの願望から
スクリプトで使うクラスとC++で使うクラス構造を一緒にして,
変数リストと関数リストを定数の形で別途用意.
エンジン初期化時にそれを読み込ませてやれば後はスクリプト側でのクラス構築やら変数同期,関数の中継呼び出しを
やってくれる仕様とした.
これでHUDを描画するC++側で定義したHudクラスはスクリプトの中でもHud.create()と記述すれば
エンジン側とスクリプト側でそれぞれメモリ確保し,初期化もしてくれて後始末までバッチリ
(の予定.色んなケースについて検証が必要だ)

生ポインタ使ってる関係でクイックセーブ&ロード機能を追加するときに問題が発生しそうだけど
多分そこまで行き着く前にまた作り直すだろうから放置で行く.

他にはスクリプトのテーブルをteble[item]という記述でc++風に参照できるようにしたりとか
Luaスタックを意識せずに済むアダプタ関数の製作.実はまだ両方とも実装途中だけど.

そんな感じで遅いながらもまあ,進んではいる.

(2010/08/15)

エンジンのリファイン作業は一旦置いてスクリプトの仕様を練っている.
描画のタイミングや各オブジェクトのアップデート処理をスクリプトに移行
エンジン側はどんな関数を用意しておくか・・・等等.

ユーザーが組む時にこんな風かな~と,テンプレートの形で少しずつ手順を定めていく.
現状はこれといって書き記す事がないですね~残念ながら.

(2010/08/12)

作り直しその3「マテリアル・リソース」

名前はご大層だがやってる事はただのINIである.
変数名と変数のペアを羅列した,あのファイル.

調整が必要なゲーム内パラメタをファイルに分離
変数をゲーム実行中にいじれるようにする.
或いはテクスチャに付随する情報(材質フラグ等)を記述する.
XML形式だったが,複雑な記述は要らないので例の如くJSONに変更.

ちなみにマテリアルは他のマテリアルを継承できるようにしている.
要求したエントリが見当たらなかったら継承元のファイルを探すというわけだ.
こうする事で「ここだけ違うけど後は同じ」マテリアルは同じエントリを重複して記述せずに済む.

前にこんな感じでウィンドウを出してキー操作でリアルタイムに変更する機構を作ってはみたものの
操作性がイマイチであまり使わなかった・・

次はサウンドが簡単そうに見えるが
リファクタリングばかりやってるとモチベーションが続かないんで
スクリプトでも組み込んでみるかなー.自分で「おおっ」て思うのが無いと.
スクリプトからリソースを一気に読み込ませたりとかしたい.

(2010/08/11)

リソース基本クラス(前回書いたようなもの)の実装完了.一通り動作確認もした.
前まで固定長配列上等,メモリリークなんて知らねー動けば良し的な感じでやってたリソースの管理を
一から見直しソースコードを半分以上書き換えた.
スマートポインタのような仕組みを導入し,誰もそのリソースを所有するクラスが無くなったら解放するようにした.
代わりにリソースの参照が少々面倒臭くなったが・・

読み取りロックと読み書きロック機構によりマルチスレッド環境等で
裏でファイルを読み込みながらも描画は続けるといった動作が可能に.
(今までは複数のスレッドが同じリソースを同時に参照したらクラッシュしていた)
更にリソースが使用中だったらロックできるまで待ってから制御を返すか
待たずに処理を続行するかを選べるようにもした.
自分で言うのもナンだが力作です.

まぁC#やJavaだとガベージコレクタがあって色々と楽な気がしなくもないが!
少々強引にC++で自作する利点を探すとすれば
後幾つリソースを確保したらメモリの再割り当てが起こるかが明確にわかったり
任意のタイミングでメモリコンパクション処理を実行したり出来るとかかね.

ともあれ,これで以前のような「3回中1回,一般保護エラーで落ちる」「エンジン初期化しただけでメモリ500MByte食う」
事は無くなるはずだ.

ここまできてやっと個別のリソースクラスへ入れるわけだけど
本丸であるゲームのキャラクターを管理するクラスはまた一悶着ありそうなので
まずは移植するだけと思われる簡単なのからこなして行こうと思う.
具体的にはテクスチャ,サウンド,モデル,モーション辺り.

(2010/08/07)

「次に作り直すときはああしよう,こうしよう」と思っていたのが次から次へと出てくる.
今日は例外処理を入れてみたくて,クラスの構造考えてた.
関数読んだ履歴が表示されるといいよねー,
エラーは軽微な物はコンソールにメッセージ出すだけで動いて欲しいな,
メッセージの出力先も標準出力の他にゲーム内ウィンドウへ切り替えしたいよね.等など.

あとはリソースのマルチスレッドロック機構ですか.書き込みしてる時は1スレッドしかアクセスできないけど
読み込みは複数OKなのとか.
本当はもう個別のリソース管理クラスの再構築に入ってるつもりだったが見積もりが甘すぎた(いっつもそうだ)

しょうがないよな,地道に1つずつこなしていくしかない・・

(2010/08/05)

作り直しその2 「モデル・モーション出力形式」

リソースマネージャは各リソースの制御クラスも含めてなので結構範囲広いじゃないか.今気づいた.
とりあえずモデル制御クラスを書く前にモデルとモーション出力形式を改良をば.
早い話が今までXMLだったのを重いしそんな機能要らないから軽いJSONにしようと.
本当は昨日で終わる予定だったのにXMLとJSONをスイッチ一発で切り替えられるようにしたお陰で手間取った.

で,今まで左(XML)のような感じでやってたのを右(JSON)のようにした

銃なんかの,薬莢の出るタイミングをモーションのフレーム単位で指定する情報は別ファイルへ移行.
文字数はスペース抜きカウントでXMLが4483文字,JSONが4946文字・・・ておい!増えてるじゃねぇか.
パースは見るからに構造が単純だからJSONが速いんだろうがサイズでかくなってるのは気に食わない.
幸い原因はわかっているので明日にでもちゃっちゃと直して再度比較してみようかと.

もちろんファイルはテキスト形式でなくてバイナリ形式が処理速度,サイズ共に有利なのは言うまでもないが
それは可読性(デバッグのし易さ)とトレードオフだし.
リソースマネージャ関連の作業は続く・・

#追記
JSONでの無駄な記述を無くしたら4167文字まで減った.ら,同時にXML形式だと3631文字になった.
まあいいか.きっとファイルサイズも小さいはず!という幻想を抱いていただけだ.

(2010/08/03)

作り直しその1 「リソースマネージャ」

昨日は自作エンジンのココが使いにくかったからこう改善しようああしようと考えてただけでまだ作業してなかった.
ゲームエンジン基礎の基礎(だと自分は思っている)資源管理から入る.

といってもやる事自体はそんなに難しくない
テクスチャやサウンド等,それぞれ対応する各マネージャに読みたいファイル名を渡したら
内部でファイルを解析してバッファに蓄え,
アプリケーションは一意のハンドル(ID)を受け取るという一般的なシステムだ.
生ポインタと違ってハンドルで仲介するから間違って資源が開放されていてもわかる,
資源開放のタイミングをマネージャに任せられるなどの利点がある.
メモリ管理の要と言おうか.

今までサンプルプログラム出してと言われその度にメモリリークが~意味分からんエラーが~と言い訳してたのは
主にこいつが原因なのである.
途中からマルチスレッド対応にした関係で色々と無駄があるし.

(2010/08/02)

以前twitterでも呟いた事だけれどスクリプトの扱いについて.
ゲームの処理をどの程度スクリプトに依存するのか?これが疑問だったわけだが2chで次のようなレスを見かけた(かなり意訳)
「ゲームプログラムの8割方はスクリプトで記述できる.
残りの2割はDirectX等のAPIを呼ぶ部分や速度が必要な衝突判定等
まずスクリプトで書いて見て遅かったら順次コード化していけばいい」と.
自分はこれで合点がいった.

恐らくUnrealやQuakeエンジンも同じ様な感じかな~
そう考えるとFPSのMODでかなりの部分を改変して場合によっては原形もとどめてない形になるのはそういうことかぁ等と思ったりした.
スクリプトで記述して何が良いかと言えば,前回の記事で書いたがエンジンとゲーム固有ロジックの分離である.
ゲームでしか使わない機能をコードでガリガリ書くとエンジン部分をライブラリで纏めてあるとはいえ
書いていくうち何所までがエンジンなのか曖昧になって宜しくない.
それに,テスト実行するのにコンパイルも不要.

現状のエンジンだとコードを1箇所修正してコンパイルするのに12~3秒ほど待たされ,ちょっと待てばすぐとはいえ
しかし結構な時間である.
極端な話,パラメタ値を1変えただけで毎回10秒以上待たされるのはたまったもんじゃない.

過去にこれではイカンと主要なパラメタをXML形式で管理しゲーム実行中にリアルタイム編集,
開始・終了時に自動的に読み書きするような仕組みも作ったが
扱えるのはあくまでも「値」であって「アルゴリズム」は従来どおりコンパイルしなおさなければならなかった.
(まぁそれでも便利は便利)
そういう経緯もあって今回スクリプト言語のLuaを採用した.

ちなみに知ってる人は知ってるかもしれないが,
前にスクリプト言語を自作してたのはちょっと字句解析を作ってみたかった程度なので不採用.バグも結構あるしね.
雷力の動画で,敵の動作やドアの開閉等のステージ進行は自作スクリプトで動いてるからあれが記念になるか・・
もう使う事は無さそうだしその時のスクリプトコードを晒してみる.
  • (奥から弾撃ってくる敵)
infrustum()関数でカメラが視界に入ったのを感知,一定間隔で指定回数分攻撃命令を送る
  • (開くドア)
マップに予め設定したカメラ軌道が一定の地点を過ぎるとcustommsg()へメッセージが送られる.
それに反応して同じくマップへ設置しておいたオブジェクトへ向かって前進,停止.

マップに予め設定したって何よ?と言いますと(こんな感じ)で置いて,
マップの何時何が起こるという設定はなんとなんと(ベタ書き)である.
なんともお粗末だが当時は「とにかく動けばいい」方針でやってたから仕方ないか・・

話を戻してスクリプトは見た目殆どC言語.って言ってもswitch文が無かったり,
インクリメントは前置きのみとかの手抜き.型宣言,構造体宣言も無いか.
ただまあ折角作るのだからと文字列は+で繋けられるしデフォルトでset(集合)型やstring型,vector型を持っていたり(演算もOK)
break文は break 2; のように数字を記述することで2重ループから一発で抜けられるようにしてたりとか自分好みの改変はしている.
後は組み込み関数のinfrustum()でカメラ視界に入っているか判定して~とかまあそんな感じ.
で,何が一番言いたいかというと一度スクリプトを自作したから既存スクリプトの理解の助けになったよってことか.
ありがとう名無しスクリプト,さようなら.

(2010/08/01)

さて8月.
通信プログラムはあれから少し進めたものの完成とは言い難い出来に終わった.心残りはある
しかし今月は心機一転,ゲームエンジンの作り直しを始める.というか見直し?
メモリリークや不安定性を改善しサンプルプログラムも配布できるような状態にするのが目標である.
期間はできれば8月上旬,遅くとも中ごろまで.
それとこのページを少なくとも週に1度は更新したい.
ネタが無いのに更新するハメにならないよう頑張るという事で.

エンジンの見直しが終わったらLuaを組み込み,主人公の動きをLuaにて記述出来るかテスト.
エンジン側はモデルやサウンドの管理に専念しゲーム自体の処理はスクリプトに分離する.
これは早くて1週間,長くても・・・いや,そんな掛かるとは思えんな・・ジャスト1週間だな.

その後の予定は追々考える.あまり先の事考えたってその通り進まないし.
「08)」をウィキ内検索
LINE
シェア
Tweet
添付ファイル
  • ev_door.rsc
  • ev_fpow_pers.rsc
  • map_sample0.jpg
  • map_sample1.jpg
  • xml_json.jpg
FPSを作ってみる@wiki
記事メニュー
  • トップページ
  • 参考資料ブックマーク等
  • Tips

Media

  • 頂き物
Screen shot
  • FPS_page1
  • FPS_page2
  • FPS_page3
  • Other_page1
Drawing
  • Drawing(analog)
  • Drawing(digital)
  • Drawing(digital) 2
  • Drawing(digital) 3
  • Drawing(digital) 4
  • Drawing(digital) 5
  • Drawing(digital) 6
  • Drawing(digital) 7
  • Drawing(digital) 8
  • Drawing(digital) 9
  • Drawing(digital) 10
  • Drawing(digital) 11
  • Drawing(digital) 12
  • Drawing(digital) 13
Movie
  • movies-list

Old Contents

  • トップページ(old)
  • メモ書き
  • 力仕事UP場
  • ゲームシステムとか
  • バグ・動作報告
  • program(twilve)

Progress log

  • (2018/03)
  • (2017/04)
  • (2017/03)
  • (2016/10)
  • (2016/09)
  • (2016/08)
  • (2016/07)
  • (2016/06)
  • (2016/05)
  • (2016/04)
  • (2016/03)
  • (2016/02)
  • (2016/01)
  • (2015/12)
  • (2015/11)
  • (2015/10)
  • (2015/09)
  • (2015/08)
  • (2015/07)
  • (2015/06)
  • (2015/05)
  • (2015/04)
  • (2015/03)
  • (2015/02)
  • (2015/01)
  • (2014/12)
  • (2014/11)
  • (2014/10)
  • (2014/09)
  • (2014/08)
  • (2014/07)
  • (2014/06)
  • (2014/05)
  • (2014/04)
  • (2014/03)
  • (2014/02)
  • (2014/01)
  • (2013/12)
  • (2013/11)
  • (2013/10)
  • (2013/09)
  • (2013/08)
  • (2013/07)
  • (2013/06)
  • (2013/05)
  • (2013/04)
  • (2013/03)
  • (2013/02)
  • (2013/01)
  • (2012/12)
  • (2012/11)
  • (2012/10)
  • (2012/09)
  • (2012/08)
  • (2012/07)
  • (2012/06)
  • (2012/05)
  • (2012/04)
  • (2012/03)
  • (2012/02)
  • (2012/01)
  • (2011/12)
  • (2011/11)
  • (2011/10)
  • (2011/09)
  • (2011/08)
  • (2011/07)
  • (2011/06)
  • (2011/05)
  • (2011/04)
  • (2011/03)
  • (2011/02)
  • (2011/01)
  • (2010/12)
  • (2010/11)
  • (2010/10)
  • (2010/09)
  • (2010/08)
  • (2010/07)
  • (2010/06)
  • (2010/05)
  • (2010/04)
  • (2010/03)
  • (2010/02)
  • (2010/01)
  • (2009/12)
  • (2009/11)
  • (2009/10)
  • (2009/09)
  • (2009/08)
  • (2009/07)
  • (2009/06)
  • (2009/05)
  • (2009/04)
  • (2009/03)
  • (2009/02)
  • (2009/01)
  • (2008/12)
  • (2008/11)
  • (2008/10)
  • (2008/09)
  • (2008/08)
  • (2008/07)
  • (2008/06)
  • (2008/05)
  • (2008/04)



記事メニュー2

Update Log

取得中です。
人気記事ランキング
  1. Drawing_analog
もっと見る
最近更新されたページ
  • 2686日前

    menu_L
  • 2686日前

    進捗状況(2018/03)
  • 2686日前

    Drawing_digital_13
  • 2686日前

    Drawing_digital_12
  • 2686日前

    トップページ
  • 2892日前

    Drawing_digital_11
  • 2973日前

    Drawing_digital_10
  • 3005日前

    進捗状況(2017/04)
  • 3046日前

    進捗状況(2017/03)
  • 3097日前

    頂き物
もっと見る
人気記事ランキング
  1. Drawing_analog
もっと見る
最近更新されたページ
  • 2686日前

    menu_L
  • 2686日前

    進捗状況(2018/03)
  • 2686日前

    Drawing_digital_13
  • 2686日前

    Drawing_digital_12
  • 2686日前

    トップページ
  • 2892日前

    Drawing_digital_11
  • 2973日前

    Drawing_digital_10
  • 3005日前

    進捗状況(2017/04)
  • 3046日前

    進捗状況(2017/03)
  • 3097日前

    頂き物
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. MadTown GTA (Beta) まとめウィキ
  2. AviUtl2のWiki
  3. R.E.P.O. 日本語解説Wiki
  4. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  5. シュガードール情報まとめウィキ
  6. ソードランページ @ 非公式wiki
  7. ドラゴンボール Sparking! ZERO 攻略Wiki
  8. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  9. 星飼いの詩@ ウィキ
  10. Dark War Survival攻略
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 初音ミク Wiki
  5. 検索してはいけない言葉 @ ウィキ
  6. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  7. 発車メロディーwiki
  8. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
  9. オレカバトル アプリ版 @ ウィキ
  10. SDガンダム ジージェネレーションジェネシス 攻略Wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 過去の行動&発言まとめ - 鹿乃つの氏 周辺注意喚起@ウィキ
  2. マイティーストライクフリーダムガンダム - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  3. 魚拓まとめ - 鹿乃つの氏 周辺注意喚起@ウィキ
  4. 参加者一覧 - ストグラ まとめ @ウィキ
  5. 1103環境(遊戯王) - アニヲタWiki(仮)
  6. 前作からの変更点 - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  7. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  8. コレクター・ユイ - アニヲタWiki(仮)
  9. サーヴァント/一覧/クラス別 - Fate/Grand Order @wiki 【FGO】
  10. 画像倉庫 - 鹿乃つの氏 周辺注意喚起@ウィキ
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.