Tôi sẽ chia sẻ phương pháp của mình để áp dụng hiệu ứng chiếu sáng mượt mà cho lưới ô xếp 2D. ClassicThunder answer cung cấp liên kết tốt đẹp cho bóng tối.
Trước hết, chúng tôi sẽ cần phải tính giá trị ánh sáng của mỗi ô sẽ bị mờ sau. Hãy để tôi minh họa cách hoạt động này trước khi tôi nhận được vào mã.

Về cơ bản những gì chúng tôi làm là lặp qua tất cả các gạch, bắt đầu từ phía trên, nếu một ngói là trống, đặt biến CurrentLight
để độ sáng tối đa, nếu chúng ta tìm thấy một gạch vững chắc, thiết lập nó như là CurrentLight
biến và trừ số tiền "hấp thụ" từ số CurrentLight
. Bằng cách này, trên lát gạch tiếp theo của chúng tôi, khi chúng tôi đặt hình xếp thành giá trị CurrentLight
, giá trị này sẽ hơi nhỏ hơn. Quá trình này được lặp lại cho đến khi mảng được lặp lại.
Bây giờ sẽ có hiệu ứng ánh sáng từ trên xuống dưới tốt đẹp, nhưng nó không phải là tuyệt vời. Chúng ta phải lặp lại quá trình này 3 lần nữa, từ dưới lên trên, từ trái sang phải và từ phải sang trái. Và nó có thể được lặp đi lặp lại nhiều lần hơn cho chất lượng tốt hơn.
Về cơ bản chạy mã này trên tất cả các gạch trong vòng lặp
if (tile.Light > CurrentLight) //If this tile is brighter than the last, set the current light to the tiles light
CurrentLightR = tile.Light;
else if (CurrentLight != 0f) //If it is less, and isnt dark, then set the tile to the current light
tile.Light = CurLightR;
if (tile.Light == CurLightR) //If it is the same, subtract absorb values
CurrentLight -= tile.Absorb;
Và có bạn đi, ánh sáng ngói đẹp. Tuy nhiên, nếu bạn muốn một cái nhìn ít "pixelized", bạn có thể kiểm tra của tôi question on gamedev cho điều đó.
-1 Trong 4.0 theo hành vi mặc định (Color * float) không làm thay đổi độ sáng/bóng tối nó làm thay đổi độ trong suốt. http://blogs.msdn.com/b/shawnhar/archive/2010/04/08/premultiplied-alpha-in-xna-game-studio-4-0.aspx – ClassicThunder
@ClassicThunder có cách nào xung quanh nó không? nó nghe có vẻ giống như cách tốt nhất – Neomex