7.31.2008

さようなら7月、こんにちは8月

タイトルにこそ季節感を演出してみたものの、結局やることは変わらず。
SDL Lesson15.
Lesson14の内容を応用して、一秒あたりの平均フレームレートをタイトルバーに表示させるサンプルです。

コーディングしてて、目についた新要素もなく、粛々とコーディング。
以下、画像。


へー。うちのコンピューターの出せるフレームレートって、こんなものなんだ。

SDLでフレームレートのお勉強。

Lesson14
フレームレートを使った、単純なアプリケーション。

レッスンサイトの絵もそうだけど、ソースを組んでても、何をしてるのか理解しづらい。
要するに、フレームレートに合わせて文字列が上から下に降りてくるっていうプログラムなんだけど…。
(Enterキーで、落下速度を変化させられる。(言うまでもなく、実際にはフレームレートが変化している))

そんなわけで、組み上げてみたものは、GIFアニメにしてみた。
ただし、キャプチャーした画像枚数が少ないし、動きも雰囲気を味わってもらうためだけのもの(つまり、実際の速度では無い)から、それほど意味があるとは思えないけど。

Bloggerのイメージをアップロード機能でアップしたんだけど、アニメーションしてないみたい。
どうしたものか。。。めんどいから直さないけど。

そうそう、ここのところのレッスンは、Timerってクラスを設計してそれを利用しているわけだけれども、それだとコンパイル後のファイルサイズがめちゃめちゃでかくなる。

そこで利用するのが -02 とか -Os といった、gccのオプションと strip コマンド。
前者はコンパイラが最適化をかけてくれる。
-O2なら(確か)レベル2の速度最適化、-Osならサイズ優先の最適化がなされる。
stripコマンドは、プログラム中から余分なシンボル情報を削除してくれるユーティリティ。

この二つをかければ、おそらくファイルサイズが何もしない時の半分以下になるはず。
お試しあれ。


SDLで遊ぶ。

Lesson13
Advanced Timersってなってるから、もっと精度のいいタイマー関数を紹介してくれるのかと思いきや、SDL_GetTicks()関数をクラスでラップして、(C++から)扱いやすいタイマークラスに仕上げましょうって話題だった。

まぁ、なかなか汎用的なTimerクラスなので、今後タイマーを使うゲーム(ってほとんどのゲームが当てはまるけど)に使えそうな予感。
覚えるだけ覚えて、ゲームは作らないってのもあるかもしれないけど、未来のことは予測できないので。

だもんで画像だけ。
最近Opera ウィジェットに興味が出てきたことはナイショ。
SDL飽きたらそっちにいくかもしれない。



# トップのカンタンUbuntu2の宣伝は、(日付からおわかりいただけるとおり)
# 8月末まで表示させておくつもりです。
# ご不便をおかけしますが、ご了承ください。

7.30.2008

SDLで時間を測定その1

うってかわって、
SDL_GetTicks()関数を使って時間を取得しようというLesson12.
マニュアルによれば、経過ミリ秒を取得する関数だそうで、精度はミリ秒単位ってことでいいのかな?

起動してから背景使いまわしだってことに気づいたけど、直すつもりはなし。
(まぁ、画像ファイルさしかえればすぐ直るんだろうけど。)

とまぁ、特にコメントすることもなく、なんとなく組んだだけ。
テキスト表示部分を工夫すれば、ラーメンタイマーぐらいならすぐに実装できるかな?

7.28.2008

ズンチャカチャ♪ズンチャカチャ♪

帰りの車中で爆睡しながら、SDLの夢を見ました。

さて、今日も今日とて寝る前のLesson11。
今回はSDL_mixerを使うようで、ちゃんとインストールがうまくいってるかを確かめるいいチャンスになりそう。

そんなわけでざくっとコーディング。
いつもは配布されてるlesson[nn].zipファイルなんて持ってこないんだけど、今回は音素材をもらうためにダウンロード。

音素材は軽快なパーカッションの音源だった。
これなら、ゲーム素材配布サイトで探してもよかったかなぁ?

んで、例によって文字はみかちゃんフォントで描画。
みかちゃん好きになりそう(笑)

いつものように、オプションとして -lSDL_mixer を使わないとコンパイルが通らないので注意。
あと、Mix_PlayingMusic()関数とMix_PlayMusic()関数、Mix_PausedMusic()関数とMix_PauseMusic()関数など、SDL_mixerは紛らわしい関数名多すぎ。
関数名だけで10分ぐらいハマった。

引数の数が違う関数名のタイプミスなら、コンパイラが教えてくれるからいいけど、Mix_PausedMusic()とMix_PauseMusic()はどちらも引数なしで呼び出せるタイプの関数だったから、実行してから思い通りの動きをしてないことに気づくまで、間違っていることに気がつかなかった。
こういうの、潜在的なバグっていうんだろうね。

本当は、動画で音とか出せてるとカチョイイんだろうけど、めんどいからやらない。
というわけで、動いてる様子画像。

7.27.2008

SDL_gfx for Windows (and MinGW??)

SDL_gfxを試してみようかと思ったんだけど、いかんせん公式サイトじゃソースが配布されているだけで、Windows向けlibファイルとか、dllなんかが配布されていない。

で、みんなどうしてるのかと思って探してみたら、どうやらソースから自前でコンパイルしているらしい。
(なんて面倒なことを…)

きっと、ネット上にはそんな迷える私のために、コンパイル済みライブラリを配布してくれている親切な人がいるはずだと思って探してみるも、古いバージョンばかりが見つかる。

古いバージョンで我慢するかな・・・と思っていたところに、JessePなる人物が、2008/7/9付(ついこないだ!)で、最新と思しきSDL_gfxのコンパイル済みライブラリを作ったって、SDLのMLに投稿してた。

これを使わない手はないと思って、さっそくインストール。
(手順はSDL_imageなんかと同じ。)
で、入れたところで力尽きて、まだ試していない(笑)

時間があったら試そう。(どうやら、VC向けにコンパイルされたものらしいから、MinGWじゃだめかもしらんし。)

あと、そこで配布されていたものにはSDL_gfxのヘッダーファイルが含まれていなかったから、勝手に含ませてzipで固めて配布。
LGPLだし、問題ないよね?

(配布物に含まれているのは2.0.17のヘッダーだけど、DLLとlibがそれに対応していない可能性大。{←まだ試していないことに起因する}そんなわけで、もしうごかねーぞ、コンパイルとおらねーぞという問題が出たら教えてください。{&古いバージョンのSDL_gfxライブラリに切り替えればイケる可能性大なので、あきらめないでください})


# 以下、別文の機械翻訳

I need the SDL_gfx pre compiled library.

But, that library not distribute from the official SDL_gfx web site.

Today, I found the web, and I got that files.

Relation:
[I made below zip file include SDL_gfx header files]
[libsdl.org ML archives]
[JesseP's web site]
[SDL_gfx official web site]

7.26.2008

楽しいなぁ。SDLは。

プライベートで色々あって、相変わらずのお疲れモードだけれども、SDLは楽しいと感じる。
思えば、プログラミングを始めたきっかけというのが、「ゲームがやりたいけど買えない→よし作ろう」だったことを思い出した。

いつからツールやら実験データの変換フィルターやらばかり組むようになったのかなぁ。

そんな初心に還る思いがするからか、SDLでプログラムを組んでると、「あー。これとこれを組み合わせればこんなゲームになりそうだなぁー。」とか考えながら作ってる自分に気づく。
そしてこれが案外楽しい。

そんなわけでLesson10。
キーボードのどのキーが押されているかを判断するというプログラムなんだけど、我が家では2キー以上の同時押しに反応しなかったし、上下や左右といった反対キーの同時押しも反応してくれなかった。
アクションゲームやRPGつくるぐらいなら困らないだろうけど、格ゲーとなるとどうだろうか?
(後半にジョイパッドの取得があるから、それを応用するのかなぁ?)

これとスプライト処理を組み合わせれば、ダンスダンスレボリューションもどきぐらいは作れるんじゃないだろうかと思った。

例によって画像を複数くっつけようかと思ったけれど、各4キー+上右+上左+下左+下右という、合計8状態をキャプチャーしてくっつけるのは面倒だから、一枚にした。

最近2レッスン/日のペースで進めてるわけだけど、このペースなら、ひと月ぐらいで全部クリアできそう。
(理論値では36÷2=18なんだろうけど。そんなハイペースでやり続けるとは思えないので。)

ご冗談でしょうファインマンさんだか、ファインマンさん最後の手紙だかにあった、晩年彼が数学や物理学の問題を解くことを「楽しんでいた」という記述を思い出した。
確か彼は、初心に還ってそれらの問題に楽しみながら取り組んでいたというのが印象的だったなぁ。