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

FPSを作ってみる@wiki

メモ書き

最終更新:2013年01月10日 02:03

slice

- view
管理者のみ編集可

Qt5で作成したプログラムの配布時

LinuxからMinGWでクロスコンパイルした時にハマッたのでメモ。
問題発覚の流れとしては

コンパイルしたバイナリをまずwineでテスト -> OK
windowsでテスト -> NG
windowsでQt5をビルド後、先ほどのバイナリをテスト -> OK
暫く別の作業した後でまた実行 -> NG  え?

こんな感じ。
原因を先に述べるとwindowsでビルドしたQtのオプションが気に入らなかったので一旦消した為に
DLL依存を調べるツール Dependancy Walker でも表示されない依存ファイルを読み込めずエラーになっていた。

Qtのアプリケーションをビルドして配布する時はライセンスからいって通常、ダイナミックリンクを選択する事になるが
windowsにおいてこの時添付するDLLがQt4ではQtCore4.dllやQtGui4.dll(などの用途に応じた物)、
Qt5でも同じようにQt5Core.dllやQt5Gui.dllなのであるがQt5ではもう一つ必要なファイルがある。
それは (qtsdk)/plugins/platforms/qwindows.dll だ。

後から見つけたのだが、同じようなスレッド立ててる人がやっぱり居た。
http://qt-project.org/forums/viewthread/23367

配布するバイナリと同じ場所に platforms フォルダを作ってその中にqwindows.dllを放り込んだら無事動いた。

スクリプトで記述する範囲

結構前からゲーム内スクリプト言語としてLuaを使用しているが当初からの疑問である
「どの程度までスクリプトで動かすべきか」がようやく掴めてきたのでメモ。
Luaはメタテーブルという機構があるのでこれを駆使すればクラスの様な振る舞いをさせる事ができるし
C++から関数を登録していけば幾らでも機能を追加できるので
放っておけば柔軟性の名の元に、スクリプトでゲームの大部分を全体を記述する事態・・と言えば聞こえは良いが
実際はデバッグし難いわ変数名を間違えているのが実行時に露呈したりであまり嬉しくない。遅いし。
ここまでが前置き。

色々試行錯誤した結果、ゲーム末端の部分だけでいいかと。
例えば場に敵を出したい場合
local hModel = ModelManager:load("model") -- モデルのロード
local hChara = Enemy.new(hModel, ...etc) -- 敵キャラ作成
CollisionManager:addObj(hChara) -- コリジョン登録
scene:addObj(hChara) -- シーンへの登録

とかやるんではなくて (現バージョンがそうなんだが)

FPSならそれ用のコリジョンや描画やアップデートの仕組みをC++のクラスで作ってから
FPSManager:spawn("enemy.def", ...etc) -- 敵キャラを配置

とやった方が簡便だし、速い。
FPSManagerではFPS、それも屋内なら屋内特化のFPSしか作れないだろうが
もしShoot'em upを作りたくなればSTGManagerでも用意すればいい話。

詰まるところ、スクリプトで記述するのは「そのゲーム固有」の部分という事に。
ステージ演出(エフェクト係数、敵の数や配置など)なんかはその典型かなと。

やらかしたメモ

プログラムする上でハマッた事の箇条書き
  • Lua: setmetatable()でメタテーブルをセットできるのはテーブルのみ
    他はCから設定しなければならない
  • Lua: 独立してメタテーブルを持てるのはテーブルとユーザーデータ(非ライト)のみ
    他は型毎に共有される.数値別にメタテーブルで凝った事などは出来ない
  • Lua: メタテーブルの__gcフィールドが有効なのはユーザーデータ(非ライト)のみ
    テーブルに__gcとかつけて凝った事など(略
  • Lua: 数値型が浮動小数点数(デフォルトはdouble)の場合,C側でlua_tointeger()しても切り捨てではない
    環境/実装依存.x86のVC++だと一端FPUに格納してハード側でINT変換してるけどこの時の丸めモードによって動作が異なる.
    常に切り捨てにしたければ一端doubleで受けて改めてINTにするかluaのソース改変必須.
  • Lua: テーブルのインデックスに数値を使う場合,下1桁までぴったり同じにしないと配列として扱われない
    ある計算でインデックスを算出してテーブルから参照しようとすると意外にはまる.
    危なそうな場面ではくどくてもmath.floor()を使った方がいい.
    2.00002とかでもアウト.
  • XAudio: IXAudio2SourceVoice::Stop()は非同期
    関数から処理が返ってきたので停止済みと思い込んでバッファを編集したりすると・・
  • OAuth: ブラウザのアドレス欄なんかで見るURLエンコーディングと,OAuthのそれ(パーセンテージエンコーディング)は別物
    一見すると似ているが罠.サーバは署名違ってるよとしかエラー返してくれないから余計混乱.
  • Direct3D: DirectX Control Panelで「Use Retail Version~」を選択していても Debugging欄の設定は無効にならない.
    少なくともMaximumValidationにチェックが入っているとAPIの呼び出し負荷が倍以上かかる.
    開発とは別にゲームで遊ぶ時とか注意.
  • Direct3D: D3DEffectクラスで現在アクティブでないTechniqueのパラメタをセットしても無視される(?)
    あとで使うTechのパラメタを先に指定しておけば内部にキャッシュされ,然るべき時に自動で適用されるかと思ったが,どうもそうでない様子
  • Direct3D: 動的なVertex/Index Buffer(D3DUSAGE_DYNAMIC)を,確保直後にオフセット0の位置からD3DLOCK_NOOVERWRITEでロックするとちゃんとデータを書き込めない(?)
    原因究明に2時間程費やした.解せぬ・・・
    デバッグランタイムを使っても警告は出ないしソフトウェア頂点処理の時は普通に動くから厄介.
  • Direct3D: 行列A,Bとこれらを積算したC、ベクトルVがあったとしてV*A*BとV*(A*B)はコンピュータ上で計算すると異なる。理由は浮動小数点数の誤差。マルチパスなんかでZFuncをEqualにする時は誤差を考慮に入れないとモアレの原因になる。
名前
失敗事例や指摘等

すべてのコメントを見る

VisualStudioのショートカットメモ

よく使ってるショートカットをメモしておこうかと思ったので、そうする。
メンドイのでデフォルトで使う派。
ブックマーク
作成 / 解除 Ctrl+K Ctrl+K
次へ Ctrl+K Ctrl+N
前へ Ctrl+K Ctrl+P
クリア Ctrl+K Ctrl+L
テキスト選択して使うコマンド
ソース整形 Ctrl+K Ctrl+F
右にインデント Tab
左にインデント Shift+Tab
コメント化 Ctrl+E Ctrl+C
コメント解除 Ctrl+E Ctrl+V
ビルド
単体コンパイル Ctrl+F7
ビルド Ctrl+Shift+B
デバッガ
デバッグ開始 F5
デバッガ無しで実行 Ctrl+F5
指定した行まで実行 Ctrl+F10
ステップイン F11
ステップオーバー F10
ステップアウト Shift+F11
デバッグ中断 Shift+F5
プログラム一時停止 Ctrl+Alt+Break
ブレークポイント
作成 / 解除 F9
すべて削除 Ctrl+Shift+F9
インテリセンス
候補 Ctrl+Space
関数候補 Ctrl+Shift+Space
「メモ書き」をウィキ内検索
LINE
シェア
Tweet
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

取得中です。
最近更新されたページ
  • 2685日前

    menu_L
  • 2685日前

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

    Drawing_digital_13
  • 2685日前

    Drawing_digital_12
  • 2685日前

    トップページ
  • 2891日前

    Drawing_digital_11
  • 2972日前

    Drawing_digital_10
  • 3004日前

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

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

    頂き物
もっと見る
最近更新されたページ
  • 2685日前

    menu_L
  • 2685日前

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

    Drawing_digital_13
  • 2685日前

    Drawing_digital_12
  • 2685日前

    トップページ
  • 2891日前

    Drawing_digital_11
  • 2972日前

    Drawing_digital_10
  • 3004日前

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

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

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

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

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

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

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

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

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. サーヴァント/一覧/クラス別 - Fate/Grand Order @wiki 【FGO】
  3. モンスター一覧_第2章 - モンスター烈伝オレカバトル2@wiki
  4. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  5. 犬 ルリ - ストグラ まとめ @ウィキ
  6. ジュラシック・ワールド/新たなる支配者 - アニヲタWiki(仮)
  7. hantasma - ストグラ まとめ @ウィキ
  8. プロトタイプcodeⅢ - モンスター烈伝オレカバトル2@wiki
  9. ロスサントス警察 - ストグラ まとめ @ウィキ
  10. シリーズ(SCP Foundation) - アニヲタWiki(仮)
もっと見る

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

2019 AtWiki, Inc.