โอเคฉันได้อ่านบทความบทช่วยสอนและคำถามเกี่ยวกับเรื่องนี้แล้ว ส่วนใหญ่ชี้ไปที่เทคนิคเดียวกันซึ่งไม่ได้แก้ปัญหาของฉัน ฉันต้องการความสามารถในการสร้างสไปรต์แบบกึ่งโปร่งใส (ของ texture2D จริงๆ) และให้สไปรต์ซ้อนทับอีก
ฉันสามารถทำได้โดยใช้ตัวอย่างโค้ดที่ฉันพบ แต่ฉันไม่พอใจกับผลลัพธ์และฉันรู้ว่ามีวิธีในการทำเช่นนี้ ในการเขียนโปรแกรมมือถือ (BREW) เราทำมันเป็นโรงเรียนเก่าและตรวจสอบแต่ละพิกเซลเพื่อความโปร่งใสก่อนการเรนเดอร์
ในกรณีนี้ดูเหมือนว่าจะทำให้เทพดาด้านล่างมันผสมกับอัลฟาด้านบน นี่อาจเป็นสิ่งประดิษฐ์ของวิธีที่ฉันแสดงพื้นผิว แต่อย่างที่ฉันพูดไปก่อนหน้านี้ทุกตัวอย่างชี้ไปที่เทคนิคนี้ ก่อนที่ฉันจะไปเพิ่มเติมฉันจะไปข้างหน้าและวางรหัสตัวอย่างของฉัน
public void Draw(SpriteBatch batch, Camera camera, float alpha)
{
int tileMapWidth = Width;
int tileMapHeight = Height;
batch.Begin(SpriteSortMode.Texture,
BlendState.AlphaBlend,
SamplerState.PointWrap,
DepthStencilState.Default,
RasterizerState.CullNone,
null, camera.TransformMatrix);
for (int x = 0; x < tileMapWidth; x++)
{
for (int y = 0; y < tileMapHeight; y++)
{
int tileIndex = _map[y, x];
if (tileIndex != -1)
{
Texture2D texture = _tileTextures[tileIndex];
batch.Draw(
texture,
new Rectangle(
(x * Engine.TileWidth),
(y * Engine.TileHeight),
Engine.TileWidth,
Engine.TileHeight),
new Color(new Vector4(1f, 1f, 1f, alpha )));
}
}
}
batch.End();
}
อย่างที่คุณเห็นในรหัสนี้ฉันกำลังใช้วิธี SpriteBatch.Begin มากเกินไปซึ่งจะรวมถึงสถานะการผสมผสาน ฉันเกือบจะเป็นปัญหา ฉันไม่ต้องการเบลนสไปรต์ฉันต้องการให้มันโปร่งใสเมื่ออัลฟ่าคือ 0 ในตัวอย่างนี้ฉันสามารถตั้งค่าอัลฟ่าเป็น 0 แต่มันยังคงแสดงผลกระเบื้องทั้งสองโดยที่ z ด้านล่างสั่งสไปรท์ การผสม นี่ไม่ใช่เอฟเฟกต์ที่ต้องการฉันต้องการสไปรต์ที่สั่ง z สูงกว่าจะจางหายไปและไม่มีผลกับสีที่อยู่ด้านล่างในลักษณะดังกล่าว
ฉันอาจจะออกจากที่นี่เพราะฉันค่อนข้างใหม่กับการพัฒนา XNA ดังนั้นอย่าลังเลที่จะนำทางฉันไปในทิศทางที่ถูกต้องในกรณีที่ฉันลงหลุมกระต่ายที่ไม่ถูกต้อง
TIA