2

ゲーム開発を始めたばかりで、TankwarsやWormsのようなゲームがいいと思いました。これまで考えられる最も難しい部分は、地形を破壊可能にすることです。簡単な部分を実行する前に、それがどのように行われるかを知りたいと思います。

爆発には、さまざまな武器に合わせて拡大縮小できるマスクテクスチャが含まれる可能性があると思いました。次に、そのマスクを使用して、下にある地形を透明にする必要があります(オプションで暗い境界線を描画します)。 (出典:mikakolari.fi

どうすればそれを達成できますか?アルファ値をピクセルごとに変更する必要がありますか、それとも何らかのマスキング手法を使用できますか?地形の上に青い円を描くことはできません。

XNAのバージョン3.1と4.0があります。

4

3 に答える 3

3

このチュートリアルはあなたが探しているものです:http: //www.riemers.net/eng/Tutorials/XNA/Csharp/series2d.php

キャプター20:爆裂火口の追加

つまり、2つのテクスチャがあります。1つのカラーテクスチャ(表示)、1つの衝突テクスチャ(非表示)衝突テクスチャから爆発画像を差し引きます。暗い境界線を取得するには:爆発テクスチャを展開し、この領域の色を暗くします。ここで、新しいカラーテクスチャを生成します(古い色-コリソン=新しい色)。

于 2011-01-16T00:14:34.300 に答える
1

これは答えるのが難しい質問です-あなたがそれをすることができる多くの方法があるので。そして、それぞれの方法には賛否両論があります。概要を説明します。

全体的なデザインとして、元のテクスチャ、適用された「暗さ」、および適用された「透明度」を追跡する必要があります。私がほぼ確実に言えることの1つは、爆発の結果をどこかに「蓄積」したいということです。やりたくないのは、これまでに発生したすべての爆発のリストを維持することです。

つまり、テクスチャ、暗さ、透明度のサーフェスがあります。おそらく、「通常」、「暗さ」(または暗さのレベル)、「透明」を格納する単一のチャネルを使用して、暗さと透明度を1つのサーフェスにマージできます。

おそらく、暗いリングが交差する場所で徐々に暗くなることを望まないため、max関数(Math.MaxC#)を使用して暗闇レイヤーに爆発を適用する場合。

最終的なテクスチャを作成するには、暗さ/透明なテクスチャから元のテクスチャまたはそのコピーに書き込むだけです(各爆発が接触する領域を更新するだけで済みます)。

または、ピクセルシェーダーを使用してそれらを組み合わせることができます。詳細は、この質問の範囲を超えています。(また、ピクセルシェーダーはWindows Phone7のXNA4.0では機能しません。)

于 2010-10-08T15:39:05.140 に答える
0

目的のピクセルの色で新しいTexure2Dを作成する必要があります。Alpha=0。

Color[] bits = new Color[Texture.Width * Texture.Height];
Texture.GetData(bits);

foreach(Vector2D pixel in overlapedArea)
{
   int x = (int)(pixel.X);
   int y = (int)(pixel.Y);

   bits[x + y * texture.Width] = Color.FromNonPremultiplied(0,0,0,0));
}

Texture2D newTexture = new Texture2D(texture.GraphicsDevice, texture.Width, texture.Height);
newTexture.SetData(bits);

新しいTexture2DをLastTextureに置き換えれば、準備は完了です。

衝突に関する詳細なコード、またはテクスチャピクセルの色の変更については、次のページにアクセスしてコードを確認してください:http: //www.codeproject.com/Articles/328894/XNA-Sprite-Class-with-useful-methods

于 2012-02-11T23:53:46.420 に答える