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

FPSを作ってみる@wiki

03)

最終更新:2013年03月20日 21:47

slice

- view
管理者のみ編集可

(2013/03/20)

やはりここらで報告。って事はまだ出来てないのか!しかしalmost thereな感じではある。
前回書いた「避けるだけゲーム」の、半分くらい。自作フレームワークの使い方が板についてきた。
もうちょっと調子が乗ればローグライクとか作れそうだなあと思ったり。

早合点

Androidに本来備わっているGUIとゲームスレッドとの連携に、主に自分の理解不足のせいで手こずった。
GUI関連のメソッドをメインスレッドからしか呼べないのはWinAPIの時と同じかぁ※1という感じで知っていたのだが
例えばゲームスレッドから「GUI部品をクリアしたい」となった場合にメインスレッドのメッセージハンドラへメッセージを送って非同期にやるのは簡単だ。
しかしゲームスレッドからしてみれば「場面を切り替えたい時」等、ゲームの処理と同期したい場合が多い。
何も対策をしなければメニュー画面を開いてちょっと遅れてボタンが表示されたり、メニューを抜ける時にその逆という事態が起こりうる。
これではゲームとして格好悪い。
そこでメインスレッドがGUIの更新を終えるまで待機する処理を入れる。

ちなみにGUIの構造は
FrameLayout - LinearLayout
           - TableLayout
           - SurfaceView
のように重ねている(SurfaceViewがゲーム描画)
LinearとTableを用意しているのは、片方だけ使う想定。
メインスレッドからGUIをクリアするのは特に問題はなく、そのままLinearLayoutやTableLayoutのremoveAllViews()を呼べばいい。

当初はGUIを削除するのにどこで勘違いしたのかわからないがLayoutのChildrenは取得、操作できない物と思い込み
一旦根本のFrameLayoutを削除してからまたツリーを構築しなおしていた。
こうするとSurfaceViewがどこにも接続されてない瞬間があって、ちょうどその時ゲームスレッドが描画中だったりするとクラッシュする。
なのでメインからGUIクリアメソッドが呼ばれた際はゲームスレッドに「描画が終わった時に改めてGUIクリアメソッド呼んで」とメッセージを送って、
ゲームスレッドが暇になりGUIクリアを呼んだ際の処理も考慮して・・随分無駄なことをしていたもんだ。

※1
と、書いておいて何か違和感を感じ確認してみたら別にメインスレッドじゃなくてもいい様だ。
要はウィンドウを作成するとそれが作られたスレッドのメッセージキューに関連付けられるので
ウィンドウを作ったスレッドでメッセージループをちゃんと回しさえしておけば正常に処理されるのだが
Twilve(not Qt版)を作った当時はそんな事に気づかず「ウィンドウ作る時はメインじゃないとダメなんだ!」と思ってた気がする。
詳しい話はhttp://eternalwindows.jp/index.htmlの、
http://eternalwindows.jp/windevelop/message/message00.htmlとか見てもらえば。

予定

  • 引き続き「避けるだけゲーム」の作成
  • OpenGLを忘れかけているので復習
こんなとこかね

何番煎じかわからんけどOpenGLのヘッダから関数定義を抽出するプログラムを作ってみたり
(コメントにあるロード関数定義の例はWindows用だけど)
https://gist.github.com/degarashi/5203986
なんかさ、こまごました補助ライブラリ無しだと格好いいじゃないですか。
ぶっちゃけhttp://wlog.flatlib.jp/archive/1/2009-9-1のスクリプトを
C++で書いただけですが。

(2013/03/15)

ここらで一旦報告。
やった事
  • Debianパッケージ作成
  • フレームワーク(Java パッケージ化)
  • フレームワーク(C++ リソースハンドル周り)

今更ながらtwitterクライアントのlinux版をDebianパッケージにてアップロードしておいた。
Qt5のラインタイムはまだ出回ってない様なのでこれも別にパッケージ化。
ライセンス記述とか全然してないが、まぁno warrantyで。ソースはgithubにあるから読みたい人はどうぞ。

Javaのフレームワークはパッケージ化が完了して外部からインポートして云々までは確認。
でもゲーム作ってナンボだよな・・従ってシンプルなゲームもどきを作成予定。
画面内をバウンドするボールを、主人公が避けるだけのアプリとか。メニュー画面やポーズなど場面遷移テストを兼ねて。

C++の方のフレームワークはリソースハンドルとの連携周りが上手く行ってなかったので少し修正。
不味いね。永遠ベータ病にかかっている。


前々から自作の物理シミュレーションがどうにも安定性に欠く事がずっと気になっていて、
時折既存のシミュレータをいじりながらどうするか考えていたのだが・・
思ったのは
「別にVerlet法で動かさなくてもよくね?」
という事。Verlet法なら安定して動きも軽いし位置の変更で速度が補正されるから便利だよね、という売り文句で導入はしてみたものの
結局摩擦や反発などの計算で速度は必要なのだ。位置と同時に速度を一緒に計算するVelocity Verletにしても・・
基本的には一定フレーム間隔でしか更新できないのが難点。
物体が衝突する際は精度が欲しいので一時的に更新レートを上げたいとか、
スローモーションでゲームを動かす時は時間刻みを小さくしたいなぁと思っても難しい。
いや、勉強不足で本当に一時的にレートを上げるアルゴリズムを実装できるのかは別として。

http://www.richardlord.net/presentations/physics-for-flash-games
ここのスライドをずっと進めて見ていくと各アルゴリズム(オイラー法やVerletはもちろんルンゲ・クッタも)で
ある加速度を加えた時の質点の動きを並列で動かして比較してるページがあるのだけど
これなんか見てると特別Verletが優れている訳でもないみたいだ。
とかいいつつ改めて上のスライドを見返すとTime Adjusted Verletとある・・後で調べないと。

ともかくVerletでなくたって位置をむりやり変更した後の速度の再計算はできる(よね?)
そんな事をうだうだと。

予定
  • フレームワーク (Java 簡単なゲームを作成)
・フレームワーク(C++ スクリプトとの連携)
要するに続きをやると。物理シミュの改良もしたいけどそこまで手が回らないだろう。

#追記
スクリプトとの連携を含め既存エンジンと組み合わせるのは難しそう。
メモリアロケーションやリソースハンドルマネージャ周辺を入れ替える必要があって、だったら組み直した方が早い。
なので予定変更。
まずはJavaフレームワークのテストを公開まで持ってく。
その傍ら、物理エンジンを改良(更新レート変化やらルンゲ・クッタやら)できたらして動画を撮る。

その後はエンジン組み直しの悪寒・・(次で6代目)
でも現状のままだとゲームを動かす処理を記述するのが手間すぎるし
下手に自作のメモリ管理入れちゃってるから無意味にアロケータが3つくらい走ってて非常に気持ち悪い・・
今度はゲームエンジン以外にもQtやJavascript+php+sql関係やAndroidという手段があるから何も成果物出せない事態は避けられる筈。

(2013/03/10)

残念ながら今回も経過報告。相変わらず何処に向けて走ってるのかわからんが・・

やった事
  • タスクシステムの移植(C++ とりあえずバージョン)
  • Variantクラスの実装(C++)
  • 外部サーバーにsvnリポジトリの設置とsvn+sshプロトコルによる接続テスト
取り組み中
  • Debianパッケージ作成方法の調査
  • フレームワーク(Java)

タスクシステム(C++)は仕組みを作ったというだけなのでゲームとして動かすには不十分。
リソース管理ハンドルとかも仕様を練り直し、リソースマネージャ内部に実際にリソース用メモリを確保するのではなく
単にnewしたポインタとの仲介をするだけに留める方向とした。こちらも書くだけ書いた状態。

Variantクラスについては前回書いた通りで、まだ詳細な動作確認をしていない
内部構造については特に凝ったことしてないなぁ・・多分そのうちgistに上げるけど。
数値型、配列、連想配列、文字列が一緒くたに扱えてムーブコンストラクタも使えて無駄がないね、みたいなクラス。
オブジェクト間通信に使用予定。

svn云々の項は例の釣りゲーで使う共同作業場所を勉強を兼ねて外部レンタルサーバに置く事にしたので
sshの設定やら何やら、である。

Debianパッケージ構築は一ヶ月前に触れておきながら放置してたのを思い出したように(実際そうだが)再開。
とりあえずdpkg-debを使ってバイナリパッケージを作れたが依存関係やライセンス記述とか知らんわー みたいなレベル。
dpkg-deb? dpkg-buildpackage? debuild? 何がどう違うんだか・・
でもこれで一旦リリースしちゃうかも。正式なパッケージとかってなると奥が深そうだし。

そしてJavaのフレームワーク。もうちょいでパッケージ化できそう。
面倒くさいので当たり判定は基本的に総当りで形状は矩形と円。
流石に「相互判定するオブジェクト」と「弾丸の様なそれら同士は判定しない」種類分けくらいはするが。

予定
  • フレームワーク (Java パッケージ化の続きと動作確認)
  • フレームワーク(C++ スクリプトとの連携)

(2013/03/04)

やった事
  • android_native_app_glueの読解
  • タスクシステムのC++への移植

native_app_glueについては前回書いた通り。ひと通り読んで流れはつかめたか。
結論として大筋は変えずそのまま自分のアプリで使えそうだが、如何せんC++ではなくCなのでその辺が自分にとって扱いづらかったり。
クラスに纏めるくらいはしたいかなと。

タスクシステムは紆余曲折あって
最初C++で書いていた物にを改良を加えつつJavaで書き直し、再度C++に逆移植という形になった。
そしてJavaバージョンは文法を覚えながらだったので下手にWeakReferenceを使っていたり無駄が気になるからもう一度書きなおす。
今度は描画やサウンド含めた自前フレームワークとしてPackage化したい。
更に言えばC++の方も「とりあえず」という事でオブジェクトを全てnewで確保するタイプとして実装したものの、これは
本筋のゲームエンジンで扱っているリソースハンドルで管理する方式とは違う為そのままでは組み込めない。
スクリプトとの連携も含めエンジンの書き直しをしたい誘惑に駆られるがどうなることやら・・

予定

まず、上にJavaバージョンを書き直すと書いてピンと来た人も1%くらいは居るかもしれないが
Androidでゲーム作るの再開。これまた諸処の事情で。
どんなゲームにするかも決めてあって2Dの釣りゲームになる予定(前に作ってた紐シミュレータはこれの布石)
期間はそれ程長くならないと思われる。追って報告したい。

NativeActivity & OpenGLは3Dのゲームを作る時用。
テクスチャを用意するのが面倒なので生ポリゴンの奥スクロールシューティングを考えているけど、これは何時になるかわからん。

あとC++のフレームワークでオブジェクト間メッセージのやり取りをする場合に「なんでも値が入る万能型 = Variant」が必要と感じたので
これも実装する。JavaだとObjectにキャストして後はinstanceofとかで何とでもなるんだが。

これからやる事
  • フレームワークの整備 (Javaの方: パッケージ化)
  • Variantクラスの実装
  • フレームワークの整備 (C++の方: 動作確認を十分に行った後リソースハンドル形式とスクリプト対応)
多分、C++のフレームワークは次回更新までに間に合わない

「03)」をウィキ内検索
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

取得中です。
人気記事ランキング
  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.