Bagaimana Anda mem-blit / menggambar sprite di Pygame dengan opacity lebih rendah? [duplikat]

Dec 12 2020

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

1 Starbuck5 Dec 12 2020 at 06:17

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.

Rabbid76 Dec 12 2020 at 15:45

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))