Apa yang seharusnya terjadi selama layar "Memuat"?

19

Apakah saya hanya perlu membuat instance dari semua gambar saya ke dalam memori yang diambil dari file? Apa cara terbaik untuk menangani ini? Apakah saya hanya memerlukan semacam manajer aset yang membuat instance grafik ini selama layar pemuatan dan kemudian dirujuk kemudian?

Apa hal-hal umum yang perlu dimuat di dalam game? Berapa yang harus saya muat sebelumnya?

Apakah layak menampilkan semacam bilah kemajuan? Bagaimana saya bisa mempersingkat waktu muat? Seperti apa tampilan layar pemuatan?

Apa saja contoh bagus dari memuat layar? Adakah contoh kode?

Secara khusus, permainan saya adalah untuk Andriod (Java / ponsel), tetapi jangan ragu untuk membuat jawaban Anda menjadi umum.

Bryan Denny
sumber
2
Saya tahu bahwa ini tidak secara spesifik apa yang Anda minta, tetapi saran saya untuk apa yang seharusnya terjadi selama layar pemuatan adalah: Sesuatu yang Menarik! :) Hibur pemain dengan sedikit cerita (seperti cutscene), minigame, atau mungkin sudah menunjukkan menu sejauh mungkin.
Bart van Heukelom

Jawaban:

13

Hal-hal yang umum untuk dimuat sebelumnya adalah apa pun yang Anda perlukan secara waktu nyata. Simpan konsep seperti clipmaps dan megatextures (di mana idenya adalah memuat bagian-bagian yang Anda butuhkan, dan memperbaruinya secara iteratif saat Anda berkeliling dunia), Anda akan ingin menyimpan semua yang Anda butuhkan untuk level / area / apa pun Anda dalam memori daripada pada disk. IO adalah sloooow, dan Anda tidak ingin memuat tekstur Anda ketika Anda berbelok di tikungan dan akan segera ditampilkan. Yang saya maksud adalah tekstur, suara, jerat, meta data ... semuanya.

Jika Anda dapat menampilkan bilah progres (yaitu Anda memiliki pemetaan yang akurat tentang langkah-langkah pemuatan hingga persentase), maka tentu saja tunjukkan. Jika tidak, setidaknya tampilkan sesuatu, seperti pesan teks pendek atau indikator memuat, yang diperbarui setelah setiap langkah sehingga Anda setidaknya dapat mengetahui bahwa sesuatu sedang terjadi.

Jika ada sesuatu yang Anda tahu akan dibutuhkan, tetapi tidak segera, Anda dapat memuatnya di latar belakang, dan menghentikan permainan (tidak hebat, tetapi pastikan itu jarang terjadi) jika itu diperlukan terlalu dini. Ini akan membantu Anda menjaga waktu muat. Saya tidak tahu banyak tentang pengembangan android, atau apakah itu akan terlalu banyak untuk perangkat untuk menangani di samping permainan, tetapi biasanya agak ringan pada CPU sehingga seharusnya tidak ada masalah besar di sana.

Falstro
sumber
19

Anda harus "Reticulating Splines"

ASHelly
sumber
2
Haha, referensi yang bagus :)
Bryan Denny
Meskipun ini jelas sebuah lelucon, +1 untuk referensi contoh yang bagus untuk menjaga pemain tetap sibuk selama memuat. Seperti teknik sederhana yang melibatkan usaha lebih dari menambahkan teks omong kosong. "Don't Starve" adalah contoh lain dari game yang melakukan ini dengan baik, dan juga secara kebetulan (atau tidak) juga melibatkan "Reticulating": dont-starve-game.wikia.com/wiki/World_Generation_Screen
twiz
3

Tergantung jika Anda menggunakan satu layar pemuatan dan transisi level instan atau banyak pemuatan.
Saya akan mengatakan bahwa yang terakhir akan lebih baik di memori.
Sesuatu seperti:
//First loading screen
Load menu layouts or whatever
Load GUI assets
Show something to pass the time
Switch to menu

//In between levels
Remove any graphics specific to the last level - get rid of something that isn't going to reappear like a boss.
Load level graphics that haven't already been loaded
Again, show progress or something to pass the time

Dan ketika Anda memuat, pastikan untuk tidak memiliki layar hitam. Atau dalam hal ini, layar statis. Banyak kali saya melihat gambar statis untuk sementara waktu di awal aplikasi, dan segera berpikir itu jatuh.
Cara yang baik untuk melibatkan pemain hanyalah latar belakang adegan yang digambar dengan baik, atau referensi alur cerita; bilah pemuatan dengan / tanpa persentase, selama itu bukan 'Memuat' statis; dan mungkin beberapa informasi.

Bebek Komunis
sumber
1
Namun, demi Pete, jika Anda memiliki bilah pemuatan animasi dengan persentase, buatlah agar itu bergerak secara bertahap dan akurat alih-alih tetap pada 10% untuk 90% dari waktu dan kemudian melompat ke 100%. Jika Anda memiliki animasi memuat non-persentase, setidaknya buatlah agar polling itu memuat - dengan cara itu Anda bisa menghentikannya saat memuat macet karena suatu alasan. Saya melihat terlalu banyak game yang menghidupkan animasi pemuatan di utas mereka sendiri, dan ketika utas pemuatan terhenti, animasi tersebut dapat dimainkan dengan senang hati. Itu agak mengalahkan tujuan animasi loading.
Kaj
Saya bisa setuju sepenuhnya di sana. Saya tidak berpikir itu akan dilakukan dengan baik jika melompat seperti itu.
Bebek Komunis
2

Pada platform iphone dan Android, Anda harus memuat semua tekstur dan suara. Memuat tekstur dan suara sangat lambat pada ponsel lama seperti iphone 2G, 3G atau G1. Anda tidak dapat melakukannya di dalam gim.

Ellis
sumber
2

Seperti yang orang lain katakan, jika Anda dapat memuat semua data level sebelum mulai memainkannya, maka Anda akan memiliki kinerja yang jauh lebih baik. Ini adalah sumber umum dari hambatan dalam waktu bingkai untuk memuat aset selama bermain game.

Hal-hal umum yang harus dilakukan selama layar memuat adalah gambar latar belakang statis, level yang sangat sederhana, beberapa tips dan trik tentang cara bermain, animasi cepat, dll.

Ini layar pemuatan untuk APB. Cukup keren. :) http://www.youtube.com/watch?v=p5STix1t_1E&feature=related

Berikut beberapa kode semu untuk menampilkan bilah progres di layar pemuatan:



LoadScreen::Init()
{
  mAssetsToLoad.add("Background.png");
  mAssetsToLoad.add("Player.png");
}

LoadScreen::Update()
{
  mProgress += 1;
  mAssetManager.load(mAssetsToLoad.top());
  mAssetsToLoad.pop();

  if mAssetsToLoad.empty()
    mDone = true;
}


LoadScreen::Draw()
{
  for( int i = 0; i != mProgress; ++i)
  {
     Vector2 pos(i*mProgressPartTexture.Width, 100);
     DrawProgressBarPart(pos, mProgressPartTexture);
  }
}

Ugh, terpaksa menggunakan! = Karena itu menghentikan rendering kode ketika saya menggunakan <

Srekel
sumber
1
Wow, layar pemuatan APB terlihat sangat keren :)
Bryan Denny
Jika Anda membuat indentasi kode Anda dengan empat spasi alih-alih menggunakan tag <pre> <code>, Anda akan dapat menggunakan <bukannya! = Tanpa melanggar format.
mmyers
mmyers, yeah, tapi itu menyebalkan. Mengapa tidak ada hanya tag kode khusus?
Srekel
1

Memuat layar dapat digunakan untuk menyembunyikan apa saja; memuat aset, koneksi apa pun yang perlu dibuat (tcp, dll), mengisi peta dengan objek game, dan inisialisasi.

Cara saya cenderung membahas berbagai hal adalah memiliki semacam manajer aset (atau mungkin manajer untuk setiap jenis aset - suara, grafik, dll.) Dan minta mereka memuat apa yang akan digunakan ke dalam memori. Maka biarkan game Anda mengeluarkan referensi dari para manajer.

Menampilkan bilah kemajuan, menentukan apa yang harus dimuat, dll. Tampaknya tergantung pada proyek Anda, waktu pemuatan dan selera Anda. Bilah progres bagus jika akurat dan bebannya panjang (senang mengetahui berapa lama Anda harus menunggu).

Dengan itu, di ponsel android saya, saya cenderung menyukai aplikasi yang memiliki kebiasaan sendiri, memuat layar dengan selera tinggi. Tidak perlu bilah, tetapi animasi memberi tahu pengguna program yang berfungsi. Saya percaya Android memiliki bilah default yang dapat Anda gunakan, yang berfungsi dengan baik.

Inilah pertanyaan SO yang mungkin menarik bagi Anda.

cmjreyes
sumber
1

Perlu dicatat bahwa platform dengan persyaratan kontrol kualitas (mis. X360, PS3, DS, dll.) Semuanya mengharuskan Anda untuk memiliki beberapa bentuk animasi di layar pemuatan (atau bahkan layar apa pun yang tetap statis selama lebih dari beberapa detik). ).

Ini karena jika tidak, pengguna mungkin berpikir bahwa game Anda telah mogok, padahal sebenarnya hanya membutuhkan waktu lama untuk dimuat. Bahkan di mana ini bukan keharusan, saya pasti akan menyarankannya.

Segala bentuk animasi baik-baik saja, tetapi bilah kemajuan sederhana mungkin bukan yang terbaik, karena langkah-langkah besar dalam pemuatan dapat mengakibatkan bilah kemajuan tidak bergerak sama sekali untuk sementara waktu, artinya layar sama statisnya seolah-olah ada tidak ada bar sama sekali. Lebih baik menunjukkan beberapa gambar yang terus bergerak, seperti ikon yang berputar, di samping indikator progres.

MrCranky
sumber
1
Tentu saja, jika pemuatnya memuat secara tidak sinkron, Anda harus dapat menyurvei kemajuannya sehingga Anda dapat memperbarui persentase dengan lebih akurat. Dengan cara itu pemain tahu bahwa jika ia terjebak pada persentase, ada sesuatu yang salah. Juga, seperti yang saya katakan di tempat lain, tolong jangan perbarui animasi tanpa benar-benar memeriksa dengan utas pemuatan Anda apakah masih berjalan, atau Anda akan dengan senang hati berputar sementara permainan secara efektif terhenti.
Kaj
1

Untuk memuat layar di Conquest , saya pergi dengan sedikit deskripsi misi (tipe permainan apa itu, serta sedikit alur cerita untuk misi), dan beberapa bantuan dasar pada perintah.

Di latar belakang, saya memuat suara. Grafik semua dimuat sesuai permintaan, dan itu tampaknya bekerja cukup baik untuk permainan kami, tetapi suara adalah beruang, jadi saya memuat semua suara yang diperlukan untuk misi. Tombol Memuat / Mulai dinonaktifkan hingga semuanya dimuat, tetapi saya tidak memiliki jenis animasi apa pun (yang merupakan hal yang baik untuk ditambahkan).

Ini adalah pertandingan pertama kami, jadi kami masih banyak belajar, tetapi sejauh ini kami berhasil.

Layar muat penaklukan

Matt McMinn
sumber