ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

プロジェクト7

やっぱりVisual Studio

Visual Studioを使わずにMakefileでビルドしようかと思ったけど、やっぱり統合環境の便利なデバッガは捨てがたいので、Visual Studioで行くことに。

ソリューションとプロジェクト

自前ライブラリをすぐに新しいプロジェクトに組み込んで使えるようにプロジェクトファイルを作成中。 ところがソリューションファイルとかプロジェクトファイル、自動的に作成されるいくつかの設定ファイルなど、非常に分かりにくい。 こういうときMakefile…

一応の完成

サウンドも実装して、DirectXで実装していた自前ライブラリをSDLを使ったものへと移植できた。前作ったPongも若干の変更だけ動かすことができた。 あとはちょっとプロジェクトファイルの構成を直して、簡単に組み込めるようにしないと。 ライブラリは非常に…

サウンドの関数

サウンドはファイルを読み込んでIDを取得し、そのIDを使って再生を指示。そのとき再生したスロット番号を返し、停止や再生しているかの確認にはこのスロット番号を使うことにした。コードとしては次のような感じ。 int id; int slot; id = LoadWav("test.wav…

サウンドの実装

サウンドライブラリのインターフェースをテクスチャと同じように実装。しかし、サウンドの場合はサウンドデータだけではなく、再生するチャネルも扱わなくてはならない。これをどう実装するか悩み中。

サウンドへ

とりあえず、描画関係はDirectXを使っていた時とほぼ同様の機能を実装しおわった。 ということで、次はサウンド関連をSDLへと移行する作業。

描画のクリアその2

SDLにはサーフェスをクリアする命令がないと思っていたけど、SDL_FillRectという指定したカラーで矩形を塗りつぶすという命令があった。それで画面のクリアを実現できる。 わざわざクリア用のテクスチャを用意する必要はなかった。 ということでクリアカラー…

ライン描画

デバッグでコリジョンをチェックするためにラインを描画しようと思ったら、SDLにライン描画の関数が見当たらない。どうやらライン描画をする関数はないようだ。しかし、矩形を指定した色で塗りつぶす関数SDL_FillRectがあったので、これでラインを描画するこ…

描画順への対応

ちょっと直せばすぐに対応できるかと思ったけど、結構大幅な変更が必要だった。描画命令を登録していき、登録がすべて終わったら実際の描画処理を開始する。イメージとしてはOpenGLのディスプレイリストのような感じ。 リスト構造にしてZの値が並ぶような位…

描画のクリア

テクスチャの描画処理を行わなければ、てっきり描画されなくなるものと思いこんでしまっていた。DirectXの場合、クリアカラーを設定して毎フレーム最初にクリアされるが、SDLの場合、サーフェスに転送したイメージはそのまま。そういえばクリアする設定が見…

テクスチャ管理

半透明のテストのためにいろいろなテクスチャを扱っていたら、前のテクスチャ管理のシステムに不満が出てきたので、もっと簡単にテクスチャを扱えるように改良。 ファイル名を与えるとロードして、そのテクスチャのID番号を返すように変更。そのあとはその番…

半透明の描画

半透明がうまくいかなかった原因はサーフェスを表示フォーマットに変換する処理でSDL_DisplayFormatAlpha()を使わずにSDL_DisplayFormat()を使っていたからだった。 そりゃアルファチャンネルあっても半透明で描画できるわけがない。 これが原因だと分かるま…

半透明

どうも半透明の描画がうまくいかない。データによってはうまくいったように見えるものもある。根本的に半透明の部分を勘違いしているかも。ちゃんとドキュメントを読みなおそう。

テクスチャの描画

一応、読み込んだテクスチャの描画は出来たが、どうも半透明関連が正しく描画されていない。ドキュメントを見ると、どうやらアルファ関連の設定をしなくてはならないのだが、いろんな方法があり、いまいちまだよく分かっていない。

テクスチャファイルの読み込み

テクスチャファイルが正しく読み込めなくてエラーとなってしまった。 画像形式が対応していないのかなといろいろ試してみたところ、結局、VisualStudioのプロジェクトのプロパティでデバッグの作業ディレクトリを指定しておらず、テクスチャファイルの位置と…

テクスチャの読み込み

とにかく画面を出さないと、ということで、テクスチャの読み込み部分から移植開始。とりあえず高機能にすることはおいておいて、1枚でいいから読み込んで表示できるようにしよう。

キーボード処理

キーボードの判定部分を実装。 最初、SDL_GetKeyState()でキーボードの状態を取得してもまったく反応がなくてなぜだろうと調べてみたら、SDL_PoolEvent()でイベントの処理をやっていなかったのが原因。SDL_PoolEvent()でキーボードの状態を更新するとは知ら…

ウィンドウ作成

とりあえず、ウィンドウを作成。まだオブジェクトの描画部分は未実装。 なぜか今回からビルドしたら、次のwarningが。 warning LNK4098: defaultlib 'msvcrt.lib' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 Visu…

フレーム落ち時の処理

処理が重くてフレーム落ちしたときはどう対処しようか。 今の実装では何の対処もしていないので、フレーム落ちしたらその分単純に更新が遅くなる。 前回のフレーム待ちから何フレーム分かかったか取得して、その値を考慮して更新処理をすれば、描画の書き換…

終了処理

アプリケーションの終了処理で悩む。 もちろん、メインのメニューから終了を選んだ時は問題ないけど、ESCキーを押したときとか、ウィンドウのクローズボタンを押したときとか。どこで処理するのが一番すっきり実装できるだろうか。

引き続き作業中

とりあえず、ループは今の実装のままいくことに。

ループ作り

ループの作成中。ライブラリ側も修正しつつ、何パターンが試してみたが、なんかしっくりこない。どう実装するのがいいのか。

とりあえずループから

テクスチャやサウンドの修正は結構時間がかかりそうなので、まずはゲーム進行のループの部分から作業開始。

引き続き作業中

メインループをどう構成するか悩み中。

とりあえずコンパイル

とりあえずライブラリ部分のコンパイルが通るようになった。といっても、とりあえずDirectX関連でエラーとなってしまう部分をコメントアウトしただけ。 これからDirectXで実装していた部分をSDLで実装しなおさなくては。

エラー取り

引き続き、コンパイルが通るように修正中。

まだエラーだらけ

まず前のライブラリ部分のコードを今の環境に持ってきたのだが、DirectXに依存したコードが多くて、なかなかエラーが減らない。 とりあえずはコンパイルが通るようにしなくては。

テクスチャやサウンドの移行

テクスチャやサウンドはDirectXのものをそのまま利用していたので、SDLに移行するため書き直し。 結構書き直さなくてはならず、DirectX関連は一つの部分にまとめておくようにしておけばよかったと反省。

思ったより大変

すぐに移行できるかと思ったが、思ったよりも大変。 それだけDirectXのフレームワークを便利に頼っていたということか。

構造で悩む

DirectXのフレームワークのときは、それに沿った形で実装すれば良かったけど、今度はどうループを実装しようかとか、どこまでライブラリにしてどこからを各ゲーム固有で書くかという構造の設計でちょっと悩む。 でもこうやって設計とかで考えているときは結…