2007-09-01から1ヶ月間の記事一覧

ブロックすり抜け

色々直さないといけない箇所が残っているんですが、今日はずっと気になっていた次の2点を修正しました。 画面端で敵が消えるように修正 ブロックに埋まった場合に自動で右に進むように修正 前者は穴に落ちた後で敵からダメージを受け続ける問題への対処で、…

hop_step_jump_routine

player_routineをうまく整理できず、代わりにパタクリボー風の動きをするhop_step_jump_routineを作りました。 今日の差分 今のところアルゴリズムは、 20フレーム前進 上昇速度1/4でジャンプ×2 上昇速度1/1、重力1/2でジャンプ としていますが、なんだか動…

routine_state

yield()の引数と戻り値が多く、コルーチン内の処理が分かりづらくなってきたので、引数と戻り値をまとめたroutine_stateを作成し、コードを整理しました。 routine_state.hpp 差分 これで移動アルゴリズムがはっきりするようになりました。 例えばstraight_r…

turn_routineとhop_routine

穴の前でUターンするturn_routineとパタパタっぽく飛んでくるhop_routineを追加しました。 turn_routine.cpp hop_routine.cpp hop_routineの落下は自由落下だけでは滞空時間が短すぎるので、重力を半減させるため、重力の半分だけ常に加速度を加えています。

yieldの引数

以前「難しそう」と書いていましたが不便だったので、yield()の引数にtupleの要素をバラバラに渡せるようにしました。 coroutine_template.hppの差分 これで、 typedef coro::coroutine<std::pair<int,int>(int)> coroutine_type; std::pair<int,int> coro_body(coroutine_type::self& se</int,int></std::pair<int,int>…

ブロックの突き上げ

ブロックを突き上げて敵を倒せるようにしました。 差分 倒した敵はひっくり返って数フレーム後に消えます。 この処理のためにスプライトを逆さに描画できるように修正したんですが、単純に画像を差し替えるだけでよかった気がします。 これで基本的なアクシ…

ブロックの破片

ブロックを壊した後の破片を実装しました。 差分 破片は斜め四方向に飛ばしています。 このアニメーションを単一のスプライトで表現するべきかか、4つの小さなスプライトで表現するべきかで悩みましたが、ビデオメモリがもったいないので後者を選択しました…

ブロック破壊 その3

ブロックを壊す処理を位置計算の処理から当たり判定の処理に移動しました。 今日の差分 当たり判定を無視して移動した後、ブロックを壊したりブロックを避けたりして位置を調整しています。 これでブロックを避けた際のスクロールのズレにも対応できるように…

ブロック破壊 その2

移動処理を大幅に書き換える前に、現状できる範囲で「ブロック破壊」を実装してみました。 今日の差分 下からブロックを叩くと、アニメーションなしでブロックが突然消えます。 実装していて困ったのは、複数のブロックを同時に叩いた(ブロックの境目を叩い…

ブロック破壊

今度はブロックを壊せるようにしようと考えています。 さすがにベタ塗りのままではブロックっぽくないので、とりあえずテクスチャを貼りました。 差分 実装としては、ブロックに下からぶつかった場合にマップからブロックを消して、壊れたようなアニメーショ…

FourCC

スプライトのフォームをインデックスで指定するのをやめて、4文字コード(FourCC)を使うようにしました。 差分 これでスプライトデータの再利用がやり易くなったのではないかと思います。 Windows方面でFourCCと言えばRIFFでの利用くらいですが、Mac方面では…

knock_back_routine

昨日考えていたhamigaki::coroutineのリスタート処理ですが、コルーチンのボディ関数はboost::functionの形で保存しているので、これを使ってコルーチンを作り直すことで実装できました。 差分 ところが実際にこれを組み込んでみると、ノックバック中からジ…

ダメージ その2

ロックマン型のダメージ処理の実装を考えていたのですが、後退する移動ルーチン(knock_back_routine)は簡単に書けるものの、そのルーチンが終了した後で元の移動ルーチンに戻る仕組みがなくて詰まってしまいました。 一見、移動用コルーチンをスタック的に管…

blink_effect

ダメージを受けたときにプレーヤーキャラを点滅させるようにしました。 差分 とりあえず必要最低限の機能として、フレーム毎の頂点色を返すエフェクト用コルーチンを用意することにしました。 一定時間点滅するblink_effect()はこのようになります。 unsigne…

ダメージ

踏みつけが出来たので今度はダメージの処理を考えています。 ダメージを食らった場合の動作はおおよそ次の2つに分類できると思います。 一定時間点滅する。その間も操作可能。(マリオ型) バックする。その間、操作不能。(ロックマン型) ロックマン型の場合…

踏みつけ その3

潰れるアニメーションも追加しました。 差分 実装としては、 踏まれたらスプライトを潰れたものに変更 移動用コルーチンを5フレーム後に消滅するものに変更 となっています。 なお、移動ルーチン側からキャラクタを消滅させるため、スプライトの番号=-1を消…

踏みつけ その2

とりあえず踏みつけた敵を消すようにしてみました。 main_window_impl.cppの差分 今のところダメージ判定が実装されていないので、落ちてくる敵にぶつかるだけで倒せたりします。 さらに効果音と踏みつけた後のジャンプを追加しました。 差分 ついでに、何度…

踏みつけ

今度は敵を踏めるようにしようと考えています。 まず、「踏む」の判定ですが、敵の頭上に落下した場合以外にもジャンプの上昇中にも踏める(マリオの場合)ことから考えて、プレイヤーキャラの下部が敵の上部と重なったかどうかでよいと思います。 踏んだ効果…

キーボード入力

direct_input_keyboardクラスを作成して、キーボード入力に対応しました。 direct_input_keyboard追加差分 キーボード入力対応差分 カーソルキーかテンキーで移動、Zでジャンプ、Xでダッシュです。 一応、keyboard-config.txtでキーコンフィグできます。 44 …

joystick_config

いつまでも360コントローラのみのサポートではマズいので、ジョイスティックのボタン割り当てを変更できるようにしました。 joystick_config.hpp main_window_impl.cppの差分 設定ファイル(joystick-config.txt)の書式は、 {12345678-1234-1234-1234-1234567…

コピーコンストラクタ追加

shared_coroutineのコピーコンストラクタが抜けていたので追加しました。 coroutine_template.hppの差分 これでSTLコンテナに格納できるはずです。

座標系変更

キャラクタの座標を足元に移動し、ついでにY座標の上下を逆にしました。 差分 これで座標を直感的に指定できるようになったので、map.txtでキャラクタを自由に配置できるようにしました。 差分 「@」がプレイヤーキャラクタ、「o」が敵です。

キャラクタの座標

キャラクタの位置をエディットできるようにしようと思って、ひとまずコードをまとめました。 今日の差分(←見ても面白くありません) プレイヤーキャラと敵キャラでコードがバラバラだったのを統一しただけです。 マップエディタは後回しにしたいので、マップ…

続 再生キャンセル

direct_sound_sinkのコンストラクタでバッファをフラッシュするのをやめました。 direct_sound.cppの差分 close()した場合はフラッシュ、close()せずにデストラクタが呼ばれた場合はキャンセルという意味合いです。 さらに、action_gameの再生バッファを調整…

MinGWでのクラッシュ解決

えー、結局バグってたのは暑さで蕩けた自分の脳みそでした。 マルチスレッドのプログラムなのに、マルチスレッドのオプションがオフになっていたのが原因です。 Jamfile.v2に「<threading>multi」を書き足したら動きました。 Jamfile.v2の差分 発覚までの流れはこうです</threading>…

再生キャンセル

action_gameのテストで気が付いたんですが、ジャンプを短時間に繰り返すと、前の効果音の再生を停止してから新しい効果音を再生するため、一瞬ゲームの進行が停止します。 これはデバイスのclose()をしたときに再生バッファに残っているデータがなくなるまで…

続 コルーチンのバグ調査

なぜかバグの発生確率が下がってしまって、なかなかデバッグが捗りません。 クラッシュ時にgdbも道連れにするので、逆アセンブルリストと睨めっこしながらVC++のデバッガで調べています。 デバッガで追った限り、コルーチンの例外フレームに関するロジックは…

コルーチンのバグ調査

引き続き、昨日のクラッシュを調査中です。 いくつか条件は絞り込めてきましたが、原因解明には至っていません。 で、直接関係はないのですが、バグを見つけたので修正しました。 coroutine_template.hpp コルーチンを1回も呼ばずにexit()かデストラクタが…

例外フレーム

今日は、MinGW版action_gameが終了時にクラッシュすることに気が付いてデバッグしていました。 デバッグ中にSjLj例外の環境でコルーチン側の例外フレームがリークするバグが見つかったので修正しました。 coroutine_template.hppの差分 問題の箇所はココです…

コルーチンの中から効果音

player_routineを関数オブジェクトにして、player_routineの中から効果音を指定できるようにしました。 今日の差分 今度はしゃがみジャンプでもちゃんと効果音が再生されます。 class player_routine { public: player_routine(const stage_map& map, sound_…