Saya tahu sedikit tentang pemrograman game tetapi ingin belajar lebih banyak. Saya mencoba memahami kode untuk game ini . Saya mencoba memahami mengapa kode ini meneruskan "delta" ke Shipcontrols.js, yang mengubah arah kapal berdasarkan input pengguna.
Pada dasarnya gim ini menghitung "delta" setiap loop ...
Ini adalah versi singkatan dari stack yang menggunakan delta melalui satu loop ...
var delta = now - this.time;
this.time = now;
this.current.render.call(this.current, delta, this.renderer);
Langkah-langkah ke sini ...
ctx.manager.add("game", scene, camera, function(delta, renderer)
{
if(delta > 25 && this.objects.lowFPS < 1000) this.objects.lowFPS++;
var dt = delta/16.6;
this.objects.components.shipControls.update(dt);
Langkah-langkah ke sini ...
bkcore.hexgl.ShipControls.prototype.update = function(dt)
{
var pitchAng;
var yaw;
var roll;
if (undefined != hand){
Yang melakukan hal-hal seperti ini ...
if(this.key.forward)
this.speed += this.thrust * dt;
else
dan ini...
if(this.key.right)
{
angularAmount -= this.angularSpeed * dt;
Apa gunanya delta di sini? Apakah itu hanya mencoba memperkenalkan unsur keacakan? Kode untuk game ini sangat bagus. Kenapa orang ini menggunakan delta?
physics
game-loop
control
motion-control
bernie2436
sumber
sumber
Jawaban:
Ini adalah "delta waktu." Sudah berapa lama waktu berlalu sejak pembaruan sebelumnya. Penting untuk memastikan bahwa animasi, fisika, dan sebagainya berjalan dengan kecepatan yang tepat.
Kode berjalan sekali per pembaruan bingkai. Namun, tidak ada jaminan bahwa frame digambar dengan kecepatan konstan. Satu frame mungkin membutuhkan 1/60 detik dan yang berikutnya mungkin 1/30. Jika Anda tidak mengukur dan memperhitungkan hal ini, permainan akan gelisah dan berjalan terlalu cepat atau terlalu lambat dalam berbagai keadaan.
Delta waktu sering diterapkan dalam fisika karena itulah bagaimana persamaan tersebut ditentukan untuk integrasi Euler sederhana. Mengintegrasikan kecepatan ke posisi didefinisikan sebagai
x1 = x0 + v * (t1 - t0)
yang disederhanakan menjadi seperti kodex += v * dt
. Oleh karena itu, delta waktu diperlukan untuk mengevaluasi pembaruan fisika.Sangat, sangat normal untuk delta waktu untuk diukur dan diterapkan.
sumber
"Delta", "d" atau "Δ", berarti "perbedaan" dalam konteks matematika . Setiap kali ada perbedaan perbedaan antara dua angka dengan makna yang sama, perbedaan itu dapat disebut "delta", atau "d".
Delta sangat umum dalam pengembangan game. Misalnya, perbedaan antara koordinat X karakter satu detik yang lalu dan koordinat X sekarang dapat disebut "delta x", dan biasanya dilambangkan sebagai
dx
,delta_x
ataud_x
.Juga, sangat umum untuk memiliki perbedaan antara dua kali, seperti yang Anda miliki dalam kode Anda:
Dalam hal ini, variabel tersebut menunjukkan perbedaan antara beberapa waktu yang disimpan
this.time
, dan waktu yang disimpannow
.Delta biasanya digunakan untuk mewakili perubahan sesuatu dalam waktu. Jadi misalnya, jika Anda tahu bahwa koordinat X pemain harus mengubah 5 piksel setiap frame, Anda dapat menyimpan perubahan ini sebagai delta:
Dan kemudian gunakan delta itu untuk menerapkan perubahan kapan pun Anda membutuhkannya:
Tetapi ingat bahwa ini hanya sebuah konvensi. Tidak ada yang memaksa Anda untuk menamai variabel Anda "delta" atau "d", tetapi hal itu dapat membantu orang lain yang membaca kode Anda, atau diri Anda jika Anda membacanya di masa depan, untuk memahami apa yang seharusnya dilakukan variabel.
Huruf Yunani umum lainnya yang banyak digunakan dalam pemrograman adalah:
Epsilon : untuk nilai yang sangat kecil. Biasa digunakan ketika membandingkan floating point, atau variabel lain dengan masalah presisi:
Pi : untuk konstanta eponymous
Theta : untuk mewakili sudut
Lambda : untuk mewakili fungsi atau penutupan anonim
sumber
dt
singkatandelta time
. Ini digunakan dalam perhitungan frame rate untuk memastikan game berjalan pada kecepatan yang sama, apa pun frame rate-nya.Informasi lebih lanjut
framerate independence
dapat ditemukan di sini .sumber
dt (delta time) adalah waktu antara setiap siklus / render frame (atau cap waktu yang Anda inginkan) dari loop Anda. Dengan waktu delta ini kita dapat meregangkan nilai-nilai tertentu seiring waktu. Sama seperti di dunia nyata kita mengukur sifat fisika tertentu dari waktu ke waktu.
Katakanlah kita menjalankan game kita 60 frame per detik. Jika kami ingin pemain kami bergerak 5 piksel per detik, kami melakukannya
atau
Karakter bergerak 5 piksel lebih dari 60 bingkai. Semakin lama siklus Anda, semakin besar waktu delta yang didapat.
Untuk setiap framerate (1/30, 1/25, dll) hasilnya akan sama.
sumber