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

FPSを作ってみる@wiki

10)

最終更新:2010年10月30日 02:31

slice

- view
管理者のみ編集可

(2010/10/30)

ゲームとは直接関係ないけどDirectX11が気になる頃だね.
Vista=DirectX10をスキップしたけど7から入る人って結構居るんだろうか?
ジオメトリシェーダーやテッセレーションは名前しか知らないっす.
流行ってたHDRも触っただけで本当に「ちょっとやってみた」レベルだし・・
今だとテクスチャへ静的に影の焼付けなんて時代遅れかもわからんね.
こうなったらモバイル機器へ逃げるか?なんて思ったり思わなかったり.
片手に収まる機械で自作ゲームを動かすのは夢の一つでもあるから.

さて,現在は当たり判定ルーチンに取り掛かって・・って前回書いたわけだが.
先週はなんやかんやで別の作業してたな.
確かコリジョンのデータ配置,更新タイプ考えたり
メインで使うであろうゲームオブジェクト基底クラス(以後GObj)の整備
毎フレーム送られてくる"UPDATE"メッセージでは指定フレームだけ更新を停止するsleep()のような関数を用意.
これで move_left(), sleep(10), move_right(), sleep(10) ... とやれば左右に10フレーム周期で移動する処理が簡単に実現できる.

GObjのメッセージ受信の仕組みは
のようにメッセージIDと対応する処理関数をテーブルとして一括記述し,これをステートと呼ぶ.
ステートとはオブジェクトの状態を表す物で例えばアクションゲームの主人公なら
「停止」「ジャンプ」「ダメージ食らいモーション中」... となる.
ステートを適用するにはGObj:setstate(ステート)と,GObjの専用メソッドを呼ぶ.
また特定部分だけ処理が違うけど他は同じにしたいという場合は
Luaのメタテーブルを利用し setmetatable(ステート, {__index=ベースステート})とすれば良い.

と長々説明してみたはいいが多くの人の感想は「なんのことやら」とか「だから何?」だろうな.
(自分が何をしたかの確認の為に書いただけなんで別にいいが)

(2010/10/19)

Cでは配列インデックスは0からが普通だがLuaは1からッ
使っていれば案外慣れるもんだな.
Lua変数にアクセスする時に面倒くさい手続きが要るのもあってそこで思考が切り替わるようだ.

さておき,当たり判定の構造を表すIDを生成するルーチンなど実装.
最初におおまかな球で判定して当たってたら詳細なポリゴンで判定とか.
躓いたのは表現する手段.結論から言ってLuaではテーブルで表す事にした.
前提として基礎となる判定形式は球ならVolumeクラス,円柱ならCylinderクラスと言うように作りこんでおき
それぞれに1からの連番IDを付加.
(0からだとC++のルーチン実装の時に不便だったんで)

例えば {COLLISION.VOLUME, COLLISION.CYLINDER} とすると最初に球,その後円柱で判定の意味になる
{COLLISION.VOLUME, {COLLISION.POLYGON}} ならば最初に球,次に複数のポリゴン・・・といった感じ.

でまあC++からでもIDを生成したいよねってことでC++用の関数も用意.
こちらは int calcID(int c_id, ...) と,可変引数を使う.
判定が1つ終わった後に次のレイヤーを展開するかはコリジョンIDにフラグをOR合成.
引数終了判定はこのフラグが付いてない時とした.
Luaの例と同じ意味合をC++で生成すると
前者は calcID(VOLUME | PAIR, CYLINDER)
後者は calcID(VOLUME | NOTPAIR, POLYGON) となる.

まだコリジョン構造を数値で表現しただけの段階だが,これからボチボチ中身を実装しようかと思う

(2010/10/16)

リソースはマネージャで読んだ後はオブジェクト指向ぽく
[ハンドル]:[メソッド名]でいちいちマネージャを介さず各種情報へアクセスするようになり扱いは簡易になった.
それ関係の細かいバグ取り等もした.
進まない進まないと言いつつ,んまぁなんだかんだで.

今度は当たり判定の実装で悩む.
前のバージョンは極力条件分岐を減らす方向でテンプレートを駆使したコードを書いていたら
プログラムが肥大化して処理が本当に速くなってるかわからん状態だったし
挙句コンパイルするのに時間かかるわメモリ1.2GByte以上必要とかなってたんで.
本当はどちらが速いか比較検討したうえで決めるべきだけど
激しく面倒だから現バージョンでは汎用性重視で書く(と宣言して踏ん切りをつける魂胆)
今時のCPUなら条件分岐よりメモリアクセス減らした方が良くないか?
幾ら間接参照が遅いからといってもキャッシュに収まればほぼ問題ないわけでしょ?等の理由もある.
前に頑張って書いたから捨てたくないのは山々なわけだが
本当メンテナンス制が悪かった.倍以上速くなければ採用したくないくらい.

肝心の当たり判定の中身はどこに置くかについては流石にLua側に置いていては遅すぎると思ったのでC++側で.
(正確にはメモリ領域自体はLuaで確保してもらって中身の読み書きはC++で行う)
となるとオブジェクトが移動したら都度書き換え関数を呼んでもらう事になるが・・・こればっかりは仕方ない.
オブジェクトに更新フラグ持たせてそれが必要な時だけ転送というようにはするか.
結果的にC++とLuaで同じ意味合いのデータを持つ訳でちょっとスマートでは無いものの,これは妥協.
超大きいデータだったら毎フレームC++側から座標データを取り出して移動させてまたC++へ格納なんて手段も考えられなくはない.
遅いけど.

(2010/10/11)

10月もそろそろ半ばだってのにまだメモリ周りいじってるんですけど・・
コードはあちこち書き換えてるハズなのに全然前に進まないの.もうやだ.

「処理の効率化のために極力間接呼び出しは使わない」とかやってた過去のコードに引きずられている.
ここ最近の作業は実は,型で処理分けしてた部分を汎用インタフェースに作り変えてるだけだったり.
ああ処理効率を追求すると本当に汎用性が下がるんだな~と実感.
だがスクリプト使う時点で諦めろと.

(2010/10/03)

Luaでのリソースハンドルの扱い方がいろいろと矛盾してて試行錯誤
とりあえずコーディングまでは終わった(コンパイル通ったという意味)
デバッグはこれからだけど実際動かせる段階まで来れば気分が違うものだ.

で,また仕様変更.
リソースの内部クラス初期化関数の引数はこれまでファイルを読む事しか想定してなかった.
だからstringか,又は無し(ファイルを読まないリソース.カメラ等)だったのだが
先日のインプットデバイス初期化云々によりGUID等も使う必要が生じたため
汎用の構造体を渡し,そこに必要な情報を設定するようにした.
 ・・・メモ帳でああだこうだやってたのに書いてみればこれだけか.
「10)」をウィキ内検索
LINE
シェア
Tweet
添付ファイル
  • lua_proc.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.