Saat ini saya bermain-main dengan XNA, dan membuat platformer 2D sederhana. Saya sedang berpikir untuk menambahkan beberapa layer untuk membuatnya sedikit tantangan.
Sebagai ganti memiliki Vector2
untuk posisi saya, saya sekarang menggunakan Vector3
, hanya untuk menggunakannya Z
sebagai kedalaman lapisan. Namun, karena Anda tidak dapat menggunakan operator antara Vector2
dan Vector3
karena alasan yang tidak diketahui [1] , saya akhirnya mengubah semua yang lain Vector2
dalam permainan saya, seperti akselerasi , kecepatan , dan offset , sehingga saya dapat melakukan hal-hal seperti position += offset
tanpa kesalahan.
Saya juga mengubah variabel rotasi saya dari float
menjadi Vector3
, dan saya menggunakan Z
nilai untuk memutar tekstur saya. Saya berencana untuk menggunakan X
dan Y
untuk skala-balik tekstur saya, sehingga Anda mendapatkan efek Super Paper Mario.
Namun, setelah mengubah semua ini Vector2
di Vector3
s, saya merasa agak buruk tentang hal itu. Bagaimana ini mempengaruhi kinerja game? Saya tahu saya tidak perlu khawatir tentang kinerja dalam permainan platformer kecil saya, tapi saya hanya ingin tahu tentang hal itu.
Apakah ada kinerja mencolok antara Vector2
s dan Vector3
s, misalnya saat menambahkan atau mengalikan mereka, atau saat memanggil Normalize
, Transform
atau Distance
?
[1] Hanya pertanyaan sampingan, mengapa tidak ada operator untuk penghitungan antara Vector3 dan Vector2?
sumber
Anda mencoba mengoptimalkan secara prematur. Sebagian besar operasi yang Anda sebutkan (menormalkan, mengubah, jarak) cukup banyak identik dengan apa yang dilakukan vector2D, jika Anda dapat melihat kode mereka, Anda akan melihat bahwa mereka praktis sama. Satu-satunya perbedaan adalah vector3D memiliki sumbu ketiga. Kinerja bijaksana itu harus sepele dibandingkan dengan Vector2D.
Adapun pertanyaan sampingan Anda:
Karena Anda tidak dapat melipatgandakan matriks / baris-vektor / kolom-vektor yang keduanya memiliki ukuran yang berbeda.
sumber
Salah satu efek kinerja terbesar dari menggunakan yang
Vector3
tidak perlu, alih-alihVector2
, adalah peningkatan ukuran 50% dan efek yang ada pada cache .Bahwa data tambahan yang tidak perlu perlu dimuat ke dalam cache CPU dari memori utama. Ini sloooow .
Selain itu, dengan memuat data yang tidak perlu ini, Anda meningkatkan kemungkinan mendorong data berguna yang kemudian harus segera dimuat kembali ke cache.
Dalam loop ketat sederhana, efek cache akan membanjiri setiap efek CPU melakukan operasi tambahan.
Juga, lebih cepat untuk menambahkan elemen secara langsung (karena berbagai kebiasaan. NET). Jadi, jika Anda mengoptimalkan mikro, Anda tidak akan menggunakan operasi vektor. Jadi jika Anda hanya perlu menambahkan dua elemen pertama vektor, Anda bisa melakukan ini:
Tetapi pertimbangan kinerja semacam ini hanya benar-benar berlaku untuk hal-hal seperti mesin partikel, mesin fisika, dan sebagainya. Jadi jangan terlalu khawatir!
sumber