Pekerja web untuk simulasi fisika game HTML5?

12

Sedikit terkait dengan pertanyaan ini .

Idenya adalah untuk menjamin perilaku fisika yang sama sebanyak mungkin. Apakah mungkin untuk menjalankan fisika langkah waktu tetap pada pekerja web? UI akan memperbarui dirinya dengan refresh rate yang berbeda / variabel.

Adakah yang sudah mencobanya?

Petteri Hietavirta
sumber
Apa yang Anda duga dapat diperoleh dengan menggunakan pekerja web? Sejauh ini jawaban saya adalah, itu akan berhasil, tetapi mengapa repot?
aaaaaaaaaaaa

Jawaban:

3

Saya menemukan eksperimen ini . Ini menjalankan fisika Box2d pada pekerja web. Saya belum memeriksa secara detail bagaimana mengatasi masalah yang disebutkan dalam komentar Vincent Scheib.

Petteri Hietavirta
sumber
Eksperimen yang bagus. Saya sudah mengikuti jenis proyek ini juga. Sayangnya, sebagian besar masih terikat pada Java / C. Saya percaya bahwa OP sedang mencari cara untuk melakukan ini secara native di browser (tanpa plugin).
Kevin Peno
2
Artikel tentang hal yang sama oleh seorang pria google: t.co/AuhPptB
sorenbs
2

Ini bisa berhasil, namun WebWorkermengikuti pola pengamat , document(halaman html yang memiliki pekerja) hanya dapat mendengarkan dan memposting pesan ke / dari pekerja. Dari situ, ada beberapa opsi, kurasa. Dalam semua kasus, saya pikir Anda perlu mencari cara untuk menentukan FPS optimal dari agen pengguna untuk mengoptimalkan informasi. Maka Anda bisa:

  • Beri tahu pekerja untuk mengirim pesan pada interval waktu tersebut
    • Kelemahan (s?): Anda harus menganggap bahwa documentakan siap untuk respons ketika itu terjadi.
  • Katakan pada documentuntuk mengirim pesan kepada pekerja yang meminta fisika pada interval waktu x, maka pekerja akan mengirim respons (semoga) tidak lama setelah itu.
    • Kekurangannya: karena semua posting dan tanggapan asinkron, mungkin ada penundaan antara permintaan dan respons dari pekerja. Dalam hal ini Anda juga harus membatalkan onmessageacara untuk mencegah Anda documentdari mendengarkan ketika itu tidak diharapkan.

Saya yakin ada hal-hal lain yang saya lewatkan atau cara untuk menangani komunikasi juga. Saya akan menantikan jawaban lain tentang masalah ini sendiri!

Kevin Peno
sumber
1
a) Perhatian terkait kinerja! Pertimbangkan permintaanAnimationFrame dan beri tanda 'tetap hidup' untuk pekerja Anda darinya, sehingga Anda tidak membakar CPU jika tab diletakkan di latar belakang (mungkin terlalu lama)
Vincent Scheib
b) IIRC Semua pesan dari pekerja akan diterima di utas utama, mereka akan mengantri. Pikirkan dampak apa yang akan terjadi pada utas utama Anda, jika Anda mendapat 5 pembaruan tetapi hanya membutuhkan yang terbaru. Anda juga tidak dapat mengatakan bahwa Anda memiliki lebih banyak kedatangan.
Vincent Scheib
c) Semua pesan membuat salinan data. Semakin banyak data yang harus Anda kirim di antara utas, semakin banyak penyalinan data dan pekerjaan pengumpulan sampah. Jadi, kemenangan di sini hanya akan ada jika ada rasio data perhitungan / pesan yang tinggi.
Vincent Scheib
@Vincent, mengenai B) itu sebabnya saya mengatakan bahwa Anda harus documentselalu siap dengan menemukan fps yang masuk akal atau pergi dengan opsi 2 di mana pekerja tidak melakukan apa-apa sampai documentmemintanya.
Kevin Peno
2

Physijs menggunakan pekerja web. Ini menempelkan fisika amunisi dengan objek Three.js dan memperbaruinya sesuai kebutuhan. Ini fitur baik langkah waktu tetap dan cairan, saya percaya

ebaum
sumber