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

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

プロジェクト6

メモリリーク調査

アプリケーションを終了したしたときにVisualStudioの出力ウィンドウにメモリリークを検出したとのエラーメッセージが出る。その原因を調査中。 常に出るわけではないので、まずはメモリリークが出る操作手順を見つけることから開始。

タスクシステムの作り直し

どうも、タスクシステムがうまく動いていないようだ。 根本的に考え直して、設計しなおそう。

一から見直し

メモリリークの原因を調べるため、ちょっと間があいてしまったこともあり、一から見直し。

ヒープの破壊

いろいろテストしていたら、ブレークポイントが発生。 出てきたメッセージは「ヒープが壊れていることが原因として考えられます。」 メモリリークしてヒープの部分まで破壊してしまっているらしい。 単純な解放し忘れよりも厄介だなぁ、これは。

メモリリークその3

メモリリークの原因を調べたところ、とあるクラスのメンバ関数を呼び出すとリークすることがあることが分かった。しかし、そのメンバ関数内ではメモリを確保するような処理は行っていない。それどころかメンバ関数内の先頭でreturnするコードにしてもメモリ…

メモリリークその2

昨日のメモリリークしたときに表示される情報がなんなのかわかった。何のことはない、そのアドレスのメモリ内容が表示されているだけだった。DとかTとか、何らかの意味があるのかと思ったら、メモリの中身がアルファベットのコードになっているだけだった。 …

メモリリーク

DirectXのサンプルフレームワークを使っていると、アプリケーションを終了したときに確保したメモリがちゃんと解放されていない場合、メモリリークしたとエラーがVisualStudioの出力ウィンドウに表示される。 今作っているもので実際に出た例が次の通り。 De…

再開

去年の年末から止まっていたプロジェクト6を再開。 久しぶりにコードを見てみると、もうさっぱり。 自分が書いたソースも数か月たってしまうと、もはや他人のソース。 さっさと思い出さねば。

コリジョンの形状

コリジョンは矩形で行うことに決定。複雑な形状も複数の矩形を組み合わせればよいだろう。 他には距離、つまり円でも判定するのも用意しておくのも良いかもしれない。こっちのほうが負荷が少ないし。 そんなに複雑なゲームを作るわけではないから、とりあえ…

ゲーム内キャラクター

キャラクターを描画してカーソルで移動させることができるようになった。これで一気にゲームっぽくなったけど、まだコリジョンも実装されていないし、ほかにもいろいろとやらなければならない。まだまだ時間がかかりそうだ。

シーンの遷移

タイトルのシーンからゲームメインのシーンへと移行する部分をコーディング。 あっけないほど簡単にエラーも出ずに動いてしまった。エラーが出ないことはもちろん良いんだけど、一発で動いてしまうと逆に本当に大丈夫なのか不安になってしまう。 まあ、これ…

描画、リソース

やっとテクスチャを描画することができるようになった。 キャラクターを動かせるようになったので、やっとゲームらしくなってくる。音はまだだけど。 ただちょっと気になるのが、描画のためのクラスやリソースのクラス。DirectXのデバイスを扱うクラスなど、…

素材

テクスチャを扱えるようになってきたら、いつも問題になるのがグラフィックスの素材。自分で絵が描ければいいんだけど、納得がいくものが描けない。フリーの素材を探してもイメージに合うものはなかなか見つからない。

リソース

テクスチャやサウンドといったリソースをどう扱うかで迷う。 サウンドのことなんてすっかり忘れていたし。 リソースはリソースでまとめて扱えるようにしたい。

DirectXのデバイス

一応、タスクシステムでタスクを回すことはできるようになったが、描画をどうやってやるかで悩む。描画するために必要なDirectXのデバイスをどうやってタスク側に知らせようか。 まだいまいち、DirectXでの描画の仕方が分かっていない。

構成変更その2

全体的に構成を見直して書き直した。 あとは入力やシーンのクラスをどうやって参照するかで悩む。singletonにするとして、どうやって参照しようか。グローバル変数にしてしまうというのもありかな。

構成変更

タスクシステムを追加して、いざゲームのシーンを作ろうとしたら、システムの構成がいまいちよくないことに気付く。ということで全体的に構成を見直し。

タスクシステムその3

とりあえず、一応タスクをリストに追加できるようにした。 タスクを削除するのはその場ですぐ削除するのではなくフラグを立てるようにして、次のタスク処理ループのときに削除するようにした。 タスクの中で別のタスクを追加するのにもちゃんと対応したつも…

タスクシステムその2

タスクシステムの実装を引き続き作業中。そもそもタスクシステム以前にリンク構造に関する知識が不足。リンクの先頭や末尾はどうするとか、アルゴリズムの知識が無さすぎ。リンクを実装するのに手間取っている。

タスクシステム

タスクシステムの実装を始めたが、これが難しい。今まで用意されていたものを使っていたので、いざ自分で作るとなると大変だ。でもここは勉強のため、自分でしっかり理解して実装せねば。

なかなか進まない

相変わらず、ちまちまと作業。ついついあれも必要だこれも実装しておこうと道具や環境のほうばかり作っていて、なかなかゲーム本編の制作が進まない。いっそのこと、設計とかちゃんと考えないでいっきにがーっと作ってしまって、そこからライブラリとなる部…

ゲーム内オブジェクトその3

ゲーム内の自機や敵などのオブジェクトを表すクラスを作成中。 このクラスにはどこまでパラメータを持たせるのが良いのだろうか。 現在の座標はもちろん必要だろう。では速度や加速度は?移動しないオブジェクトもあるから必要ないかも。 コリジョンはどうだ…

ゲーム内オブジェクトその2

結局、ゲーム内オブジェクトのクラスに描画メソッドも実装することに決定。描画しないオブジェクトなら描画メソッド内は空にしておけばいい。 描画クラスを別にすることも考えたが、そうすると多重継承することになるのでやめた。どうも多重継承は使っている…

ゲーム内オブジェクト

ゲーム内での自機や敵などを表すオブジェクトの設計と実装中。 ここで描画をどうするか悩む。オブジェクトに描画も実装してしまうのもいいかと思ったら、描画しないオブジェクトも考えられるし。描画は描画だけでまとめてしまったほうがいいだろうか。

シーンを表現するクラス

パッドやキーボードの入力を判定するクラスの作成が終わったので、次はシーンを表現するクラスを作成。タイトル画面やゲームオーバー画面、ゲームのステージなどをこのクラスを継承して作成していく予定。

パッドのボタン配置

今はプレステのコントローラーを変換アダプタを使ってPCにつなげている。DirectInputでも認識することができ、作成中のプログラムでも使うことが出来た。 しかし、ひとつ問題が。使ってるアダプタの場合、△ボタンがAボタンで○ボタンがBボタンという配置にな…

パッド判定

キーボードの入力判定に引き続き、パッドの判定部分をコーディング。 普段、パッドはつなげていないので、いちいち用意してつながなくてはいけないのが面倒。ワイヤレスマウスみたいに無線のパッドでも買ってしまおうか。

オートリピート

キーボードのボタンが押されたか、押している状態かの2つは取得することが出来た。しかし、まだオートリピートが出来ていない。オートリピートってどう実現すればいいんだろう。 必要なパラメータとしては、ボタンをどのくらい押していればオートリピートを…

再び作業再開

とりあえず、キーボードの問題は後回しにして作業再開。 まずは同時押しが問題にならない操作方法のゲームにしよう。

ボタンの状態取得

ボタンが押されたかどうかを判定するメソッドの名前で悩む。ボタンの状態で必要なのは、今押されている状態、前フレームでは押されてなくて今フレームで押された(ボタンの状態が変化した)、ボタンのオートリピートの3つの状態。 オートリピートはRepeatでい…