SACT2 for System4.x

SP_GET_UNUSE_NUM

使用されていない(登録されていない)スプライト番号を取得します。

int SP_GET_UNUSE_NUM(int nMin = 1, int bCreate = true);

引数

nMin

番号の最小値

省略した場合は1

bCreate

SP_GET_UNUSE_NUM を呼び出した時点で仮スプライト(1x1の透明スプライト)を 作成するか否かのフラグ。

true作成する(デフォルト)
false作成しない

戻り値

スプライト番号

解説

スプライト番号について

取得されるスプライト番号は、 nMin(省略した場合1)以上の使用されていないスプライト番号の中で最小のものになります。

たとえば、何もスプライトが登録されていない状態で、

int a = SP_GET_UNUSE_NUM(1000);
int b = SP_GET_UNUSE_NUM(1000);
int c = SP_GET_UNUSE_NUM(1000);

と呼び出すと、a=1000,b=1001,c=1002となります。

bCreate(仮スプライト作成フラグ)について

※以下の説明は、bCreateをfalseに設定する場合の注意事項です。 デフォルトのまま使用する場合は、特に見る必要はありません。

まず、間違いの例を挙げます。

//【間違いの例】
//nSP1,nSP2のそれぞれに新しいスプライト番号を取得したい
int nSP1 = SP_GET_UNUSE_NUM(,false);
int nSP2 = SP_GET_UNUSE_NUM(,false);

この例では、2番目の SP_GET_UNUSE_NUM を呼び出した時点ではnSP1番のスプライトは作成(登録)されていないため、 nSP2はnSP1と同じ値になってしまいます。

この現象を簡単に回避するには、bCreateフラグを省略(デフォルトのtrueを使用)し、

//【正しい例1】
//nSP1,nSP2のそれぞれに新しいスプライト番号を取得したい
int nSP1 = SP_GET_UNUSE_NUM();
int nSP2 = SP_GET_UNUSE_NUM();

のようにします。ただし、この場合引数の説明に書いたように SP_GET_UNUSE_NUM を呼び出す毎に1x1の仮スプライトが無駄に作成されます。

通常の使用では、上記の無駄は無視できる範囲だと思いますが、 パフォーマンスが気になる場合には

//【正しい例2】
//nSP1,nSP2のそれぞれに新しいスプライト番号を取得したい
int nSP1 = SP_GET_UNUSE_NUM(,false); SP_SET_CG(nSP1, 1001);
int nSP2 = SP_GET_UNUSE_NUM(,false); SP_SET_CG(nSP2, 1002);

のように書けば無駄は省けます。ただし、場合によってはコードの見通しが悪くなったり、 書き間違えのもとになるかもしれません。

その場合、以下のように、専用の関数をそれぞれの場合に応じて作成するのもひとつの方法です。

//CGをセットして新しいスプライトを作成する関数
int スプライト作成(int nCG)
{
    int nSP = SP_GET_UNUSE_NUM(,false);
    SP_SET_CG(nSP, nCG);
    return nSP;
}

//呼び出し側の例
    int nSP1 = スプライト作成(1001);
    int nSP2 = スプライト作成(1002);