タグ

ブックマーク / marupeke296.com (5)

  • その5 反射ベクトルと壁ずりベクトル

    ホーム<ゲームつくろー!<衝突判定編 基礎の基礎編 その5 反射ベクトルと壁ずりベクトル ゲームで良くあるのが壁ずりです。その名の通り壁に当たった時にキャラクタが壁面に沿ってずりずりと動く様を言います。物理的に正しくは無いのですが、プレイヤーに極自然に「端・障害物」を感じさせることができます。 ① 壁ずりベクトルの求め方 壁ずりでポイントなのは壁ずりする方向(壁ずりベクトル)です。壁に当たった時に強制的に移動させられる方向です: 上の赤いベクトルで表した壁ずりベクトルは壁に対して平行になっています。このベクトルを算出するには「当たった場所の法線」が必要です。 平らな壁の場合、法線ベクトルは多分既知でしょう。壁でなくとも衝突図形であれば、大体衝突点さえわかればその点での法線は求められます。 衝突点での法線ベクトル、壁への進行ベクトルがあれば壁ずりベクトルを計算できます。以下の図を御覧ください

    uechoco
    uechoco 2016/08/01
    衝突判定、壁ずりベクトル、反射ベクトル
  • その18 最低限のカスタムメモリアロケータ

    ホーム < ゲームつくろー! < C++踏み込み編 その18 最低限のカスタムメモリアロケータ メモリアロケータは、「メモリ欲しいんだけど~」という要求に応えてメモリを分け与えてくれる人です。C言語だとこれはmalloc関数、C++だとnew関数がその役を担ってくれます。カスタムメモリアロケータは、その機能を自前で実装した物を指します。 「え?何でそれを自前で実装するの?」と不思議に思うかもしれません。例えば、コンシューマ機での開発ではおおよそメモリアロケータを換装します。それはメモリ確保と解放の速度、耐久性、詳細なデバッグ情報を得るためと移植性を高めるためです。PC用のゲームを作る場合も、自分がどれだけのメモリを消費しているのか、メモリリークはしていないか、誰がいつどこでメモリを確保したのか、そういうメモリのデバッグ情報を見られるというのか安定したゲーム開発に必要になってきます。そういう

    その18 最低限のカスタムメモリアロケータ
  • C++踏み込み編

    ホーム < ゲームつくろー! < C++踏み込み編 C++踏み込み編 基礎はやっぱり大切です。 曖昧・うろ覚えはありませんか? 「これって何だろう」と疑問に思っている事、ありません? ここでは、それらについて踏み込んで解説してみます。 思いつきと行き当たりばったりの更新になるでしょうが、 きっと役立つ備忘録です。

  • その12 イテレート中のSTLのlistから要素を安全に削除する方法

    ホーム < ゲームつくろー! < Programming TIPs編 その12 イテレート中のSTLのlistから要素を安全に削除する方法 STLのコンテナは「イテレータ」によって要素を取り出します。この時良くあるのが「ある要素をチェックして、必要が無くなった場合はリストから削除する」という作業です。例えば描画オブジェクトのリストからもういらなくなったオブジェクトを除く時などこの作業が必要になります。 イテレート中のリストから要素を除く場合、ちょっと注意しないと思わぬバグが誘発します。この章ではイテレート中のリストから要素を除く方法をまとめます。まさにTIPsです(^-^;。 ① まともにやるとあっさりバグ 例として、int型のリストに0~9までの要素がこの順番で登録されているとしましょう。このリストをイテレートして「5」を取り除きたいとして、次のようなコードを書きました:

    uechoco
    uechoco 2014/05/18
    iterator、std::vector、std::deque、std::list、erase
  • Double Dispatch

    ホーム < ゲームつくろー! < デザインパターン習得編 Double Dispatch ~抽象オブジェクトがお互いを知れる!~ 例えば3種類のキャラクタ(A,B,C)がいたとします。AはBに合うとBをべようとし、BはAから逃げようとします。BはCに合うと笑い、CはBに合うと怒ります。CはAに合うと踊り、AはCに拍手を送ります。また同じ種族に合うと挨拶をするとします。いわゆるライフゲームですね。この3種類のキャラクタを世界に撒いてしばらく見ていると、どこかでお互いに出会う機会がやってきます。出会った時に各キャラクタは「Actionメソッド」でそれぞれの振る舞いをするとします。 Aのアクションは「挨拶をする、べようとする、踊る」です。これら具体的な行動をActionメソッド内で呼び出したいわけです。しかし、世界に撒かれているキャラクタは多分「Characterクラス」という抽象クラスでし

  • 1