20:スプライトのアルファブレンド
スプライトに対して透明度を適用したいのなら、ID3DXSprite::Draw()において、重ね合わせるカラー情報における透過度情報の値を変更するだけです。
C++には引数の指定を省略したとき、自動的に特定の値を引数にしてくれる機能が備わっています(
デフォルト引数)。デフォルト引数は、引数リストの後ろに配置することができますが、先頭や途中だけに配置するようなことはできません。
#include <iostream>
using namespace std;
// デフォルト引数の例
void function(int x = 10)
{
cout << x << endl;
}
// デフォルト引数は複数指定できる
void function2(int x = 5, int y = 10)
{
cout << x << endl;
cout << y << endl;
}
// 以下は間違いの例
/*
void function3(int x = 5, int y)
{
}
void function4(int x, int y = 5, int z)
{
}
*/
void main(void)
{
function(20); // 画面には「20」と表示される
function(); // デフォルト引数の「10」が表示される
function2(0); // 「0\n10」が表示される
}
透明度を頻繁に指定することはそうあることではありませんので、この透明度をデフォルト引数で宣言することにしましょう。変更結果は以下のようになります。
#pragma once
#include "Texture.h"
class CSprite : public CGameObject
{
private:
/* 省略 */
public:
/* 省略 */
// 完全不透明の値をアルファ値のデフォルト引数として追加
void Draw(float x, float y, int alpha = 255);
};
void CSprite::Draw(float x, float y, int alpha)
{
pSprite->Begin(NULL); // スプライト描画開始
D3DXVECTOR3 vec; // スプライトの描画位置を格納
vec.x = x; // x座標
vec.y = y; // y座標
vec.z = 0.0f; // z座標(奥行きは0にする)
pSprite->Draw(
texture, NULL, NULL, &vec,
0x00FFFFFF | ((BYTE)alpha << 24) // アルファ値を合成する
);
pSprite->End(); // スプライト描画終了
}