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

スプライトのファイル形式 その2

ようやくスプライトの仕様が固まり、実装に入りました。 「しゃがみ」のような左上端の座標が変化する場合に備え、スプライト自体はサイズ固定で当り判定だけが変化するようにしました。 で、肝心のフォーマットですが、iostreamフレンドリーな空白区切りテ…

スプライトのファイル形式

引き続き、スプライトのファイル形式を考え中です。 移動ルーチン絡みで考えてみると、 移動ルーチンとスプライト画像は分離する(画像は差し替え可能) 移動ルーチンはスプライトのサイズやアニメーションのフレーム数に依存しない あたりが追加の条件になり…

libvorbis#300

libvorbisの例のバッファーオーバーランバグが直ったみたいです。 x64で別バグが残ってるみたいでチケットはクローズされてませんけど、直接的には関係ないような気がします。 次のリリースに合わせてHamigaki.Audioのテストケースも更新する予定です。

歩行アニメーション追加

ものすごくテキトーですが、歩行アニメーションを追加しました。 今日の差分 これでようやく前後の区別が付くようになりました。 今のところ横に連結した画像を交互に表示しているだけです。 そろそろスプライトのフォーマットも考えないといけませんね。 考…

加速度ベースに変更

加速度ベースの処理に変更しました。 差分 最高速は加速度で調整可能だったので、コルーチンの戻り値は加速度のみとなりました。 straight_routineはこうなります。 acceleration straight_routine( routine_type::self& self, move_info mv, input_command …

当たり判定共通化

移動ルーチン毎に重複して持っていた当たり判定処理を共通化しました。 結果、直進ルーチンはこうなります。 rect straight_routine( routine_type::self& self, rect r, input_command cmd, const stage_map* map) { float vx = -1.2f; float vy = 0.0f; wh…

Hamigaki 0.40.1 リリース

Hamigaki C++ Libraries 0.40.1をリリースしました。 http://sourceforge.jp/projects/hamigaki/files/ 以下、変更点です。 全体: Mac OS X 10.4に対応 Boost 1.35に対応 環境変数DXSDK_DIRが定義されていない場合にビルドに失敗する問題を修正 ビルド済みの…

Hamigaki 0.40.1準備中

vorbis_file_sourceのバグ修正版としてHamigaki 0.40.1のリリースを準備しています。 このリリースで、 Mac OS X 10.4対応 Boost 1.35暫定対応 も取り入れることにしました。 Boost 1.35で動かなくなっている箇所を手直ししていたら、Cygwinでテストする時間…

straight_routine

とりあえず当たり判定のコードはコピペして、直進するだけの敵を追加しました。 今日の差分 速度一定、落下時は進行停止となっています。 プレイヤーキャラとはまだ衝突しません。 2つ移動ルーチンを作った感じだと、 コルーチンの戻り値は位置でなく速度に…

player_routine

プレイヤーキャラクタの動きをコルーチンに置き換えました。 今日の差分 今のところ、コルーチンは次の形式になっています。 struct rect; // 座標とサイズ struct input_command; // 入力コマンド typedef hamigaki::coroutines::shared_coroutine< rect(re…

ブロックに乗れた

縦方向の当たり判定も実装しました。 今日の差分 これで、ようやく空中のブロックに乗れるようになりました。 結構感動です。 ついでに穴に落ちる処理も追加しています。 穴に落ちても7ボタン(360コントローラのBACK)で初期位置に戻ります。 キャラのサイズ…

vorbis_file_sourceのバグ

falcom_playを偶然デバッガから起動したところ、vorbis_file_sourceにメモリ破壊バグがあることに気が付きました。 原因はlibvorbisのov_clear()がfclose()相当のコールバックを呼び出すことで、vorbis_file_sourceのデストラクタがov_clear()が呼ぶときにコ…

stage_map

テキストファイルでステージマップを設定できるようにしました。 今日の差分 とは言え、縦方向の当たり判定を実装していないので、ジャンプで飛び込むとブロックの裏側に回ってしまいます。 今のところマップデータは、空白が通れる所、「=」が通れないとこ…

Oggのマルチストリーム その3

libogg、libvorbis、ogg123のソースを追った結果、 Oggのグループ化(同時多重化)はライブラリユーザーが手動で行うものらしい eosページが壊れていると、以降のチェインされたストリームが全て無視される シーク不能なデバイスを考慮すると、チェインされた…

directx.jam

directxのコンフィギュレーションを専用のツールセットとしてjamファイルにまとめました。 tools/build/directx.jam 書式は、 using directx : [root] : [includes] : [libraries] : [condition] ; で、引数の意味は以下の通りです。 root DirectX SDKのイン…

RFC 3533

RFC 3533「Ogg カプセル化フォーマット バージョン0」をようやく訳し終わりました。 http://www12.ocn.ne.jp/~dante98/text/rfc3533j.txt 付録とか英語の部分が残ってますが、まぁ分かると思います。 慣習的に、bosページの最初の数バイトは要求されるコーデ…

MME on Cygwin/Vista

Vista上のCygwinでwaveOut系関数がクラッシュする問題がいつの間にか直っていました。 cygwin.dllは更新されていないので、先日のWindows Updateの影響だと思います。 これでVMware使わずにテストできます。ばんざい。

OSX動作報告

知人からOSX(x86)での動作報告を受けました。 再生/録音ともに動作するそうです。 まさか修正なしで動くとは思いませんでした。 PowerPCでも多分動いていると思います。 テスト済み環境に追加しました。 http://hamigaki.sourceforge.jp/doc/html/requiremen…

Oggのマルチストリーム その2

やっとOggのRFCを半分くらい訳しました。 ストリームの多重化に関しては大体理解できました。 Oggには二種類のストリーム多重化があります。 同時多重化(グループ化) 複数のストリームを交互に混ぜる 逐次多重化(チェイン化) ストリームを単純に連結する Ogg…

Oggのマルチストリーム

昨日のBGMループがおかしかった件で、Ogg Vorbisでループ情報を保存する方法を考えていました。 日本ファルコムやセガのゲームではVorbisコメントにループ情報を書いているんですが、Vorbisコメントはメモの用途に使うもので、メタ情報を埋め込むものではあ…

BGM追加

CoreAudioラッパーの実装もひとまず終わったのでaction_gameの作成に戻りました。 久々にHamigaki.Audioを弄ったことですし、BGMをつけてみました。 今日の差分 BGMを再生しているのはこの部分です。 // メンバ変数 ::HWND handle_; audio::direct_sound_dev…

AudioConverter

pcm_sourceにAudioConverterを組み込んで、サンプリングレートの変換を実装しました。 今日の差分 AUConverterというAudioConverterのラッパーAudioUnitがるので、本当はこれを使いたかったのですが、これを繋ぐと入力コールバックを設定できなくなるので使…

Mac版pcm_source

rresize()のバグで激しくメモリを壊していたので修正しました。 circular_buffer.hppの差分 メモリ破壊の結果、スレッドの管理情報を壊していて、pthread_join()やpthread_cond_wait()がおかしな動きをしていました。 gdbで特定のアドレスが書き換わったらブ…

circular_buffer

多分、pcm_sinkは動くようになったと思います。 今日の差分 Windows版の実装が頭にあったため、昨日はバッファのリストをぐるぐる回る形で実装していましたが、AudioUnitのコールバックに渡されるバッファのサイズが一定ではないようなので、普通のリングバ…

framework

BBv2のdarwinツールセットで-frameworkオプションを使いたい場合、 exe hoge : hoge.cpp : <framework>/System/Library/Frameworks/AudioUnit.framework ;のようにフレームワークのディレクトリを指定するみたいです。 ベース名が-frameworkオプションに、ディレクトリ</framework>…

AudioUnit

昨日はCoreAudioの低レベルAPIであるAudio Hardware Abstraction Layerを使うことを検討していたんですが、 ネイティブエンディアン32ビット浮動小数点数フォーマットしか使えない サンプリングレートを変更するとシステム全体に影響する(っぽい) 入力と出力…

kAudioFormatFlagIsNonInterleaved

CoreAudioを弄って音を出すところまで試しました。(というか出したつもり) SourceForge.jpのコンパイラファームで試しているんですが、リモートからsshでログインしてオーディオデバイスがオープンできてしまいました。 これっていいんでしょうかね。データ…

CoreAudio

Hamigaki.AudioをOSXでも動かせないものかと思ってCoreAudioについて調べてみました。 ざっと見た限り、ASIOのインタフェースに良く似ていて、コールバック関数でバッファを埋める形式のようです。 これならasio_sink/asio_sourceのコードを流用できそうです…

Darwinのスレッドキャンセルポイント

Darwin(OSX)でHamigaki.Coroutineが動かない件を調査しました。 Darwinには<ucontext.h>ヘッダは存在するものの、getcontext()等の関数はないため、(とりあえずは)pthreadによるエミュレーションモードを使うことになります。 で、そのpthread版が動かなかったわけですが</ucontext.h>…

マリオのジャンプ その4

ボタンを放した後のすべりの実装とジャンプの加速度の調整をしました。 今日の差分 どうもジャンプが高すぎたので、ボタン押しっぱなしで得られる加速度を0.2から0.175に変更しました。