Được rồi, tôi đã đọc một số bài viết, hướng dẫn và câu hỏi liên quan đến điều này. Hầu hết chỉ đến cùng một kỹ thuật không giải quyết được vấn đề của tôi. Tôi cần khả năng tạo các họa tiết bán trong suốt (thật sự của texture2D) và để chúng phủ lên một sprite khác.
Tôi có thể đạt được điều đó với các mẫu mã tôi đã tìm thấy nhưng tôi không hài lòng với kết quả này và tôi biết có một cách để làm điều này. Trong lập trình di động (BREW), chúng tôi đã thực hiện trường cũ và thực sự kiểm tra từng pixel cho độ trong suốt trước khi kết xuất.
Trong trường hợp này, nó dường như làm cho sprite bên dưới nó hòa trộn với alpha ở trên nó. Đây có thể là một sự giả tạo về cách tôi vẽ kết cấu nhưng, như tôi đã nói trước đây, tất cả các ví dụ đều chỉ ra một kỹ thuật này. Trước khi tôi đi xa hơn, tôi sẽ tiếp tục và dán mã ví dụ của mình.
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();
}
Như bạn có thể thấy, trong mã này, tôi đang sử dụng phương thức SpriteBatch.Begin đã quá tải, trong số những thứ khác, trạng thái pha trộn. Tôi gần như tích cực đó là vấn đề của tôi. Tôi không muốn BLEND các sprite, tôi muốn chúng trong suốt khi alpha bằng 0. Trong ví dụ này tôi có thể đặt alpha thành 0 nhưng nó vẫn hiển thị cả hai ô, với sprite dưới z được hiển thị, bị đổi màu vì pha trộn. Đây không phải là một hiệu ứng mong muốn, tôi muốn sprite theo thứ tự z cao hơn mờ dần và không ảnh hưởng đến màu bên dưới nó theo cách như vậy.
Tôi có thể rời khỏi đây vì tôi còn khá mới đối với sự phát triển của XNA vì vậy hãy thoải mái điều khiển tôi đi đúng hướng trong trường hợp tôi đi xuống hố thỏ sai.
TIA