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

FPSを作ってみる@wiki

09)

最終更新:2010年09月29日 19:12

slice

- view
管理者のみ編集可

(2010/09/29)

なんか大事になっちょる.Luaにも弱参照と強参照を備えようという事になり
リソースマネージャの根っこから改変.
ちなみに強参照は所有権を持つが,弱参照は所有権を持たないリソースハンドルの事だ.
強参照はともかく弱参照は何に使うかと言うと例えば追尾レーザーの目標オブジェクトの保持や
デバッグの為に値表示する際にも監視するオブジェクトが破壊されたら出力も止めるとかですか.
強参照だとオブジェクトが破棄されませんからね.

(2010/09/28)

昨日からどうしようか悩んだがinputクラス作り直し・・・だな.
ポーリングによるキー入力判定とバッファ形式での文字入力がごっちゃになっている.
この部分は半年は前に書いたので他人のコード感覚で読んだら無駄な箇所が結構ある.
エラー処理してそうでしてないとか.ジョイパッドの振動エフェクトも途中で放棄してあるし.
半端なオブジェクト指向で生のポインタを使っててLuaから触れなそーだなー等
ざっと挙げてこんな感じ.これはちょっと駄目だ.

入力デバイスの初期化についてはボタン数まで取得せずともデバイス名を列挙できれば
事足りるだろうと踏んで,そういう仕様に.
ただあんまりあれもこれも欲張ると簡単化の為にスクリプト採用したのに
結局Cで書くのと変わらなくなりそうだから注意か.
キーボードとマウスは明示的に初期化しなくてもデフォルトで使えていいよなあ・・
キーボードやポインティングデバイスが2つ以上接続されるケースも考えなくていいよね(多分)

(2010/09/27)

ハンドルIDの予約は完了.

キー設定をLuaから読めるように,キーの状態をbooleanで返すクラスを用意.
input:pressing("識別ID")で押している間ずっとtrueが返り,
input:pressedは押したフレームのみtrue,
input:clickedなら押して離したフレームのみtrueとなる.
キーの区別をダイレクトにAキーやSキーとしなかったのは言うまでもなく
キーコンフィグの為である.
でもデバイスの列挙はまだ作ってない・・

(2010/09/23)#2

むぅ.思った以上に変更箇所があるな.
ハンドルIDを予約するのはいいがそれだとload()中で内部を参照できないじゃないか.
それで別にいいという場合もあるが・・・っと,いかんなぁ完ぺき主義は.
プログラムにおいて座右の銘は「制限を設ければ実装はシンプルになる」なので
そういう仕様にするか.

(2010/09/23)

リソース読み込み関数(Load())の中で同種のリソースを新たに読み込むケースで,リソース配列サイズが足りない際に
配列なので別の領域を割り当てしなおすわけだけどそしたら最初に呼んだLoad()関数に
処理が戻ってきたらThisポインタが違ってしまう.
知らずにアクセスすると当然一般保護エラーになってしまうわけで.はてどうしようかと.

メンバ関数の呼び出し規約はthiscallと言う物でvisualstudioの場合は
レジスタecxにThisポインタを入れている.
じゃあ処理が戻ってきたら何らかの方法で新しいThisポインタを取得し,ecxに代入してやれば・・
と考えたがこれでは上手くいかないだろう.
ecxにThisポインタを入れるのはあくまでも呼び出す時の決まりなのであって
関数の中でebpやespにコピーして使おうがその先は保障されない.
...という事をインラインアセンブラを扱う関係で知っていたからだ.

オブジェクトのデストラクタとか考えるとload()で同種の別リソースを読んだらその時点でアウトか.
という事はload()の細工は無理.それを呼ぶマネージャでなんとかするしかない.
暫し考えた末に導き出した答えは
「メモリ領域を割り当てる前にハンドルIDを予約しておいて実際の読み込みは1つずつやる」
多分これで上手くいくはずだ・・・

(2010/09/21)

なんかもう,進もうとしたらバグ発覚で1歩下がる状態が続いてモチベーション下がりまくり
scene構造は大体できてきたが,仕様煮詰めないと・・

(2010/09/15)

戻り値を複数返す仕組みを作ってみたり(C++とLuaで共通の記述)した.
もう少しで完成する.
インラインアセンブラ記述の部分が増えて微妙な気分ではあるがとりあえず気にしない.

場面の切り替えとリソース管理についても少々.
今後タイトル画面,ゲーム画面,ゲームオーバー画面・・等のゲーム状態と
そこで使うリソースを一纏めにSceneと呼ぶ事にした.
更にゲームSceneでアイテムメニューなんかを開いた場合を想定しSceneの上で別の子Sceneを呼び出せる仕様とした.
まだ実装に入ってないから,設計の是非についてはなんとも言えないが.

あとはエンジンの初期化方法か.リソースを読み込むクラスだけは予めC++で初期化しといて
その先のエンジン初期化等は全てLuaで行う.
具体的にはEngine.create(640,480,true)だ.
(引数は左から順にウィンドウサイズX,ウィンドウサイズY,フルスクリーンフラグ)
そしたらエンジンにアクセスする為のハンドルが取得できるので以後はコレを使って描画なりなんなりする.
リソースについてもテクスチャを読みたければTexture.create("file-name")と書けばハンドルが返ってくるし
サウンドならSound.create("file-name")となる.
これらはGC(ガベコレ)に回収された時点で後始末処理をする.楽々だ(多分).

描画と衝突判定の設定についてはほぼ確実に一悶着ありそうだし慎重に進めようか

(2010/09/10)

ここ2~3日はプログラムを触ってない時間が長い.
漠然と考えてるだけの時は気づかなかった仕様の不備(はっきり決まってない部分)がボロボロ出てくるものだな.
今日はスクリプトで動かせる範囲について思案していた.

当初バッファの管理とかAPI呼び出しのお膳だてなどの面倒くさい処理を全部C++で記述し
Luaではエンジン初期化(解像度,フルスクリーンか否か),関数呼ぶだけでオブジェクトを作れて~なんて
軽く考えていたが.それでプログラムが書けたら苦労しないわけで.
以下に例を挙げてみれば
  • 実際にゲームを作る時に何の処理をどのようにLuaで記述するか,用意すべき関数は?
  • 必要に応じてC++の関数を呼び出すわけだけどインタフェースは?
   RS_CreateObj() 等のシステム関数を沢山定義しておく,それともエンジン自体を1つのオブジェクトとしてしまって
   Engine.createObj() のようにドットでアクセスか?
  • DirectXの前のWIN32APIによるウィンドウ作成は誰が?C++側で自動的に1つ作成するか?

 ・・・なんだ,まだ殆ど何も決まってないじゃないか.それに
ちょっと形式の整ったゲームを作るとなればタイトル画面,プレイ画面,メニュー画面・・・とか,
シーン毎に必要なオブジェクト,リソースをまとめて管理する仕組みが必要だ.
これらをLuaに組み込むにはどうするか?

どうも今まで動画を撮る為にと即席でリソースを読み,アルゴリズムをソースにベタ書きした分の
ツケが回ってきているようだ.

(2010/09/08)

テクスチャやモデル等を読み込みながら文字がアニメーションする,所謂ローディング画面を実装したいのだが
何の対策もなしにDirect3Dオブジェクトを複数のスレッドから同時アクセスすると不具合が出る.
これを防ぐために初期化時にD3DCREATE_MULTITHREADEDというフラグを渡すのだが
ドキュメントによるとパフォーマンスの低下を招くとのこと.
どの位遅くなるかが良くわからんが,検索して出てくる掲示板などを見るに数パーセントの範囲のようだ.
もちろん自前でロック機構を設けるのも出来ない事は無かったがプログラムが長くなるし
開発段階では安定性を優先する方針なのでこのフラグに頼ることにした.

それとLuaは数値の型としてデフォルトではdoubleを使う.
しかしD3Dは処理速度を稼ぐためかFPUの計算精度をfloatに変更してしまうようだ.
これは整数値を扱う際に問題で,floatは仮数部が24bitなので当然24bitまでしか精度が保障されない
(32bitのRGBA値を与えたら削られてしまう)
どうするか.大きい整数は扱わないと決めるという手もあるが今回は前述の”開発段階では~”の方針に従い
D3DCREATE_FPU_PRESERVEフラグで計算精度を保つようにした.

ここまで長々と書いたがなんのことはない.フラグ2つ加えただけっすな.

(2010/09/06)

Luaへのクラスの公開と資源管理は多分,出来た.使っていくうちに細かいバグは発見されると思うが・・
久々にインラインアセンブラを使った関係で思い出すのに時間掛かったり.

あとはテクスチャやサウンド等のリソースを読み込んで相互にやり取りする仕組みとか.
思案の結果リソースの中身のデータはC++で保持するようにした.
まぁリソースにはDirectXのハンドルも含まれるしデータに改変や
計算を加えたりといった事を考えれば処理効率の点で当然と言えば当然なのだが.

Lua又はC++でリソースを読み込んで使い,必要なくなったリソースはLuaでリソースハンドルがGCに回収された際に
参照カウントを減らし(C++側とLua側で共通)両方とも保持されてないと分かった時点で解放処理をする.
基本動作はこれだけだ.仕様の不備は使っているうちに出てくるだろう.
そういえばエラー処理もろくにしてないな.

現在の目標はサウンド再生,テクスチャ付き2Dオブジェクト,キー入力受付,描画処理,
デバッグ用文字表示,後できれば2Dの衝突判定 といった最低限の動作
これらをスクリプトで記述して動かせる状態まで持っていくことだ.
度々思うのだが自作エンジンの名前が決まっていないから何と書いて良いか困る(自分ではresonantと呼んでいるものの)
「09)」をウィキ内検索
LINE
シェア
Tweet
添付ファイル
  • what.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.