1

現時点では、現在のアイデアよりも少し効率的な別の解決策が見つからないように見える問題があります。

ランダムに生成されたパスが移動する XNA を使用して小さなゲームを作成していますが、線がランダムに生成されるため、線の上と下のテクスチャを分離する方法がわかりません。この画像が問題を説明できることを願っています:

ここに画像の説明を入力

したがって、行はランダムに追加されます。私自身のアイデアは、高さの異なる長方形をたくさん作成し、それらを隣り合わせに配置することでしたが、それは少し効率が悪いと思います。また、長方形が少し広くなるように、線を十分に太くする必要があります。そうしないと、線の近くに「空の」スポットが表示される場合があります。

ご不明な点がございましたら、お気軽にお問い合わせください。質問に追加しますが、私の問題は十分に明確であると思います。

4

2 に答える 2

2

不要なピクセルを透明ピクセルに置き換えることができます。

//extract pixel data from texture
Texture2D topTexture = ...
Color[] topTextureData = new Color[topTexture.Width * topTexture.Height];
topTexture.GetData<Color>(topTextureData);

for(int x = 0; x < topTexture.Width; x++)
{
    //depending on how you represent lines, set transparent all the pixels at and below line
    //basically, for each x dimension, you find where the line is - you have to
    //write the method for getting this y, as I don't know how you represent lines
    int lineY = GetLineYAtThisX(x);

    //all the pixels at (and below) the line are set transparent
    for(int y = lineY; y < topTexture.Height; y++)
    {
        topTextureData[x + y * topTexture.Width] = Color.Transparent;
    }  
}

//save this data into another texture, so you don't ruin the original one.
Texture2D maskedTopTexture = new Texture2D(GraphicsDevice, topTexture.Width, topTexture.Height);
maskedTopTexture.SetData<Color>(topTextureData);

一番下のものに対してこれを行う必要さえありません。その上に一番上のものを描くだけです。

于 2012-11-04T17:48:29.003 に答える
1

この問題の 1 つの解決策は、選択した領域の外側のテクスチャを覆い隠すマスキング テクスチャを作成することです。

マッドスキル登場!

黒い部分は描画されません。他のテクスチャに対して反対のことを行うと、必要なものが得られます。

その上で spritebatch を使用する方法はわかりませんが、問題の一般的な解決策はおそらくマスクを使用することです。

于 2012-11-04T14:06:24.527 に答える