Tentang
Ini sebenarnya adalah dua pertanyaan dalam satu. Pertama-tama saya mencari cara untuk secara efisien menyimpan data ubin dalam jumlah besar. Aspek lain berkaitan dengan permintaan set data dan menampilkan ubin. Biarkan saya memberi Anda latar belakang terlebih dahulu.
Kami membuat game taipan multipemain berbasis browser menggunakan perpustakaan CraftyJS untuk merendernya ke Canvas. Di latar belakang GUI kami menjalankan Yii Framework pada PHP dan semuanya terhubung ke generator peta dan mesin gim Python acak.
Beginilah tampilan peta kasar pertama terlihat: http://i.imgur.com/khAXtl.png
Menyimpan data peta
Dunia game dihasilkan secara acak setiap kali game dimulai. Ukurannya adalah 100x100 ubin heksagonal untuk setiap pemain. Itu berarti bahwa untuk permainan tiga pemain, ada 90.000 ubin yang dibuat. Saat ini saya baru saja membuat array JavaScript tempat saya membuat peta.
Ini berfungsi dengan baik untuk rendering, tetapi untuk segala jenis interaksi dengan peta kita perlu menyimpan pemain mana yang memiliki ubin, struktur seperti apa yang dibangun di atasnya, berapa harga saat ini dan seterusnya. Pada awalnya, setidaknya untuk prototipe, kami ingin menggunakan MySQL, tetapi setelah beberapa pengujian, tidak secepat secepat yang saya inginkan. Mungkin penyimpanan objek seperti MongoDB akan lebih cocok untuk menyimpan data ubin daripada tabel SQL. Atau mungkin sesuatu yang lain?
Menampilkan peta
Masalah lain yang saya lihat adalah bergerak di sekitar peta. Saat ini saya sedang membuat entitas Crafty untuk setiap ubin meskipun itu tidak ada di viewport. Ini lambat, karena meskipun Crafty hanya membuat yang ada di viewport, Crafty menyimpan dan mungkin mengulangi semua ubin pada setiap acara render. Apa yang saya miliki saat ini adalah peta yang dibuat tergambar yang sangat lambat untuk memuat dan gagap ketika Anda bergerak, sekarang saya ingin membuatnya dimainkan.
Ide pertama saya adalah memuat subset ubin yang ditampilkan di viewport. Tetapi ketika seorang pemain akan memindahkan viewport ke area kosong, saya harus meminta server dan menunggu respon kembali, baru kemudian peta dapat di-render. Ini akan baik-baik saja dalam aplikasi asli, tetapi itu lamban dalam permainan web.
Cara untuk mendapatkan kinerja yang lancar dari peta bisa preloading subset ubin yang lebih besar ke dalam array javascript dan menggunakannya sebagai cache. Pemain akan memiliki beberapa layar "di-cache" dan ketika dia memindahkan viewport, saya akan memuat lebih banyak ubin ke "cache" JS.
Apakah saya menuju ke arah yang benar? Saya ingin mendapatkan lebih banyak informasi dari seseorang yang telah melakukan hal serupa. Saya baru dalam pengembangan game, tetapi telah melalui banyak sumber selama beberapa minggu terakhir.