Saya mencari cara untuk membuat setiap piksel non-transparan dalam sprite solid white (untuk 'mem-flash' sprite white saat pemain mengalami kerusakan, dll.). Ini ada di Windows Phone 7.
Saya menggunakan custom shader yang sangat sederhana untuk melakukan ini di bawah XNA 3.1, tetapi WP7 tidak mendukung ini dan sulit menemukan alternatif.
Saya menghargai bantuan atau saran. Saya lebih suka tidak harus secara manual membuat salinan putih solid dari setiap sprite di game saya.
xna
shaders
windows-phone-7
Ryan McD
sumber
sumber
Jawaban:
Metode 1
Anda tidak harus membuat versi putih solid dari setiap sprite di game Anda secara manual - Anda bisa mengotomatiskan proses pada waktu pengambilan. Dengan kata lain, Anda dapat menggunakan
Texture2D.GetData()
untuk mengakses piksel tekstur Anda (dan mengambilnya sebagai sederhanaColor[]
), iterate di atasnya menggantikan setiap piksel non-transparan dengan putih solid, dan kemudian simpan ke tekstur baru menggunakan danTexture2D.SetData()
.Metode 2
Saya mencoba bermain-main dengan
BlendState
tetapi tidak bisa menemukan cara untuk membuat semuanya putih, setidaknya tidak dalam batasan profil Jangkauan. Tetapi jika seseorang tahu caranya, beri tahu saya. Apa yang saya temukan, bagaimanapun, adalah cara untuk melakukannya dengan menggunakan buffer stensil danAlphaTestEffect
kelas bawaan. Idenya adalah sebagai berikut:Berikut kode yang saya gunakan:
(Langkah 1) Pertama-tama pastikan backbuffer sedang dibuat dengan ruang untuk buffer stensil:
(Langkah 2) Buat tekstur putih 1x1 yang akan diskalakan untuk mengisi seluruh layar:
(Langkah 3) Dan sekarang bagian yang sulit - render. Yah, tidak terlalu sulit, tetapi membutuhkan dua
DepthStencilState
objek dan satuAlphaTestEffect
objek. Anda harus membuat ini hanya sekali.Dan hasilnya:
sumber