ゲーム]dHell2でぶつかったところ


文字問題もとりあえず一段楽したので
花見ゲーを作るためにdHell2を弄り始めました
今のところぶつかったところ、今後解決、フィードバックも視野に入れて
とりあえず列挙だけしときます

  • Hell_loadTextureで[r,g,b]指定だと色抜きできない、[-2,x,y]だと色抜きできる。
  • Hell_drawTextureをスプライト的な方法で使用した場合の倍率指定がちょっと複雑かも。倍率=切取りサイズ/bmpサイズとかやら無いといけない。割り切れないケースもあるのでcast(float)必須。


いまんとこ両方とも解決方法は見つけてません。
問題回避は上記方法で行ってます。
調べてわかったらフィードバックかけます。

Hell_loadTextureの色抜き


以下の修正で色抜きはできたっぽい。
たぶん作っているサーフェースがABGRな感じだと思われます。

// 修正前
Uint32 maskColor = (r << 16) | (g << 8) | (b);
// 修正後
Uint32 maskColor = 0xFF000000 | (b << 16) | (g << 8) | (r);


でも、なんかうちの環境だと透けてない。。。
なぜなんだ?Hell_setAlphaの設定をeasyFont.dで殺している可能性がある

やっぱりeasyFontがHell_setAlphaの設定を殺していた


ので色抜き設定や加算描画をHell_drawTextureでする場合
Hell_setAlphaを直前にやっておくと、その他の処理で設定を変更した場合の
影響はなくなるわけで、これはdHell2コーディングのセオリーなのではないかと思った

さらに改良


id:KouMikageさんが教えてくれた関数でやったところスマートになりました。
そもそも適当に直して動いた!は次のバグの原因になるんで問題ですね。

// 修正前
Uint32 maskColor = (r << 16) | (g << 8) | (b);
// 修正後
Uint32 maskColor = 0xFF000000 | (b << 16) | (g << 8) | (r);
// さらに修正
Uint32 maskColor = SDL_MapRGBA(s.format, r, g, b, 255);

Hell_drawTextureの倍率問題


問題ってほどでもなかった!
テクスチャ切取りサイズに関わらず画像サイズ×倍率になっていたところを修正すると上手くいきます。

// これはイカン
// float w = tex._width * dx;
// float h = tex._height * dy;
if (ow == 0 || oh == 0) {
	ow = tex._width;
	oh = tex._height;
}
// ここで切取りサイズベースで計算する
float w = ow * dx;
float h = oh * dy;


あとぼやけるのは自分が2^nで画像ファイルを作るので避けることにした。
任意サイズに保管しなおしてもいいんだけど、結局ライブラリが2^nにしてくれるか
自分が2^nで画像ファイルを作るかの違いだけなんで。
ただ、画面サイズでファイル作りたい人もいるんでサイズ保管処理いれれば
より良いライブラリになることは間違いないです。