Godot: fungsi setget dipanggil untuk penugasan sendiri

Dibuat pada 12 Nov 2016  ·  3Komentar  ·  Sumber: godotengine/godot

Saya tidak tahu apakah ini perilaku yang dimaksudkan atau tidak (jika ya, maaf, tutup saja masalah ini), tetapi ini jelas tidak boleh diizinkan!

Mari kita katakan,
1) Saya ingin variabel foo memiliki nilai 1 secara default,
2) dan itu mengubah nilainya ketika pengguna berinteraksi dengan cara apa pun (misalkan input).
3) Setelah pengguna selesai, nilai foo harus memiliki nilai 1 lagi.

Yang terjadi di sini adalah, fungsi-fungsi yang terkait dengan setget dipanggil setiap kali nilainya diset ke 1 padahal sudah 1, harus dipanggil sekali (pertama kali) ketika nilai aslinya berbeda. Ini agak mematikan kinerja saya, saya tahu saya bisa melakukan ini:

if (new_value == old_value):
   return

Tapi ini harus dilakukan secara otomatis.

feature proposal gdscript

Komentar yang paling membantu

tidak layak melanggar kode lama menurut saya ketika ada solusi sederhana (saya memiliki kode yang menggunakan setter untuk menampilkan pemberitahuan kepada pengguna untuk upaya penetapan nilai yang sama).

Semua 3 komentar

Saya tidak berpikir itu adalah ide yang baik untuk melakukan ini secara otomatis. Menyetel variabel dengan nilai yang sama seharusnya tidak memengaruhi kinerja, ini adalah sesuatu yang harus ditangani oleh fungsi setget jika diperlukan. Juga, menambahkan pemeriksaan nilai _will_ mempengaruhi kinerja karena itu adalah satu percabangan baru (secara konseptual tidak dibutuhkan).

Saya juga tidak berpikir kita bisa berasumsi bahwa pengaturan nilai yang sama tidak akan berdampak pada setter dan dengan demikian dapat dilewati.

Ini terlihat bahwa Anda memiliki setter yang sangat rumit jika pengaturan satu nilai setiap kali dapat membuat kinerja seperti itu menjadi hit.

Yah, biasanya, ketika Anda hanya melakukan tugas mandiri itu tidak akan menjadi masalah, tetapi jika Anda melakukan lebih banyak pekerjaan daripada menetapkan nilai baru, seperti apa itu "setget", itu akan merusak kinerja. Terutama jika nilainya tetap tidak berubah dan ditetapkan sendiri setiap frame.

Selain itu, semua kompiler C++ (yang saya tahu) melindungi Anda dari kekejaman semacam itu. (Setidaknya untuk tipe dasar, operator penetapan kelebihan beban Anda membatalkan perlindungan ini) Sebenarnya, saya telah melihat beberapa kode menegaskan memeriksa itu untuk melihat apakah nilainya tetap sama setelah penetapan sendiri untuk nomor float di CPU amd. Itu dilakukan sebagai pemeriksaan kewarasan untuk beberapa proyek saya lupa apa namanya.

tidak layak melanggar kode lama menurut saya ketika ada solusi sederhana (saya memiliki kode yang menggunakan setter untuk menampilkan pemberitahuan kepada pengguna untuk upaya penetapan nilai yang sama).

Apakah halaman ini membantu?
0 / 5 - 0 peringkat