Boost.Preprocessorを少しだけ使ってみる

使ったこと無いなーと思いまして、触り程度にちょっとだけ

例えば以下のように、ある一部分を除いてほぼ同じ内容の関数をたくさん定義しなきゃいけない場合


void test1() {
cout << "A" << endl; } void test2() { cout << "B" << endl; } …(以下延々と続く)… [/cpp] Boost.Preprocessorのリファレンスをだらだら眺めながら、以下のように書いてみました。 ちゃんと上記のように展開されるようです。 [cpp] #define SEQ1 (test1) (test2) (test3) (test4) #define SEQ2 (A) (B) (C) (D) #define MACRO(r,data,i,elem) \ void elem () { \ cout << BOOST_PP_STRINGIZE(BOOST_PP_SEQ_ELEM(i,SEQ2)) << endl; \ } BOOST_PP_SEQ_FOR_EACH_I(MACRO, _, SEQ1) [/cpp] BOOST_PP_SEQ_FOR_EACH_Iを使ってMACROをSEQ1の数だけ展開して、 そのMACROの中ではインデックスiを使ってSEQ2にアクセスする感じで。 STRINGIZEは、標準の#xみたいなやつですね。 今の自分には使う機会が思いつきませんが、いつか必要になった時のとっかかりになればという事で。

Seleneでドットサイズ2倍で描画したい

ドット絵のドット感を目立たせたいがために、グラフィックの1ドットを画面上では2×2ドット(とかそれ以上)の大きさで描画したい。
最初から2倍に拡大した画像を作るというのも一つの手ですが、あとから3倍に拡大表示したくなったりしそうです。例えばStudio PixelさんのGuxt(ガスト)というゲームでは1~5倍まで好きな拡大率を選ぶことができます。

ということで今回は、現在使用中のゲーム用ライブラリSeleneにて、320×240の解像度で描画したものを2倍に拡大して640×480で画面に出力する方法を書いてみようと思います。今回描画するものは2Dスプライトのみですが、ほかのもの(線とか)も同じやり方でなんとかなると思います。

※現在Seleneのサイトがいろいろとリンク切れしているみたいですが、ファイル自体は存在するみたいです。
 Seleneライブラリは http://www.moon.sakuraweb.com/download/SeleneSDK-01.24l.exe からダウンロードできます。

続きを読む →