Bagaimana Anda mem-blit / menggambar sprite di Pygame dengan opacity lebih rendah? [duplikat]
Saya mencoba memancarkan kabut ke dalam game, tetapi saya mengalami masalah di mana saya menyadari bahwa kabut terlalu tebal / opasitas hingga tinggi. Saya ingin blit dengan opacity yang lebih rendah, tapi saya tidak terlalu yakin bagaimana dan tutorial yang saya temukan secara online tidak berfungsi / sudah mengharapkan Anda untuk tahu caranya.
Kalau-kalau Anda bertanya-tanya bagaimana kode itu ditulis:
screen.blit(fog, (0, 0))
EDIT: Saya menggunakan Python 3.8, kalau-kalau itu penting
EDIT EDIT: Saya menggunakan Pygame 2.0.0, kalau-kalau itu juga penting
Jawaban
Anda tidak membelah pada opasitas yang lebih rendah, Anda membelah permukaan yang memiliki opasitas lebih rendah.
Gunakan surface.set_alpha()
untuk mengubah keburaman kabut sebelum Anda memudar.
Dokumen: https://www.pygame.org/docs/ref/surface.html#pygame.Surface.set_alpha
Juga, jika Anda memuat kabut dari sebuah gambar, pastikan untuk menggunakannya surface.convert_alpha()
, atau itu tidak akan mencatat transparansi dalam format gambar.
blit()sebenarnya memadukan Surface ke target Surface , tergantung pada channel alpha dari permukaan . Yang harus Anda lakukan adalah mengubah saluran alfa fog
. Gunakan set_alpha()untuk menyetel nilai alfa untuk gambar permukaan penuh:
Tetapkan nilai alfa saat ini untuk Surface. Saat membelah Surface ini ke tujuan, piksel akan digambar sedikit transparan. Nilai alfa adalah bilangan bulat dari 0 hingga 255, 0 sepenuhnya transparan dan 255 sepenuhnya buram.
Jika Anda ingin menerapkan kabut transparan 50%:
fog.set_alpha(127)
screen.blit(fog, (0, 0))