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

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

プロジェクト8

タスクの切り替え

タスクシステムのバグが取れたので、障害物の発生を予告するタスクから障害物のタスクへと切り替えることができるようになった。 予告するタスクで予告アニメーション再生が終わったら、障害物のタスクを作成しシステムへ登録。予告タスク自身は削除。これで…

タスクシステムのバグその2

タスクリストの内容を詳しくダンプするデバッグルーチンを作成して、タスクの処理を詳しく調査してバグの原因が分かった。 原因はタスクリストの実装ミス。リスト構造で順方向はただしくリストがつながっていたが、逆方向のリストが間違っていた。なんという…

タスクシステムのバグ

あるタスクから別のタスクへと切り替えるコードを書いたのだが、うまくいかない。デバッガで追いかけてみたら、新しいタスクが正しく登録されていないところまでは分かったのだが原因は不明。 もっと簡単にデバッグしやすいようにまずはタスクリストの中身を…

テクスチャアニメの終了チェックその2

ソースをいちから見直してみたところ、実は描画されなくなる問題が無いことが分かった。 オブジェクトのタスクは更新と描画が必ず1フレーム内で1回ずつ実行されるようになっており、テクスチャアニメの更新のupdate()と描画のdraw()をオブジェクトの更新と描…

テクスチャアニメの終了チェック

テクスチャアニメのクラスにループさせないときにアニメーションが最後まで再生終了したかチェックするメンバ関数を追加。 そこでちょっと気になるところが。 テクスチャアニメを更新する関数がupdate()で描画はdraw()。終了したかどうかを確認する関数がisE…

テクスチャアニメーションのバグ発見

テクスチャアニメーションで再生速度を非常に遅くしてみたら、起動直後の最初のフレームが正しく描画されていないことが分かった。ということでバグを修正。 今まではそれなりにアニメーションとして見える速度で再生していたので、おかしいことに気が付いて…

テクスチャアニメーションの速度設定

テクスチャのアニメーションの切り替えを何フレームに1回行うかというパラメータをクラスに追加して、テクスチャアニメーションの速度を変更できるようにした。これで呼ぶ側で速度を管理しなくても済むようになった。 やっていることは単純で内部でカウンタ…

素材作り

ちょっと素材のアイデアを思いついたので自分で作ってみようと思ったが、どうやって作ればいいのかさっぱりわからない。とくにグラフィックツールでのレイヤーの使い方とかアルファの付け方とか。 普通のイラストの書き方を解説したサイトはけっこうすぐに見…

テクスチャアニメ素材作り

テクスチャアニメのクラスができたのでさっそく素材作り。 サンプルを作成するために使ったツールは自分が求めているものを作るにはちょっと向いていなかったので別のツールを探し中。

インデックスの更新

テクスチャアニメーションのクラスは一応実装できた。でもちょっと実装でいまいちうまくいっていない部分が残っている。 今の実装では内部情報を更新する部分と描画を行う部分を分けており、今何枚目のテクスチャなのか表すインデックスを更新する部分で行っ…

パラメータ

引き続き、テクスチャアニメーションのクラスを作成中。 テクスチャアニメーションに必要なパラメータ、たとえばパターン1つのサイズとパターン数。そしてパターンの切り替え時間とか。そういったパラメータをどのように渡すか、いろいろ試行錯誤中。

ライブラリの恩恵

テクスチャアニメーションのクラスを作成中。 久しぶりにライブラリの内部に手を入れているのだが、いろいろと書かなくてはいけないことが多く面倒。でも普段はこの面倒な部分がライブラリによって隠されていると思えば、ライブラリを作った意味はあったんだ…

テクスチャアニメーション

障害物が発生する位置を予告する部分を障害物とは別クラスにして作成開始。 予告する、つまり障害物が発生する前兆をアニメーションで表現しようと思ったら、自前ライブラリにテクスチャアニメーションの機能はまだ実装していなかった。ということで、テクス…

障害物の発生

今はゲームのステージに障害物を発生させるとすぐにプレイヤーと当たり判定があり、場合によっては絶対に避けられないものになってしまう。 ということで、障害物が発生する前にユーザーに位置を知らせる必要がある。その出現位置を予告する処理は障害物のオ…

障害物

現在、プレイヤーを邪魔する障害物の作成中。 たくさん出すと避けるのに難しすぎてストレスがたまるだけだし、少ないと簡単すぎて面白くない。いい感じの邪魔具合にするのはけっこう難しい。

エリア外の処理

結局、バグの原因はマップのエリア外の処理が間違っていたからだった。描画の画面サイズとマップのサイズをはっきり区別できていなかったのが原因。 きちんと詳細なログを取って分かった。結局、floatとintの変換は問題なかった。 また自分の悪い癖が出てし…

座標の表現

コリジョンのバグの修正中。 キャラクターの現在の座標はfloatで持っており、マップや画面上の座標はintで表現している。どうもfloatからintへの変換で問題になっているようだ。 C++ではfloatからintへの変換は小数点以下の切り捨てだったはず。座標について…

コリジョン処理

コリジョンの作成方法を図に書いて確認。とりあえず作成方法については問題は無かった。 ただ、現在、マップの端に行ったときにエラーになってしまう場合がある。エリア端の処理がどこか間違っているようだ。ということで原因追求中。

コリジョン生成

マップの当たり判定についてコードを書いていたら、そもそも元のコリジョンの作成の仕方が間違っている気がしてきた。ということで見直し中。

マップと矩形の当たり判定

今度はマップと矩形での当たり判定を実装。 頭で考えているときは複雑で大変そうに思っていたが、図に書いてみたら非常にシンプルなアルゴリズムで実装できることが分かった。 アルゴリズムを考えるときは分かりやすく図で表してみることも大切。

マップとのコリジョン

マップとの当たり判定でちょっと手間取る。 マップを構成するパーツは32x32のサイズになっているけど、スクロールは1ドット単位。画面上での位置と内部データとの対応を取るのが大変だった。

プレイヤー部分の整頓

プレイヤー(操作キャラ)の毎フレームの更新部分を整頓。 ユーザーからの入力に対しての処理と、座標の更新部分を明確に分けた。順番としてはまずユーザーからの入力を処理した後、重力の影響を考慮しながら座標の更新。そして座標が画面外や壁に当たった解き…

プレイヤーの挙動

プレイヤーの挙動部分の実装中。 プレイヤーが重力で落ちる処理、ユーザーの入力によりジャンプする部分、壁に当たった時の処理、画面外にいってしまったときの処理などを実装しているのだが、その順番や条件が絡み合ってちょっとうまくいっていない。

新しいアイデア

なんとかマップのスクロールルーチンを実装。そして実行しながらスクロールしている画面を見ていると別のゲームのアイデアが浮かんできた。 このバージョンをコピーしておいて、あとでそのアイデアも実装してみることにしよう。

検証用データを用意しよう

マップデータはとりあえずランダムで用意してテストしていたのだが、ある程度実装したところでマップデータを周期性のあるデータにして試したところ、マップの一部が表示されていないことに気が付いた。 データを扱う処理を作成するときにはその処理が正しく…

マップのスクロールの仕様変更

マップのスクロールをかなり汎用に使えるように考えていたのだが、もっとシンプルに今作っているゲームの仕様に合わせた条件を決めてシンプルなものに書き換え中。

マップのループ

マップをスクロールしてループさせるのが相変わらずうまくいっていない。スクロールする部分はなんとか実装できたけど、ループさせる部分がまだ。 ただちょっと気になるのはスクロールさせているとき、ちょっと波打って見えること。処理落ちなのか、それとも…

マップ描画

マップデータはマップクラスで保持するようにした。では、描画はどこで行うか。 マップクラス自身で描画を行うか、マップクラスのオブジェクトを持っているステージ側で描画するか。 マップクラスで描画する場合はステージ側はほとんど気にすることはなく処…

マップのスクロール

マップデータでスクロールさせてループさせるのがうまくいっていない。ちょっと苦戦中。

newとdeleteの位置

あるオブジェクトを作成したまま解放し忘れていたと思い、delete文を追加したところ、実行してみたらassertで落ちてしまった。よく見てみたら解放し忘れていたわけではなく、別のところで解放されていたのが落ちた原因。 これは自分が作成したタスクシステム…