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

FPSを作ってみる@wiki

02)

最終更新:2014年02月23日 17:52

slice

- view
管理者のみ編集可

(2014/02/23)

LuaとC++オブジェクトの仕様を固めている&実装途中なので現状あまり書くことがない。

以下、オブジェクトはLuaで記述したクラス。ベースクラスはC++で記述したクラスとすると
  • スクリプトファイルはオブジェクト名を含んだ単一のスクリプトファイル(ObjectName.lua)を用いる=Java仕様
  • オブジェクトは基本となるC++のクラス(キャラクターや銃弾など)を1つ指定してそのインスタンスを内部に持つ
  • オブジェクトは状態遷移機構を持つ。C++のベースクラスも内部に持つ物があるが、Luaからその存在はわからない。
  • オブジェクトはベースクラスのメンバやメソッドを参照できる
  • オブジェクト間の情報交換や指示はLuaで行い、文字列と任意個のパラメータを含むメッセージを渡す形になる
  • あくまでオブジェクトがベースクラスを「使う(知っている)」関係なのでベースクラスからオブジェクトのメンバを参照したりメソッドを呼んだりは出来ない。が、上記のようなメッセージを送るのは可
  • Lua -> C++ へメッセージを送るのも可
  • 描画(モデルの管理)や当たり判定はLuaからは扱わず、C++のみとする。Luaから制御したい時は必要に応じてベースクラスにメソッドを用意する
  • オブジェクトのステート継承をサポート
  • オブジェクト自体の継承は未定。複雑になりすぎないようだったら入れる

あとオブジェクトのstatic変数やグローバル変数の扱い、システム関数なんかもあるけどざっくりと、こんな感じで。
2月末までに動けばいいな。と、言った時には大体間に合わないんだけども。

(2014/02/16)

自分の場合面倒臭がってコメントをあまり書かないし
コードがコピペっぽくなってる所は発見次第纏めてしまうせいもあってか
一日で1000行も行かない日が多い。
でも、世の中に2000、3000行は普通に書ける人は居るらしい・・

御託はともかく。

スクリプトの組み込み

とりあえずWindowsで動いたから次はAndroidか、ゲームの実装を進めるか・・・と暫し迷って
「Androidで動かすにしてもサンプル程度じゃ面白くないよね」という事で
一刻も早くゲームを動かす方向で作業中。

当たり判定ルーチンに一抹の不安が残るがそれはさておき、
ゲームらしくと言えば次はいよいよスクリプトである。
自作エンジンのコンパイルに手持ちのCPU(PhenomII X4 955)で少なくとも20秒〜最悪2分は掛かる規模に膨らんでしまった現在
スクリプト無しにゲームバランスの試行錯誤など考えられないのだ。

前回は「なんでもかんでもスクリプト」でやろうとして、結果として
コード補完が効かないし動作も遅いスクリプトでゲームの大半を動かす本末転倒な事態になってたので今回は慎重に。
言語は引き続き使い慣れたLuaを使い、以前乱用し過ぎていた擬似クラスは
ベクトルやクォータニオンなんかの基礎的な物にとどめ、極力使わない方針。

下手に何にでも使える汎用クラスは作らずに例えばFPSのキャラクタークラスならC++で
ジャンプ、方向転換、移動などの関数を持つキャラクターのベースを用意し
キー入力に対応する動作などをスクリプトで関連付ける。

銃弾ならC++で直進移動する銃弾クラスを作って、移動速度や追尾対象なんかをスクリプトで設定する。
軌跡に煙を残すならC++のスプライトクラスを一定間隔で現在位置に作成する〜みたいな。

と、まだ設計中なんで抽象的な事しか書けないが・・

またしてもラッパークラス

Luaの組み込み・・それ以前にLuaのAPIはスタックマシンベースで変数の操作に癖があり、
いちいちスタックの何番にどの値が〜とか、都度コメント残してくのは手間だし管理も大変なので
まずはC++風に変数とオペレータで値をコピーやセットできるようなクラスをば。
前にもラッパークラスで同じ様な事をしていたがあの時は不慣れなせいか色々と不満点(主に効率)があったので
現在書き直している。

(2014/02/10)

動くと見せかけて動かない、かと思えば

さて、動いたからアップするかーと思ってデバッグで入れてたprintf系の命令を削除し、再ビルドしたら動かない。
え?と元に戻してビルドするもやっぱり動かない。訳が分からん。
結局一度cleanしてから再度ビルドかけて事なきを得た。
今更感ありありだけどWindows版をアップしておいた。
例のごとく、何時ものアップローダからどうぞ。
ドライバのバージョンが取得できてなくて変な数値になってるが、とりあえず動くようだ・・

で、バグの原因はアラインメントずれではなくOpenGLのAPIを自前で読み込んでる部分で関数宣言をstdcallにしていなかった事。
Linuxでは恐らくgccのデフォルトと同じcdeclなので問題ないけどWindowsのDLLではstdcallを使っている関係で不具合が起こる。
前にフレームポインタを省略しなければ動くと書いたがやはり「たまたま動いてただけ」だった。
Windows版だけstdcallで宣言するように修正したら-O2でも何事もなく動いた。

いやぁしかし、こんなので数日潰したなんて近年稀に見る大失態である。

Vim

Ubuntu版を公開してから実に一週間以上。
何をしていたかといえばご覧の通りMinGWで動くだの動かないだのでずっと足踏みしてた訳であるが

ただ救いがあるとすればMinGW版をフルでビルドするのに一回5分はかかる関係で
その間Vimの操作方法や設定を勉強していたら、結果的に開発環境を殆どVimに移行できた事か。
vimからmakeを呼ぶコマンドはあるのでMakefileを復習しつつ、
cmakeもmakeもデプロイもvimのコマンドで実行できるようにした。
gdbによるデバッグだけまだという感じで。これはまたの機会に。

(2014/02/09)

とりあえず、動いたという事だけ。

諸処の御託はまた明日

(2014/02/07)

明日は広い範囲で雪が降るらしいが、ソースコードも雲行きが怪しい。
なんか毎回Windowsで動かすのに苦労してる気がする・・・
でもWindowsの方で環境構築してビルドしても動く保証が無いし何より面倒くさい。

Windowsで動かない

さて。今回は何で詰まってるかと言えば「デバッグ版では動くのに最適化をかけると動かない」
よくあるっちゃあ、あるのかもしれないけど。

どうやらOpenGL APIを呼んでる箇所でコケている模様。
正確にはvirtualなメンバ関数からOpenGLの関数を呼んだ後、その関数を抜ける時にSEGV(nullptrにwriteアクセス)が起きている。
アラインメントずれの悪夢再来か・・?と、一瞬思ったが今回はwineでも実機でもvirtualboxでも同じ所で落ちる。
という事は、恐らくAMD CatalystとVirtualBoxのドライバの差異に起因する問題ではない筈

ちなみにwglGetProcAddress()でアドレスを取得した関数をstaticメンバかグローバルに置いて呼ぶと大丈夫のようだ。
最適化オプションを幾つか試した結果-O1 と -fno-ommit-framepointers ならば動くが-O2以上になると駄目。
何故だかフレームポインタ省略を無効にすると動くのは何なんだろう。

まぁ、そんな感じで悪戦苦闘中

(2014/02/02)

Ubuntu版の公開

とりあえずUbuntu版を公開。依存パッケージとか開発機でしか確認してないからこれでいいのかよく分からんが・・
SDL2とSDL2_imageはまだパッケージが出回ってないようなのでこちらで用意した。
何時ものアップローダからどうぞ。

まあ・・・ライティング無しだとあまりにもアレだから並行光源ライティングくらいはしておいた。

機能としては単にポリゴンを表示してOpenALによるサウンド再生、ウィンドウ最小化時のOpenGLリソース解放と復帰のテストだけ。
あとFreeType2によるフォント描画。
スクリーンショット見れば事足りるか。

っと思ったら操作方法の記述を忘れているではないか。
  • WASDでカメラ移動
  • マウス左ホールドで方向転換
  • QとEでサウンドの再生と停止
  • Escでアプリケーション終了
である。面倒くさいから次のバージョンで直す。

Windows版

試す人がいるかどうかは別として、躓く所が無ければ今日中にもアップできる筈。

(2014/02/01)

プログラミング以外の事で色々あって
だいぶ遅れてしまってるが立方体が回って音楽を流すだけのデモをアップロードをしたく作業中。

パッケージング

とりあえずデモプログラム的には完成しているんだけど
例のごとく忘れているのもあってLinux(Ubuntu)版のパッケージングにちょっぴり躓いたり。
まずはlddによる依存ライブラリのリストアップから始まり、OSに標準で入ってると思われるものについては除外。
残りは既に公式パッケージが存在していればそれを使い、そうでない物(例えばSDL2)は自前でdebパッケージを用意という形かね。
libjpegはバージョン8が広く出回ってるみたいだけど自分のとこでは9を使っていたので改めて8を使う様にしてビルドとか。
他にもlibfreetype6, libvorbisfile3, libogg0, libvorbis0a, libopenal1, libpng12-0, libjpeg8
とかあったがこれらはパッケージが既に存在していたので助かった。

ポインタ比較?

clang++でリリースビルド(-O2)すると以下のようなルーチンでwhileがいつまで経ってもfalseにならずSEGVで落ちる、という現象に遭遇。
const char* ptr = &buffer[0], ptr_end = ptr + size;
while(ptr != ptr_end) { char c=*ptr; ... ++ptr; }

std::coutをかましポインタの値と比較結果を出力して逐一チェックを試みるも
数値は同じなのに!=比較結果がtrueという・・・。
一旦uintptr_tなどに変換してから比較も駄目だった。

原因がよくわからんけど一先ず whileの中を ptr < ptr_end とする事で解決。
「02)」をウィキ内検索
LINE
シェア
Tweet
添付ファイル
  • dw_vbox.PNG
  • v001_1.jpg
  • v001_1w.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.