おもちゃバコ

主に趣味について

UE4: GooglePlayストアにアプリをアップロードするまでにしたこと

こんにちは.

GooglePlayストアにアップロードする際にハマったことについての備忘録です.



事の始まり

UE4の勉強としてクソゲー1本リリースするか~」って気持ちでAndroid用のゲームを開発しました.
いつも通りにGooglePlayストアにアプリをアップロードしようとしたところ,

  1. そもそもアプリが起動しない.
  2. プライバシーポリシーの対応が必須.

という事態に陥りました.


そもそもアプリが起動しない

アプリ起動時に「No Google Play Store Key」て出て落ちました.
f:id:lambda410:20211115224615j:plain

対処法は「package game data inside apk」にチェックを入れればいけました.
ただ,容量がデカくなるので,もしかしたらアップロード出来なくなるかも.

恐らくこれよりも良い対処法があると思いますが,
とりあえず動けばいい根性の人はこれで大丈夫だと思います.

参考文献
answers.unrealengine.com
imoue.hatenablog.com
www.youtube.com


プライバシーポリシーの対応が必須

今年の8月ぐらいから.apkが.aabになったりしましたね.
それの仲間で,Androidアプリのリリースにはプライバシーポリシーの対応が必須となりました.

とりあえずレンタルサーバを借りてプライバシーポリシーを張り付けたサイトを用意するのが手っ取り早いと思います.
因みに,適当なURLとかを入れると審査に弾かれます(経験談).

自分はxfreeを借りて,ポリシージェネレータで出力したHTMLをまんま使いました.
ポリシージェネレータはかなり便利で,AdmobやUnityの項目もありました.

プライバシーポリシーを作成したら,
1. アプリ内からそのリンクにアクセスする方法を用意.
2. Google Play ConsoleからプライバシーポリシーのURLをアップロード.
すれば🙆です.

www.xfree.ne.jp
app-privacy-policy-generator.firebaseapp.com


まとめ

今はAndroidアプリをアップロードするのに色々必要で少し面倒ですね.

関係ないですけど,ゲーム開発の勉強にはゲームを量産するのが一番だと思います.

UE4: 完全初心者がUE4に入門する

こんにちは

Unreal Engine4(UE4)を始めたときに参考にした文献の備忘録です.



知識レベル

Unityはある程度使えるけど,UE4は全く知らないレベルです.
UE4を起動してUIを見たときに直ぐに閉じた過去があります.

C++はよく使用してます.


環境

Windows10
UE 4.27.1


参考書

「とりあえず本だよな~」って思考なので,初めは図書館で借りた参考書を写経しました.

--


UE4の基礎から応用まで幅広く網羅しており,「とりあえずはこれを読め」とよく挙げられている本ですね.
一通りわからなくてもやってみて,2回目からはじっくり読むとUE4を理解できるようになるかなと感じる内容でした.
結構分厚く,文字も多いので読み切るには根気が必要だと感じますが,力はつくと思います.
(途中から流し見しました🙄)

--


プロジェクト作成からビルドまでをゲーム開発しながら学べる内容です.
図が多く,1ページに文字がぎゅうぎゅうに詰まっている感じではないので確実に読み切ることはできると思います.
また,解説も親切なので一通りUE4を短時間で学びたい方にオススメです.
(読破し易いなど,様々な点からかなりオススメです.)


UE4 オンラインラーニング

Unreal Engine 4 最初の 1 時間 - Unreal Engine
UE4の機能を一通り学べる公式web教材です(無料).
とりあえずはこれをやるとUE4がどんなものか理解できると思います.
(題材は1時間ですが,動画を止めながらやると思うので2~3時間ぐらいかかると思います.)


感想

教材は読んでマネするだけでなく,実際に手を動かすことが重要だと思いました.
次は簡単なゲームをUE4で開発してみます.

Android Studio: C++を使用してAndroidアプリ開発環境を整備する

こんにちは

夏から秋に切り替わる季節は憂鬱になりますね(自分だけ?).

Androidアプリの開発環境をAndroid StudioC++で整備したときの備忘録です.



事の始まり

C++Androidアプリのゲーム開発をしたいな」

「DxlibがAndroid対応じゃん!!」

Visual Studioでaab出力の仕方がわからないから,リリース出来なかった...」

「純正開発環境使うか~」←ココ


参考文献

今回は感でやったのでありません.


開発環境

Android Studio

Android Studio Arctic Fox | 2020.3.1 Patch 2
Build #AI-203.7717.56.2031.7678000, built on August 27, 2021
Runtime version: 11.0.10+0-b96-7249189 amd64
VM: OpenJDK 64-Bit Server VM by Oracle Corporation
Windows 10 10.0
GC: G1 Young Generation, G1 Old Generation
Memory: 1280M
Cores: 4
Registry: external.system.auto.import.disabled=true

環境整備

  1. Android Studioをインストール
     必要に応じて,Javaやその他いろいろをインストール(丸投げ).
  2. Android Studioでプロジェクトを作成
     1. New Project
     2. Template: Native C++
     3. Language: Java
      プロジェクト名やAndroidバージョンはお好きに.
     4. 新規プロジェクト作成時の自動ビルド待ち.
      この時に足りないものをインストールしてねと言われる.
      とりあえず全部インストールするのがオススメ.
     5. Androidエミュレータを作成
      AVD Managerからお好きに作成.
      APIレベルは高ければいいと思います(適当).
     6. エミュで実行.
      とりあえず動作確認してみる.
     7. ソースコード確認
      後述.

動作確認

実行結果

f:id:lambda410:20210920105426p:plain

ソースコード

C++でライブラリを作成して,Javaで呼んでいるみたいだね.

ここで少し改良を加えてみる.
OpenGLESのAPI呼び出しを試してみた.

ソースコードは感で書いてインテリセンスに任せたモノを使用しました.
当然,シェーダはnullptrなので動作しません.

CMakeList.txtの修正も必要っぽいです.
おそらく新規ファイルなどもここに追加かな?

target_link_libraries( # Specifies the target library.
        myapplication
        GLESv3 // これを追加

        # Links the target library to the log library
        # included in the NDK.
        ${log-lib})

コンパイル通って実行できたのでヨシッ!!!


考察

C++とOpenGLESでAndroidアプリ開発したかったけど,これならJavaでやった方が早そう.
それか,Visual StudioのNative C++でaab出力の方法を探した方が良さそう.


まとめ

公式推奨の方法が色々な意味で一番だと思いました.
それ以外は修羅の道を歩む覚悟が必要なので,面倒くさがりはやめた方が良いと感じます.

映画・ドラマ・アニメの感想(2021/08版)

こんにちは

プライム会員登録してから,週末に映画を見るのが楽しみになってます.

今回は2021年の8月に見た映像作品の感想についてです.
全体的に雑感想です.


悪魔のいけにえ

有名なホラー映画です.

Dead by Daylight(DbD)ってゲームをよくプレイするのですが,その中に出てくる殺人鬼のカニバルについて知りたくて見ました.
ゲーム中でチェーンソーで猛威を振るっているカニバルことレザーフェイスが出てきます.
DbD好きなら元ネタが沢山あるので楽しめると思います!

昔の映画なのでいろいろ思うことはありますが,今でも楽しめる内容だと思います.


死霊館

呪われた家をお祓いする映画です.

悪魔祓いがテーマですね.

死霊館(字幕版)

死霊館(字幕版)

  • べラ・ファーミガ
Amazon


アナベル死霊館の人形

実際に存在する呪いの人形をテーマにしたホラー映画です.

人形ホラーで有名なチャイルドプレイとは違った方向性の恐怖です.
アナベルの方が薄気味悪さ度が高いです.

おぞましさを求める人におススメ!


アナベル 死霊博物館

実在するオカルト博物館をテーマにしたっぽい感じのアナベル映画.

お化け屋敷感があっていい感じに楽しめました.
動的な怖さに入ると思います.


エスター

サイコホラーに分類される映画です.

養子として迎え入れた少女が色々問題を引き起こします.
ネタバレが致命的なので事前情報なしで見ると楽しめます.

考察が好きな人におススメです.
(家族で見ると「ウッ」ってなるシーンがあるので一応注意)

エスター (字幕版)

エスター (字幕版)

  • ベラ・ファーミガ
Amazon


IT/イット THE END “それ”が見えたら、終わり。

有名ピエロのホラー映画です.

IT初見です.
初見でも面白いですが,シリーズ全て見てからのほうがより楽しめると思います.

プライム会員で見れるITはこれだけでした.
他は有料なので注意.


バイオハザード ヴェンデッタ

バイオの3Dモデル映画です.

時系列的には6と7の間かな?
クリスとレベッカの共闘が見られ,レオンはいつも通りです.


高速ばあば

日本産ホラー映画です.

1時間ほどの短めの映画でしたが,面白かったです.
フフってなりました.


ゆるい

10分ぐらいのドラマです.

よくわからないゆるキャラが暴走するドラマです.
最初はフフフってなりましたが,連続で見るとしんどいものがありました.

1週間に1話ペースで見ると良さそうです.

リンクがいい感じに貼り付けられなかったので公式Twitterで.

twitter.com


サイレントヒル

名作ゲームの実写映画ですね.

実写化ということで不穏な空気を感じましたが,面白かったです.
原作を知らなくても楽しめます!


サイレントヒル リベレーション

サイレントヒル映画の2作目ですね.

前作の続きから始まり,今作の主人公は成長した娘です.
ロビー君も出てきます.


ジグソウ: ソウ・レガシー

ソウ作品初見でした.

この作品は過去作視聴済み前提の作りだと思います.
完全所見の自分はよく分からず置いてけぼりを喰らいました.

過去作を知っていると楽しめそうなので,いつか見てみたいです.
(「選択は君次第だ」のセリフがあって「あぁ~」ってなった)

スプラッター映画なので苦手な人は注意!


リング

有名作品ですね.

貞子のやつです.
途中までは「ほーん」って感じでしたが最後にウヒャーってなりました.

ホラーっぽくないと思ったらホラーで面白かったです.


らせん

リングの続編です.

ホラーなのかなって思ってたらSFでした.
家族で見ると気まずくなると思います.


映画 けいおん!

けいおん!の映画ですね.

アニメは履修済みだったけど映画は未履修だったので見ました.
感動した😂

自分が中学生の時に流行してましたが,
ガラケーが出てきて歳を取った事を実感して絶望しました.

青春時代はあっという間ですね.


コードギアス 復活のルルーシュ

みんな大好きコードギアスの映画です.

ルルーシュは復活させない派だったのですが,結局見てしまいました.
復活してもいいかと思える面白さでした.

映画3部作の続編なのでアニメしか見ていない人は注意.


フレディ vs ジェイソン

化物VSシリーズです.

両者ともゲームでしか知らず,原作未履修でしたが楽しめました.
正直おバカ映画だと思っていましたが,内容は良かったです.


まとめ

8月なのでホラー映画ばかり見てました.
多分9月以降もホラー映画をメインに見てると思います.

問題のあるC++コードについて

こんにちハロ

今回はCEDEC2015で話題になったCoverityクイズについての記事です.

今更な内容ですが,見たときに直ぐに解けなかったので備忘録として残しておきます.


参考文献

この記事の元ネタです.
別の調べ物をしていた時に発見しました.
ota42y.com

同じ内容のプログラムです.
tanku.hatenablog.jp


問題

問題のバグが潜んでいるソースコードに検証を追加したもの.

実行結果

0: 0, 0, 0
1: 0, 0, 0
2: 0, 0, 0
3: 0, 0, 0
4: 0, 0, 0
5: 0, 0, 0
6: 0, 0, 0
7: 0, 0, 0
8: 0, 0, 0
9: 0, 0, 0

0: 0, 0, 1
1: 1, 2, 2
2: 3, 3, 4
3: 4, 5, 5
4: 6, 6, 7
5: 7, 8, 8
6: 9, 9, 0
7: 0, 0, 0
8: 0, 0, 0
9: 0, 0, 0

問題点

添え字と同じ数値をメンバ変数x,y,zに代入したいのに,暗黙の型変換(アップ・キャスト)によってアドレス位置がずれてしまった.

本来はこうなってほしい↓.

0: 0, 0, 0
1: 1, 1, 0
2: 2, 2, 0
...

図解

f:id:lambda410:20210815135204p:plain

解決策

横着せずに1つずつ処理する(参考文献とほぼ同じ).
根本的に解決したい場合は,参考文献を参照してください.


メモリ構造

Coverityクイズだけでは薄いので,クラスのメモリ構造について簡単な検証をして見ました.
特に解説はないですが,クラス配置ついてなんとなく理解が深まった気がします.

sizeof
int        : 4
base       : 8
derived    : 12
base_h_f   : 8
derived_h_f: 12

base_class address
    base  : 0x7ffcc71ede30
    base.x: 0x7ffcc71ede30
    base.y: 0x7ffcc71ede34

derived_class address
    derived  : 0x7ffcc71ede20
    derived.x: 0x7ffcc71ede20
    derived.y: 0x7ffcc71ede24
    derived.z: 0x7ffcc71ede28

base_have_func address
    base_h_f        : 0x7ffcc71ede10
    base_h_f.x      : 0x7ffcc71ede10
    base_h_f.y      : 0x7ffcc71ede14
    base_h_f::func  : 0x4008a2

derived_have_func address
    derived_h_f        : 0x7ffcc71ede00
    derived_h_f.x      : 0x7ffcc71ede00
    derived_h_f.y      : 0x7ffcc71ede04
    derived_h_f.z      : 0x7ffcc71ede08
    derived_h_f::func  : 0x4008a2
    derived_h_f::funcX : 0x4008d2

まとめ

C++は奥が深い.

「Effective C++ 第3版 -プログラムとデザインを改良するための55項目-」を読んだ

こんにちハルマゲドン

「Effective C++ 第3版 -プログラムとデザインを改良するための55項目-」を読んだ備忘録です.


Amazon

内容

C++でプログラムを書く時のテクニックをまとめたもの.
非常に濃い.

対象

C++を仕事に使用している人.
C++入門後の参考書を求めている人.
C++を理解したい人.

「入門書」ではないです.


要約

イントロダクション

・「プログラミング言語の基礎を学ぶこと」と「効率的なプログラムを設計・実装すること」は全く別のこと.
・この本はC++のリファレンスではない.
 プログラムやデザインを改良するアドバイスをまとめたもの.
・CとC++のどちらのものが使用されるかはインクルードヘッダによって決まる.
 C: size_t
 C++: std::size_t
・explicit
 コンストラクタの暗黙の型変換を使用できなくする.
・未定義動作
 怖い.
・コードの「クライアント」
 コードを使う「コード」や「プログラマ」を意味する.
 クライアントのことを意識しよう.

第1章 C++に慣れよう

C++のサブセット
 C: 大部分はCから来ている.
 オブジェクト指向: C++における「クラス付きC」.
 テンプレート: ジェネリックプログラミング,TMP.
 STL: STL独自のコンベンションに従おう.
プリプロセッサよりコンパイラを使おう.
 #defineは数値に置換される.
  コンパイルエラー時にシンボルが出ない.
  -> const定数に置き換えよう.
 定数の使用.
  クラスで使用する定数はstatic.
  ヘッダで宣言,ソースで定義.
 #defineにはスコープがない.
 enumハック
  宣言時の初期化が拒否られたときに使用.
  古いコンパイラ対策.
 #defineマクロよりインライン関数テンプレート.
・const
 「変更ダメ」の明示化.
 operatorのconst.
  (ab) = c; の禁止.
  if ((a
b) = c) の防止.
 mutableキーワード.
  constメンバ関数内で書き換えたいときに使用.
 「ビットレベルの不変性」
  コンパイラのconstの扱い.
  「論理的不変性」を保証するコードを書こう.
 非constメンバ関数内でconstメンバ関数呼び出し.
  コードの重複を避ける.
・オブジェクトは初期化しろ.
 自動的に保証されない.
 コンストラクタによる初期化.
  コンストラクタ内での初期化は「代入」.
  初期化は「メンバ初期化子リスト」.
   デフォルトコンストラクタに仕事に関係.
  デフォルトコンストラクタ使用時にも明示的に初期化する.
 初期化の順番は超大事.

第2章 コンストラクタ,デストラクタ,コピー代入演算子

C++が自動で書き,自動で実行するもの
 デフォルトコンストラク
 コピーコンストラク
 デストラク
 コピー代入演算子
コンパイラが自動生成することを禁止する.
 望まない自動生成は禁止しよう.
 privateに隠蔽する.
 Uncopyableクラスを作成し,継承する.
・仮想デストラク
 仮想デストラクタを持たない基底クラスのポインタにdeleteは未定義.
 仮想関数は「派生クラスでの実装のカスタマイズ」.
 理由のない仮想デストラクタは良くない.
  クラスが仮想関数を持つときに使用する.
 仮想デストラクタを持たないSTL
・デストラクタから例外を投げない.
 クライアントが問題対処できるデザインにする.
・コンストラクタやデストラクタ内では仮想関数を呼ばない.
 実行されるのは「その時のオブジェクト型」のもの.
 バグになりやすい.
・代入演算子は*this参照を返すようにする.
・operator=実装は自己代入に備える.
・コピー時はオブジェクト全体をコピー.

第3章 リソース管理

・リソース管理にオブジェクトを使う.
 リソース確保したら管理オブジェクトに渡す.
  RAII.
 リソース管理オブジェクトは解放時にデストラクタを使う.
 参照カウント型スマートポインタ: RCSP
・リソース管理クラスのコピー振る舞いはよく考える.
 Mutexの扱い.
  RAIIオブジェクトの扱い.
  リソースへの参照カウント.
  管理リソースをコピー.
  管理リソースの管理者を変更.
・リソース管理クラスはリソースへのアクセスを付ける.
 RAIIオブジェクトは生リソースにアクセスする必要が多々ある.
  管理リソースへのアクセス提供.
 明示的「get()」か非明示的「暗黙の型変換」.
・対応するnewとdeleteは同じものを使用.
 単独オブジェクトと配列オブジェクトは扱いが違う.
 new[ ]を使用したらdeleteも[ ].
・newで生成したオブジェクトのスマポ私は独立ステートメントで行う.
 例外対策.

第4章 デザインと宣言

・インタフェースは正しいときに使いやすく,間違ったときに使いにくく.
 インタフェースに一貫性を持たせ,組み込み型と同じ振る舞いをするようにすると良い.
 誤用対策には,新しく型を定義し,オブジェクトの値を宣言すると良い.
  また,クライアントにリソース管理を任せない.
 デリータの設定.
・クラスのデザインを型デザインとして考える.
 クラスのデザインとは型のデザイン.
 ★クラス設計時にこの項目を見返す.
・値渡しよりconst参照渡し.
 スライス問題.
 STLの反復子,関数オブジェクトに注意.
・オブジェクトを戻すときに参照を戻さないこと.
 存在しないオブジェクトの参照戻しに気を付ける.
・データメンバはprivate宣言.
 protectedはpublicよりカプセル化を進めるものではない.
メンバ関数より,メンバ・friendでない関数を使用する.
・全引数に型変換が必要なら,メンバでない関数を宣言する.
・例外を投げないswap.
 テンプレート特化.
 自作型のswapが非効率な場合,メンバ関数としてswapを作る.

第5章 実装

・変数の定義は可能な限り先延ばしにする.
・キャストは最小限にする.
 const_cast: オブジェクトのconst性を取り除く.
 dynamic_cast: 安全なダウンキャストに使用.
 reinterpret_cast: 実装依存の低レベルキャスト.
 static_cast: 暗黙の型変換.
 新しいスタイルのキャストは目的が限定されている.
  コンパイルエラーになるのでわかりやすい.
 dynamic_castの使用.
  遅い.
  使用時は設計ミスの可能性がある.
・オブジェクトの内部データへのハンドルを戻さない.
 ハンドル: 参照,ポインタ,反復子.
・コードを例外安全にする.
 例外安全.
  リソース漏れがない.
  データ構造が無効状態になることを防ぐ.
 保証.
  関数が例外に対し基本保証.
  関数が例外に対し強い保証.
  関数が例外に対し投げない保証.
・インラインを良く理解する.
・ファイル間のコンパイル依存性を最小限にする.
 参照やポインタで十分ならオブジェクトの使用を避ける.
 クラスの定義でなく,宣言依存なコードを書く.
 宣言と定義でヘッダを分ける.
 implとpimpl.

第6章 継承とオブジェクト指向

・public継承はis-a関係を表すようにする.
 public継承はis-a関係を意味する.
 全ソフトウェアにとって利用的なデザインはない.
 基底クラスに適用可能なものは,派生でも適用可能にする.
・継承した名前を隠蔽しない.
 using宣言の利用.
・インタフェースと実装の継承を区別する.
 protectedにデフォルト動作を作成する.
 public継承においては,派生クラスは基底クラスのインタフェースを全て継承.
 純粋仮想関数は,インタフェースのみの継承を意味.
 仮想関数は,インタフェースとデフォルトの実装の継承を意味.
・仮想関数の代わりになるもの.
 NVI: 非仮想インタフェース.
 仮想関数を置き換える.
  関数ポインタ
  tr1::function
  別クラス階層の仮想関数.
・非仮想関数を派生クラスで再定義しない.
・継承した関数のデフォルト引数を再定義しない.
 デフォルト引数: 静的結合.
 仮想関数: 動的結合.
コンポジションでhas-a, is-implemented-in-terms-of関係を作る.
・private継承は賢く使う.
 private継承はis-implemented-in-terms-of関係を意味する.
 EBOが働くことがある.
  ライブラリ開発者には重要かもしれない.
・多重継承は賢く使う.

第7章 テンプレートとジェネリックプログラミング

・暗黙のインタフェースとコンパイルポリモフィズムを理解する.
・typenameの2つの意味.
 テンプレート内でネストされた依存型名にはtypenameを使用する.
 テンプレートパラメータ宣言には,classとtypenameがある.
・テンプレート化された基底クラス内の名前へのアクセス.
・パラメータに依存しないコードはテンプレート外へ.
・すべての互換型を受け取るためにメンバ関数テンプレートを使用する.
・型変換させたいならメンバでない関数をクラステンプレート内で定義する.
・型情報に関してはtraitsクラスを使用する.
テンプレートメタプログラミングを意識する.

第8章 newとdeleteのカスタマイズ

・new-handlerを理解する.
・どういうときにnewとdeleteの定義を書くか理解する.
・自前new, deleteを用意するときはコンベンションに従う.
・プレースメントnewの定義時はdeleteも定義.

第9章 いろいろな事

コンパイラの注意を払う.
・TR1を含む標準ライブラリに慣れる.
・Boostに慣れる.


感想

const辺りの内容しか理解できませんでした(ここも怪しい).

ただ,この本はC++の基礎知識の塊なので,経験を積んでから読み返した時を楽しみにしてます.

「ゲームプログラマになる前に覚えておきたい技術」を読んだ

こんにちはかいこうさく

この記事は「ゲームプログラマになる前に覚えておきたい技術」を読んだ感想と備忘録についてです.


Amazon


内容

キャラ制御,グラフィック,メモリ管理などゲームプログラムに必要な知識がまんべんなく解説されています.
内容は古いらしいですが,ゲームプログラムの基礎が網羅されているので学習にはおススメです.

対象

新人ゲームプログラマゲームプログラマを目指す学生など


要約

Part1. 2次元のゲーム

Chapter1 はじまりのゲーム

倉庫番を題材としたゲーム開発のイントロ
・変更する気のない変数はconstをつけよう.
グローバル変数は接頭辞として[g]をつけるなど,変数名に気を使う.
・列挙型を使えるときは使おう.
・newしたらdeleteする癖をつける.また,delete時にポインタを初期化する.
プログラマ以外にもわかるようにデータを作成する. ・C++の補足(namespace,template,const,2種のdeleteなど) ・プログラムが大きくなるほどconstなどの安全装置は有効に働く.
・const char x[] = "abc"とconst char* x = "abc"の違い.
・やろうと思えばポインタを使ってclassのprivateなメンバにアクセスできる(?).
・参照はポインタの危険な扱い方を防ぐ効用がある.
・ポインタ返しと参照返し

Chapter2 点から始める2Dグラフィックス

Visual StudioのDebug/Release設定は「すべての構成」を選択すると楽.
・newしたらdeleteを徹底しろ(RAII的な).

Chapter3 描いた絵を使う

・const_castを使用する場合は設計を疑おう.
C言語のキャストはなるべく使用しない(キャストはバグになりやすく,検索に引っかからないのは面倒なため).
・アライメントの問題に気を付ける.
・「人間は間違えることが可能な状況であれば必ず間違える」ことを念頭に置く.
・単純な高速化手法として,可能ならばループ中の計算をループ外で行う.
・中途半端に透ける-->アルファブレンド
・アルファブレンドは線形補完で実現可能.
・適切なインクルード
 実体:クラス「定義」
 ポインタ:クラス「宣言」
 1. インクルードガード
 2. (可能ならば)ポインタの変数を使用
 3. 必要とするヘッダをインクルード
・式変形の段階で高速化を意識する.
 アルファブレンド

Chapter4 リアルタイムなゲーム

・固定フレームレート
 遅いときに速くできない(一番遅い秒数に合わせる).
 再現性がある.
・可変フレームレート
 処理落ちがゲーム進行速度に影響を与えない(?).

Chapter5 かんたんなシーケンス遷移

・ASSERT
・「if-elseが10個並んだらそのコードを書いた人はヤバい」
 なんとなくわかる.
・階層型シーケンス遷移でゲーム画面を管理
 Stateパターンに近いものを感じる.

Chapter6 文字の書き方

・作成しているゲームが面白いかはすぐ判断できたほうが良い.
 素材は後でいいから速く実装する.
・シングルトン
 1. グローバル変数の危険を軽減する.
 2. グローバル変数を使用したい.
著作権
 大事.

Chapter7 はじめてのアクションゲーム

・ゲーム遷移
 状態遷移図であらかじめ図示しとくのが良いと思った.
・処理の共通化
 1人用と2人用で同じ機能(ポーズ画面など)を共通化すると楽.
  ただし,ポーズ機能が違うなどが発生すると面倒になるので,一長一短.
  柔軟性を持つことが大切.
・ゲーム開発は調整とテストの繰り返し.

Chapter8 平面の衝突判定

・あたる寸前で止める
 1. 何回かに分けて判定
  遅い.
 2. いつ当たるか計算
  すでにめり込んでいる状態が面倒.
 3. めり込んだら元に戻す.
・当たり判定を小さくする.
 Unityのコリジョンのイメージ.

Chapter9 いろいろな入力装置

・ライブラリの隠蔽
 ライブラリ開発者は使用用途を知ることができない.
  必要な機能はすべて準備.
  適切に隠蔽し,無用なバグや使用を防ぐ.

Chapter10 少しマシなシーケンス遷移

・ステートマシンでシーケンス遷移する方法(?)
・dynamic_cast
 ダウンキャストは遅い
・言語機能は無理してまで使用する必要はない.
 必要になったら使用する.
・継承についての補足
 仮想関数の詳細(実装寄り)
・継承の目的
 1. 派生を隠し継承だけを教える.
  中身は関係ない.
 2. 同じコードを何度も書く必要がない.
  比較的類推しやすい.
 3. 派生を使用する人が理解しやすい.
  基底側である程度実装すれば派生側は楽.

Chapter11 音を鳴らす

・音源ファイルの処理方法について.

Chapter12 回す,伸ばす,動かす

・回転
 補完しないと点が出現する.
 線形補完と2次元補完.
・拡大縮小
・アフィン変換
・ラスタライズ

Chapter13 ハードウェアのパワー

GPUは偉大
・ハードウェアは最強だが,自力で実装する力もあったほうが良い.

Part2. 3次元のゲーム

Chapter14 立体を描く

・Zソート
 z値の大きい順にソート.
・Zバッファ
・透視変換
・座標変換
・Zバッファ精度問題

Chapter15 ライブラリの作り方

XMLでデータ管理
・ライブラリは.libにまとめると良さそう.

Chapter16 XMLモドキを読む

・std::stringは遅い.
・文法の自由度を下げればデコード側は楽.
 そうだね.
・字句解析
 状態遷移図.
・最初は速度は気にしなくていい.
 慣れてきたら気にしよう.

Chapter17 遅くないコードを書くために

・計算量/オーダ
スループット
 単位時間当たりの処理能力
・レイテンシ
 結果を見るまでの待ち時間
・メモリの問題
・キャッシュ
・配置newとoperator new()
・std::set
 赤黒木
・「速度が必要とされる度合いに応じて適切なコードを書く」

Chapter18 立体の衝突処理

平方根
 割と扱いが面倒.
・三角形と線分の交差判定

Chapter19 ロボファイトの設計

・フロントエンド
 レーダ的な奴.

Chapter20 光が当たるということ

・レイトレース
・光源処理の高速化

Chapter21 キャラクターが動き出す

・モデルビュー射影行列
木構造による親子関係の実装
・ホーナー法
・Inverse Kinetics(逆動力学)

Part3. 売り物への道

Chapter22 遅くない衝突検出

・空間分割による衝突検出
・k-d tree
・CPU命令とキャッシュ

Chapter23 ローディング

・ファイル結合による高速化
・圧縮による高速化
・LZ77
・マルチスレッドによる非同期処理
・中身を見せないための結合と圧縮

Chapter24 floatの使い方

・数値が大きいほど次の数値までの幅が大きくなる.
・誤差
・ゼロの扱い
・無限大:Inf
・非数:NaN
・非正規数

Chapter25 付属ライブラリの本番仕様

・シングルトン
 Impl
・標準のrand()
・Thread
 Semaphore, Mutex, Event

Chapter26 バグとの付き合い方

・論理バグ
 作成しようとしたものが間違い,作成しようと思った物と違うものを作成する.
 「プログラムは書いた通りにしか動かない」
・技術バグ
 プログラム・ハード的に間違い.
 無知によるミス.
・処理落ち
 遅い.
・メモリ溢れ
 メモリ使用効率が悪い.
・コメント
 三日後は他人.
C++的にはアンダーバ始まりの変数はどうなのさ?
・試作品は捨てろ
 後々悲劇を生みやすい.
・メモリ解放忘れ
 crtdbg.h

Chapter27 もっと先へ

いろいろな参考文献が書いてある.

感想

C++や数学の知識が足りていないことを再認識できた本でした.

流し見で読みましたが,今度は項目別にじっくり読みたいと思います.