ゲームプログラム

RPGにおけるマップデータの制御

http://gamdev.org/w/?%5B%5BFF%C9%F7RPG%A4%F2%BA%EE%A4%EC%5D%5Dを参考に、 RPGもどきをチクチク作ってます。 とりあえず、Level8までクリアーしました。 (あ、でも、スクロールとマップエディタは作ってませんね…(´Д`; その過程でなんとなく気が付い…

移動量は極座標

はじめに 今回は初心者向けの内容です。 移動量の定義をするには、「極座標」が向いている、 ということを理解してもらえれば、と思います。 デカルト座標の欠点 今まで良く考えずに、こんな構造体を定義していました。 /** * 2次元ベクトル */ struct Vec2…

スコア表示処理

今回もなんてことはないですが…。 例えば、1234を画像で表示する場合には、 こんな風に求めます。 千の位:1234÷(10^3)=1 百の位:1234%(10^3)÷(10^2)=2 十の位:1234%(10^2)÷(10^1)=3 一の位:1234%(10^1)÷(10^0)=4 DirectXのソースコードに落とすと…

メッセージウィンドウ表示クラス

メッセージウィンドウ表示クラスとは、 ちょっとしたメッセージを表示したい場合や、 アドベンチャーパートで、会話メッセージを表示したい場合に、 表示するウィンドウのことです。 まだ、実装はしていないのですが(´∀`; たぶん、こんな感じになるのでは…

全体マップの表示

全方向スクロールのゲームや、RPG、SLGに必要となってくる 全体を見渡せる「全体マップ」。 これって、 「なんとなく作るのめんどくさそう…」 って思うかもしれませんが、 意外と簡単に作れてしまいます。 というのは、やり方は、 実際扱っている座標×…

3Dゲームの視野

3Dゲームって、どうしても視界が狭くなるから、 画面比率を「横:縦=2:1」ぐらいにすると、 視野が広くなって、ちょうどよいのではないだろうかと思うのですけど、 あまり一般的じゃないかもしれないですね…。

回り込みのロジック

プレイヤーの周りをぐるっと回りながら近寄るロジックを思いつきました! (まあ、これもなんてことはないですが…(´Д`; ただ、私のゲーム上でしか使えないロジックかもしれません。 というのは、敵の移動はx,z平面で移動するようにしかできていないからで…

OBBによる当たり判定

はじめに 境界箱による当たり判定は、回転した場合に使用することができません。 そこで考えられた(かどうかは分からないのですが)のが、OBBです。 OBBを使うことで、回転した箱同士の当たり判定を行なうことが可能になります。 (※参考:ゲームコーディン…

ベクトルを使った誘導弾の移動量算出

昨日、クマの頭を飛ばして、自動で戻ってくる処理を作るにはどうすればいいのかな〜、 などと考えていたときに思いついた処理を。 …まあ、ちゃんとベクトルを理解していれば、なんてことはないですが…(´Д`; 自機の座標をP, 弾の座標をQとします。 自機ま…

Zバッファの欠点

Zバッファが有効になっていると、アルファブレンドでポリゴンを重ねたときに、 後ろが消えてしまいます。 これを解決するには、Zバッファを無効にして、 描画順を自分で制御します。 ビルボードなどのカラーキー付きテクスチャについても同様です。

3Dゲームの最適化

DirectX9.0 3Dアクションゲーム・プログラミング―DirectXを使った3Dアクション・ゲーム作成のノウハウ (I・O BOOKS)に色々書いてあったので、メモ書き。 カメラ視点に入らないオブジェクトの処理をしない(可視判定) 手前にあるオブジェクトから描画する(…

スクリプト読み込みツール

NekoCannonのスクリプトを読み込む処理を作ってみました。 ただ、独自の実装のため、微妙に動作が異なりますが…。 例えば、 {key1=value1,key2=value2,key3=value3},とすると、key3の値を読み込みません…。 このように、value3の後ろに「,」をつけると読み込…

猫でも分かるタスクシステム2

タスクシステムの特徴 まず、タスクシステムの特徴は、以下の3つあります。 データの定義 データの管理 振る舞いの定義 これらを効率良く扱うことができるのが、タスクシステムです。 さて、ここでは、「タスクシステム進化論」を提唱します。 それは何かと…

猫でも分かるタスクシステム

今日も、初心者向けの内容です。 タスクシステムっていうのは、 市販ゲームのような規模の大きいプロジェクトにおいて、 ゲームを効率良く開発するためのシステムです。 なので、趣味でゲームを作るような場合には必要ありません。 むしろタスクシステムは、…

ゲームプログラム図解

今日は、ゲームプログラム初心者向けの内容です。 ゲームプログラムとは何であるかを図解してみました。 ゲームプログラムという枠の中にあるものが、 作るべきものです。 ゲームプログラムを始めるには、とりあえずは、 「データの入力」と「データの描画」…

スプライト構造体

最近、不真面目な更新が多いので、 今日は真面目路線で、私が使っているタスクシステムもどきの解説をします。 C++でやるなら、本当ならクラスでやるべきなのですが、 モノグサな私は、構造体でスプライトを定義しています。 (…不真面目じゃん) まずはユー…

ビットマップ読み取りクラス公開

CannonCatや3DRPGプログラミング (C magazine)で、 ビットマップをマップデータとして使っているのを見て、 ひょっとしたらあると、便利かと思い公開。 地形パターンが少なければ、きっとビットマップの方が楽なはず。 24bit専用ですが、お好きに使ってくだ…

シーン内の状態遷移

実際にゲームを作ってみると、 シーン内の状態遷移が意外に難しいことに気がつきました。 キー入力、タイマー更新、状態遷移をまたがるオブジェクトなど、 グローバルなフラグや変数が増えるにつれ、だんだんぐちゃぐちゃな作りに…。 まあ、簡単にゲームを作…

DirectXFramework0.2

前とあまり変わらないけれども…。 DirectMusicだけで、BGMと効果音再生を担当できることが分かったので、 (いまさら?) DirectSoundクラスは消滅。 CTextureやCOggの管理は、STLのmapでDirectGraphicsとDirectMusicクラスが管理。 mapのkeyはenumでグロー…

ゲーム作成に必要な要素技術

独断と偏見でチョイスです。 要素技術 必要なもの タスクシステム 双方向リスト・関数ポインタ スクリプトエンジン プラグインシステム・言語解析 3D数学(基本) ベクトル・行列・クォータニオン 3D数学(応用) 3Dエンジン幾何学・レイトレーシング・可視…

描画処理とデータ処理の分割(Observerパターン)

はじめに 今回はゲームシステムの構築の核となる、Observerパターンについて解説します。 なぜObserverパターンが必要になるのか? 例えばゲームを作ろうとすると、たいてい以下のような処理を書くことになります。 // メイン実行クラス class CMain { priva…

ゲーム開発におけるデザインパターンまとめ

id:kenmo:19770214#1121301780 何かの役に立つかもしれないと思い、まとめました♪ →リンク集も追加しました。

当たり判定(3D)

あまりよく分かってないので、紹介だけ。 3Dの場合には、以下の3つの方法があります。 バウンディングスフィア(球) バウンディングボックス(箱) レイ交差(光線) それぞれのメリット、デメリットを書くと、こんな感じです。 名称メリットデメリット バ…

当たり判定(2D)

はじめに 今回は、当たり判定の作りかたを解説します。 2Dゲームで当たり判定を作る場合は、 円 矩形 という2つのパターンがあります。 円の場合 メリット 円を当たり判定に使うと、とにかく「簡単」です。 必要な情報量や処理がとっても単純明快です。 や…

テトリスのブロックパターン

唐突ですが、テトリスネタです。(´ー`; 1つのブロックを表現するには、4×4の空間が必要になります。 それは、テトリス棒が4ブロック分あるからです。 それぞれのブロックパターンをあげておきます。 □□■□ □□■□ □□■□ □□■□ □□□□ ■■■■ □□□□ □□□□ □□□□ □■…

汎用フィールドクラス

最近、何時間もかけて更新しているので、 今日は軽めのネタで。 例えば、 テトリスやリバーシなどのパズルゲームや、 SLGやRPGでのマップなどを作る際には、 必ず2次元のフィールドが必要となります。 そういった場合に使える、汎用のフィールドクラ…

DDA

はじめに DDA(デジタル微分解析器)とは、画像処理で「線分を高速に描画」するアルゴリズムのことです。 2点を指定して直線を引く場合、平均変化率(傾き)を求める必要があります。 傾きはほとんどの場合、実数になりますよね。 しかし、昔のPCは実数演算…

麻雀のアルゴリズム1

麻雀を作るために必要な処理は、 麻雀のルールの実装 CPUの思考ルーチン となります。 まあ、ゲームの本質は「ルール」と「遊び相手」ですから、 当たり前といえば当たり前なのですが…。 とりあえず、CPUの思考ルーチンは後回しです。 そもそも、ルールが確…

ゲーム作成に役立つオブジェクト指向7

はじめに 今回はFacadeパターンです。 Facadeパターンは「シンプルな窓口」を提供する方法です。 簡単に言えば、 「複雑な操作・手順」を 「簡単」に行えるようにしたラッパークラス、 といえます。 クラス図 これは、DirectXのAPIに対してFacadeパターンを…

ゲーム作成に役立つオブジェクト指向6

はじめに 前回のInterpreterパターンは、 そのままではゲームに使うことはできません。 それは、 Nodeクラスに、キャラの行動パターンを記述しなければならない からです。 それを回避する方法がVisitorパターンです。 Visitorパターンとは? Visitorとは、…