สิ่งที่ควรเกิดขึ้นระหว่างหน้าจอ "กำลังโหลด"


19

ฉันต้องสร้างอินสแตนซ์ของกราฟิกทั้งหมดของฉันลงในหน่วยความจำที่โหลดจากไฟล์หรือไม่ วิธีที่ดีที่สุดในการจัดการกับสิ่งนี้คืออะไร? ฉันต้องใช้เครื่องมือจัดการสินทรัพย์ที่สร้างอินสแตนซ์กราฟิคเหล่านี้ระหว่างหน้าจอการโหลดและถูกอ้างถึงในภายหลังหรือไม่

อะไรคือสิ่งที่พบได้ทั่วไปที่จำเป็นต้องโหลดไว้ล่วงหน้าในเกม ฉันควรโหลดล่วงหน้าเท่าใด

มันคุ้มค่าที่จะแสดงแถบความคืบหน้าบางอย่าง? ฉันจะรักษาเวลาโหลดให้สั้นได้อย่างไร หน้าจอการโหลดควรมีลักษณะอย่างไร

ตัวอย่างที่ดีของการโหลดหน้าจอคืออะไร ตัวอย่างรหัสใด ๆ

โดยเฉพาะเกมของฉันมีไว้สำหรับ Andriod (Java / มือถือ) แต่อย่าลังเลที่จะตอบคำถามทั่วไป


2
ฉันรู้ว่านี่ไม่ใช่สิ่งที่คุณต้องการโดยเฉพาะ แต่คำแนะนำของฉันสำหรับสิ่งที่ควรเกิดขึ้นในระหว่างการโหลดหน้าจอคือ: สิ่งที่น่าสนใจ! :) ให้ความบันเทิงแก่ผู้เล่นด้วยเรื่องราวเล็กน้อย (เช่นฉากอคาบาเรน), มินิเกมหรืออาจจะแสดงเมนูให้ไกลที่สุดเท่าที่จะเป็นไปได้
Bart van Heukelom

คำตอบ:


13

สิ่งทั่วไปในการโหลดล่วงหน้าคือสิ่งที่คุณต้องการในแบบเรียลไทม์ บันทึกแนวคิดรวบยอดเช่นคลิปแม็ปและ megatextures (ซึ่งเป็นแนวคิดที่จะโหลดชิ้นส่วนที่คุณต้องการและปรับปรุงอย่างต่อเนื่องในขณะที่คุณเคลื่อนที่ไปรอบโลก) คุณจะต้องการเก็บทุกสิ่งที่คุณต้องการสำหรับระดับ / พื้นที่ / อะไรก็ตาม ในหน่วยความจำมากกว่าบนดิสก์ IO เป็นเสียงเบาและคุณไม่ต้องการที่จะโหลดพื้นผิวของคุณเมื่อคุณเปิดมุมและมันจะปรากฏขึ้น และทุกสิ่งฉันหมายถึงพื้นผิวเสียงตาข่ายข้อมูลเมตา ... ทุกอย่าง

หากคุณสามารถแสดงแถบความคืบหน้า (เช่นคุณมีการทำแผนที่ที่ถูกต้องของขั้นตอนการโหลดไปยังร้อยละ) แล้วโดยทั้งหมดแสดงมัน ถ้าไม่อย่างน้อยก็แสดงบางอย่างเช่นข้อความสั้น ๆ หรือตัวบ่งชี้การโหลดซึ่งจะได้รับการอัปเดตหลังจากแต่ละขั้นตอนดังนั้นอย่างน้อยคุณก็สามารถบอกได้ว่ามีอะไรเกิดขึ้น

หากมีบางสิ่งที่คุณรู้ว่าจำเป็น แต่ไม่ทันทีคุณสามารถโหลดมันในพื้นหลังและหยุดเกม (ไม่ดี แต่ต้องแน่ใจว่ามันไม่ค่อยเกิดขึ้น) หากจำเป็นต้องเร็วเกินไป วิธีนี้จะช่วยให้คุณลดเวลาในการโหลด ฉันไม่รู้มากเกี่ยวกับการพัฒนา Android หรือถ้ามันจะมีอะไรมากมายสำหรับอุปกรณ์ที่จะจัดการกับเกม แต่โดยทั่วไปแล้วมันค่อนข้างเบาบนซีพียูจึงไม่ควรมีปัญหาใหญ่


19

คุณต้องเป็น "Reticulating Splines"


2
ฮ่าฮ่าการอ้างอิงที่ดี :)
ไบรอันนี่นี่

แม้ว่าจะเป็นเรื่องตลกที่เห็นได้ชัด +1 สำหรับการอ้างอิงเป็นตัวอย่างที่ดีของการรักษาผู้เล่นในระหว่างการโหลด เทคนิคง่ายๆที่ไม่ต้องใช้ความพยายามมากไปกว่าการเพิ่มข้อความไร้สาระ "Don't Starve" เป็นอีกตัวอย่างของเกมที่ทำได้ดีและบังเอิญ (หรือไม่) เกี่ยวข้องกับ "Reticulating": dont-starve-game.wikia.com/wiki/World_Generation_Screen
twiz

3

ขึ้นอยู่กับว่าคุณกำลังโหลดหน้าจอเดียวหรือเปลี่ยนระดับทันทีหรือโหลดหลายหน้าจอ
ฉันจะบอกว่าหลังจะดีกว่าในความทรงจำ
สิ่งที่ต้องการ:
//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

และเมื่อคุณโหลดให้แน่ใจว่าไม่มีหน้าจอสีดำ หรือสำหรับเรื่องนั้นหน้าจอคงที่ หลายครั้งที่ฉันเห็นรูปภาพนิ่งในขณะที่เริ่มต้นแอพและคิดว่ามันพังทันที
วิธีที่ดีในการทำให้ผู้เล่นมีส่วนร่วมเพียงแค่มีฉากหลังเป็นฉากในเกมหรือมีการอ้างอิงเรื่องราว แถบการโหลดที่มี / ไม่มีเปอร์เซ็นต์ตราบใดที่ไม่ใช่ 'กำลังโหลด' คงที่ แล้วบางทีข้อมูลบางอย่าง


1
เพื่อประโยชน์ของ Pete หากคุณมีแถบโหลดแอนนิเมชั่นเป็นเปอร์เซ็นต์ให้ขยับขึ้นทีละน้อยและแม่นยำแทนที่จะอยู่ที่ 10% เป็น 90% ของเวลาจากนั้นกระโดด 100% หากคุณมีภาพเคลื่อนไหวที่ไม่โหลดเป็นเปอร์เซ็นต์อย่างน้อยก็ทำให้เป็นแบบนั้นเพื่อสำรวจการโหลด - วิธีนี้คุณสามารถหยุดมันได้เมื่อการโหลดหยุดทำงานด้วยเหตุผลบางประการ ฉันเห็นหลายเกมที่เคลื่อนไหวแอนิเมชันการโหลดในเธรดของตนเองและเมื่อเธรดการโหลดขัดข้องแอนิเมชั่นจะเล่นอย่างมีความสุข นั่นเป็นการเอาชนะจุดประสงค์ของอนิเมชั่นการโหลด
Kaj

ฉันเห็นด้วยทั้งหมดที่นั่น ฉันไม่คิดว่ามันจะทำได้ดีถ้ากระโดดแบบนั้น
คอมมิวนิสต์คอมมิวนิสต์

2

บนแพลตฟอร์ม iphone และ Android คุณต้องโหลดพื้นผิวและเสียงทั้งหมด การโหลดพื้นผิวและเสียงช้าลงสำหรับโทรศัพท์รุ่นเก่าอย่าง iphone 2G, 3G หรือ G1 คุณไม่สามารถทำได้ในเกม


2

อย่างที่คนอื่นพูดถ้าคุณสามารถโหลดข้อมูลทั้งหมดของระดับก่อนที่จะเริ่มเล่นคุณจะมีประสิทธิภาพที่ดีขึ้นมาก เป็นแหล่งที่พบเห็นได้ทั่วไปในเวลาเฟรมเพื่อโหลดเนื้อหาระหว่างเล่นเกม

สิ่งทั่วไปที่ต้องทำในระหว่างการโหลดหน้าจอเป็นภาพพื้นหลังแบบคงที่ระดับง่ายมากเคล็ดลับและกลเม็ดบางประการเกี่ยวกับวิธีเล่นภาพเคลื่อนไหวอย่างรวดเร็ว ฯลฯ

นี่คือหน้าจอการโหลดสำหรับ APB สวยเย็นสบาย :) http://www.youtube.com/watch?v=p5STix1t_1E&feature=related

นี่คือโค้ดหลอกบางอย่างสำหรับแสดงแถบความคืบหน้าในหน้าจอการโหลด:



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);
  }
}

อ๊ะถูกบังคับให้ใช้! = เพราะมันทำให้การแสดงผลรหัสผิดไปเมื่อฉันใช้ <


1
ว้าว, หน้าจอโหลด APB ดูเย็นจริงๆ :)
ไบรอันเดนนี

หากคุณเยื้องรหัสด้วยช่องว่างสี่ช่องแทนที่จะใช้แท็ก <pre> <code> คุณจะสามารถใช้ <แทน! = โดยไม่ทำให้การจัดรูปแบบเสียหาย
mmyers

mmyers ใช่ แต่นั่นเป็นความเจ็บปวดครั้งใหญ่ในตูด เหตุใดจึงไม่มีแท็กรหัสที่กำหนดเองเท่านั้น
Srekel

1

การโหลดหน้าจอสามารถใช้เพื่อซ่อนอะไรก็ได้ การโหลดเนื้อหาการเชื่อมต่อใด ๆ ที่จำเป็นในการสร้าง (tcp ฯลฯ ) การเติมข้อมูลแผนที่ด้วยออบเจ็กต์เกมและการกำหนดค่าเริ่มต้น

วิธีที่ฉันมักจะทำคือมีผู้จัดการสินทรัพย์ (หรืออาจเป็นผู้จัดการสำหรับสินทรัพย์แต่ละประเภท - เสียงกราฟิกและอื่น ๆ ) และให้พวกเขาโหลดสิ่งที่จะนำไปใช้ในหน่วยความจำ จากนั้นเพียงดึงเกมของคุณอ้างอิงจากผู้จัดการ

การแสดงแถบแสดงความคืบหน้าการกำหนดว่าจะโหลดล่วงหน้า ฯลฯ หรือไม่นั้นขึ้นอยู่กับโครงการของคุณว่าเวลาโหลดและรสนิยมของคุณเป็นอย่างไร แถบความคืบหน้าจะดีถ้าพวกเขาถูกต้องและมันเป็นโหลดนาน (มันเป็นเรื่องดีที่จะรู้ว่าคุณต้องรอนานเท่าไหร่)

ด้วยที่กล่าวไว้ในโทรศัพท์ Android ของฉันฉันมักจะชอบแอพที่มีหน้าจอการโหลดเองทำอย่างมีรสนิยม มันไม่จำเป็นต้องมีบาร์ แต่แอนิเมชันบอกผู้ใช้ว่าโปรแกรมทำงานได้ดีแค่ไหน ฉันเชื่อว่า Android มีแถบเริ่มต้นที่คุณสามารถใช้ได้ซึ่งทำงานได้ดี

นี่คือคำถาม SO ที่คุณอาจสนใจ


1

เป็นที่น่าสังเกตว่าแพลตฟอร์มที่มีข้อกำหนดการควบคุมคุณภาพ (เช่น X360, PS3, DS, ฯลฯ ) จะทำให้คุณต้องมีรูปแบบภาพเคลื่อนไหวบางรูปแบบในหน้าจอการโหลดของคุณ (หรือในความเป็นจริงหน้าจอใด ๆ )

นี่เป็นเพราะมิฉะนั้นผู้ใช้อาจคิดว่าเกมของคุณล้มเหลวเมื่อในความเป็นจริงมันใช้เวลาโหลดนาน แม้ว่าสิ่งนี้ไม่ใช่ข้อกำหนดฉันก็จะแนะนำอย่างแน่นอน

ภาพเคลื่อนไหวทุกรูปแบบนั้นใช้ได้ แต่แถบความคืบหน้าอย่างง่ายอาจไม่ดีที่สุดเนื่องจากขั้นตอนใหญ่ ๆ ในการโหลดอาจส่งผลให้แถบความคืบหน้าไม่เคลื่อนไหวเลยสักพักหมายความว่าหน้าจอคงที่ราวกับว่ามี ไม่มีบาร์เลย ดีกว่าที่จะแสดงภาพเคลื่อนไหวต่อเนื่องเช่นไอคอนหมุนนอกเหนือจากตัวบ่งชี้ความคืบหน้า


1
แน่นอนว่าโหลดเดอร์กำลังโหลดแบบอะซิงโครนัสคุณควรสามารถสำรวจความคืบหน้าของมันเพื่อให้คุณสามารถอัปเดตเปอร์เซ็นต์ได้อย่างแม่นยำยิ่งขึ้น วิธีการที่ผู้เล่นรู้ว่าถ้ามันไม่ได้รับการติดอยู่ที่ร้อยละบางสิ่งบางอย่างเป็นผิดจริง นอกจากนี้อย่างที่ฉันพูดในที่อื่น ๆ โปรดอย่าอัปเดตอนิเมชั่นโดยไม่ได้ตรวจสอบกับเธรดการโหลดของคุณว่ายังทำงานอยู่หรือคุณจะหมุนอย่างมีความสุขในขณะที่เกมหยุดทำงานอย่างมีประสิทธิภาพ
Kaj

1

สำหรับหน้าจอการโหลดในConquestฉันไปพร้อมกับคำอธิบายภารกิจเล็กน้อย (เป็นเกมประเภทใดรวมถึงเนื้อเรื่องเล็กน้อยสำหรับภารกิจ) และความช่วยเหลือเบื้องต้นเกี่ยวกับคำสั่ง

ในพื้นหลังฉันโหลดเสียง กราฟิกทั้งหมดโหลดตามความต้องการและดูเหมือนว่าจะทำงานได้ดีสำหรับเกมของเรา แต่เสียงเป็นหมีดังนั้นฉันโหลดเสียงทั้งหมดที่จำเป็นสำหรับภารกิจ ปุ่มโหลด / เริ่มถูกปิดใช้งานจนกว่าทุกอย่างจะโหลด แต่ฉันไม่มีภาพเคลื่อนไหวใด ๆ (ซึ่งจะเป็นการเพิ่มที่ดี)

เกมนี้เป็นเกมแรกของเราดังนั้นเราจึงยังเรียนรู้ได้มากมาย แต่มันก็ใช้ได้ดีสำหรับเรา

หน้าจอการโหลดของ Conquest

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.