プロジェクト8
タスクシステムのバグが取れたので、障害物の発生を予告するタスクから障害物のタスクへと切り替えることができるようになった。 予告するタスクで予告アニメーション再生が終わったら、障害物のタスクを作成しシステムへ登録。予告タスク自身は削除。これで…
タスクリストの内容を詳しくダンプするデバッグルーチンを作成して、タスクの処理を詳しく調査してバグの原因が分かった。 原因はタスクリストの実装ミス。リスト構造で順方向はただしくリストがつながっていたが、逆方向のリストが間違っていた。なんという…
あるタスクから別のタスクへと切り替えるコードを書いたのだが、うまくいかない。デバッガで追いかけてみたら、新しいタスクが正しく登録されていないところまでは分かったのだが原因は不明。 もっと簡単にデバッグしやすいようにまずはタスクリストの中身を…
ソースをいちから見直してみたところ、実は描画されなくなる問題が無いことが分かった。 オブジェクトのタスクは更新と描画が必ず1フレーム内で1回ずつ実行されるようになっており、テクスチャアニメの更新のupdate()と描画のdraw()をオブジェクトの更新と描…
テクスチャアニメのクラスにループさせないときにアニメーションが最後まで再生終了したかチェックするメンバ関数を追加。 そこでちょっと気になるところが。 テクスチャアニメを更新する関数がupdate()で描画はdraw()。終了したかどうかを確認する関数がisE…
テクスチャアニメーションで再生速度を非常に遅くしてみたら、起動直後の最初のフレームが正しく描画されていないことが分かった。ということでバグを修正。 今まではそれなりにアニメーションとして見える速度で再生していたので、おかしいことに気が付いて…
テクスチャのアニメーションの切り替えを何フレームに1回行うかというパラメータをクラスに追加して、テクスチャアニメーションの速度を変更できるようにした。これで呼ぶ側で速度を管理しなくても済むようになった。 やっていることは単純で内部でカウンタ…
ちょっと素材のアイデアを思いついたので自分で作ってみようと思ったが、どうやって作ればいいのかさっぱりわからない。とくにグラフィックツールでのレイヤーの使い方とかアルファの付け方とか。 普通のイラストの書き方を解説したサイトはけっこうすぐに見…
テクスチャアニメのクラスができたのでさっそく素材作り。 サンプルを作成するために使ったツールは自分が求めているものを作るにはちょっと向いていなかったので別のツールを探し中。
テクスチャアニメーションのクラスは一応実装できた。でもちょっと実装でいまいちうまくいっていない部分が残っている。 今の実装では内部情報を更新する部分と描画を行う部分を分けており、今何枚目のテクスチャなのか表すインデックスを更新する部分で行っ…
引き続き、テクスチャアニメーションのクラスを作成中。 テクスチャアニメーションに必要なパラメータ、たとえばパターン1つのサイズとパターン数。そしてパターンの切り替え時間とか。そういったパラメータをどのように渡すか、いろいろ試行錯誤中。
テクスチャアニメーションのクラスを作成中。 久しぶりにライブラリの内部に手を入れているのだが、いろいろと書かなくてはいけないことが多く面倒。でも普段はこの面倒な部分がライブラリによって隠されていると思えば、ライブラリを作った意味はあったんだ…
障害物が発生する位置を予告する部分を障害物とは別クラスにして作成開始。 予告する、つまり障害物が発生する前兆をアニメーションで表現しようと思ったら、自前ライブラリにテクスチャアニメーションの機能はまだ実装していなかった。ということで、テクス…
今はゲームのステージに障害物を発生させるとすぐにプレイヤーと当たり判定があり、場合によっては絶対に避けられないものになってしまう。 ということで、障害物が発生する前にユーザーに位置を知らせる必要がある。その出現位置を予告する処理は障害物のオ…
現在、プレイヤーを邪魔する障害物の作成中。 たくさん出すと避けるのに難しすぎてストレスがたまるだけだし、少ないと簡単すぎて面白くない。いい感じの邪魔具合にするのはけっこう難しい。
結局、バグの原因はマップのエリア外の処理が間違っていたからだった。描画の画面サイズとマップのサイズをはっきり区別できていなかったのが原因。 きちんと詳細なログを取って分かった。結局、floatとintの変換は問題なかった。 また自分の悪い癖が出てし…
コリジョンのバグの修正中。 キャラクターの現在の座標はfloatで持っており、マップや画面上の座標はintで表現している。どうもfloatからintへの変換で問題になっているようだ。 C++ではfloatからintへの変換は小数点以下の切り捨てだったはず。座標について…
コリジョンの作成方法を図に書いて確認。とりあえず作成方法については問題は無かった。 ただ、現在、マップの端に行ったときにエラーになってしまう場合がある。エリア端の処理がどこか間違っているようだ。ということで原因追求中。
マップの当たり判定についてコードを書いていたら、そもそも元のコリジョンの作成の仕方が間違っている気がしてきた。ということで見直し中。
今度はマップと矩形での当たり判定を実装。 頭で考えているときは複雑で大変そうに思っていたが、図に書いてみたら非常にシンプルなアルゴリズムで実装できることが分かった。 アルゴリズムを考えるときは分かりやすく図で表してみることも大切。
マップとの当たり判定でちょっと手間取る。 マップを構成するパーツは32x32のサイズになっているけど、スクロールは1ドット単位。画面上での位置と内部データとの対応を取るのが大変だった。
プレイヤー(操作キャラ)の毎フレームの更新部分を整頓。 ユーザーからの入力に対しての処理と、座標の更新部分を明確に分けた。順番としてはまずユーザーからの入力を処理した後、重力の影響を考慮しながら座標の更新。そして座標が画面外や壁に当たった解き…
プレイヤーの挙動部分の実装中。 プレイヤーが重力で落ちる処理、ユーザーの入力によりジャンプする部分、壁に当たった時の処理、画面外にいってしまったときの処理などを実装しているのだが、その順番や条件が絡み合ってちょっとうまくいっていない。
なんとかマップのスクロールルーチンを実装。そして実行しながらスクロールしている画面を見ていると別のゲームのアイデアが浮かんできた。 このバージョンをコピーしておいて、あとでそのアイデアも実装してみることにしよう。
マップデータはとりあえずランダムで用意してテストしていたのだが、ある程度実装したところでマップデータを周期性のあるデータにして試したところ、マップの一部が表示されていないことに気が付いた。 データを扱う処理を作成するときにはその処理が正しく…
マップのスクロールをかなり汎用に使えるように考えていたのだが、もっとシンプルに今作っているゲームの仕様に合わせた条件を決めてシンプルなものに書き換え中。
マップをスクロールしてループさせるのが相変わらずうまくいっていない。スクロールする部分はなんとか実装できたけど、ループさせる部分がまだ。 ただちょっと気になるのはスクロールさせているとき、ちょっと波打って見えること。処理落ちなのか、それとも…
マップデータはマップクラスで保持するようにした。では、描画はどこで行うか。 マップクラス自身で描画を行うか、マップクラスのオブジェクトを持っているステージ側で描画するか。 マップクラスで描画する場合はステージ側はほとんど気にすることはなく処…
マップデータでスクロールさせてループさせるのがうまくいっていない。ちょっと苦戦中。
あるオブジェクトを作成したまま解放し忘れていたと思い、delete文を追加したところ、実行してみたらassertで落ちてしまった。よく見てみたら解放し忘れていたわけではなく、別のところで解放されていたのが落ちた原因。 これは自分が作成したタスクシステム…