คุณบรรจุทรัพยากรในเกมอย่างไรเมื่อคุณมีทรัพยากรมากเกินไป


10

ฉันเพิ่งสร้าง Space Invaders พื้นฐานใน C ++ โดยใช้ Allegro 5 framework หลังจากฉันเสร็จฉันก็รู้ว่าฉันมีสไปรต์ประมาณ 10 อันและค่า DLLs 13MB ผู้เล่นบางคนไม่มีแม้แต่ mingW DLLs ซึ่งทำให้เกมสับสนมาก

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


1
คุณเข้าใจคำว่าทรัพยากรได้อย่างไร เนื้อหาเช่นรูปภาพเสียง ... หรือคุณรวม DLLs ไว้ในเทอมนี้ไหม
Christian Ivicevic

ฉันต้องการถ้าฉันสามารถติดตั้ง DLL ได้เช่นกันเพราะฉันมีจำนวนมาก
Bugster

ความคิดแรกของฉันคือการหาห้องสมุดที่เหมาะสมเช่น (ล้าสมัย ... ) zziplibเพื่อจัดเก็บเนื้อหาตามปกติของฉันทั้งหมดในไฟล์ zip แล้วโหลดมันในเกมของฉันผ่านทางท่อเนื้อหาที่กำหนดเองของศัตรู สิ่งที่คุณกำลังมองหาในตอนแรกคือวิธีการโหลดไฟล์จากไฟล์ zip ไปยังหน่วยความจำเพื่อให้สามารถใช้งานได้ในเกมของคุณ เกี่ยวกับที่กำลังมันค่อนข้างยากเพราะพวกเขามักจะต้องอยู่ใน dir เดียวกับปฏิบัติการหรือWindowsหรือSystem32dir ซึ่งไม่แนะนำ! วิธีการเกี่ยวกับการเก็บถาวร SFX เพื่อแยกTEMPและเรียกใช้จากที่นั่น?
Christian Ivicevic

3
คุณกำลังถามเกี่ยวกับวิธีการใช้โปรแกรมติดตั้งหรือไม่? เนื่องจาก DLLs ไม่ใช่ทรัพยากร
Nicol Bolas

คำตอบ:


13

ดูเหมือนว่ามีความท้าทายสองประการที่คุณเผชิญอยู่ที่นี่: การแจกจ่ายและบรรจุภัณฑ์ของสินทรัพย์

การกระจาย

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

คุณจะวางไฟล์ของคุณได้อย่างไร?

  • . dll ของคุณมักจะต้องอยู่ในไดเรกทอรีเดียวกับไฟล์ที่รันได้ (มีข้อยกเว้น แต่เพื่อความง่าย ... )
  • เนื้อหา (ภาพและเสียง) ของคุณสามารถอยู่ได้ทุกที่ที่คุณต้องการแม้ว่าคุณจะย้ายมันไปตามการปฏิบัติการของคุณคุณจะต้องแก้ไขรหัสการโหลดทรัพยากรของคุณเพื่อพิจารณาสิ่งนี้

ฉันมักจะทำสิ่งนี้:

MyGame \ // ไดเรกทอรีระดับบนสุดถือ progrma ทั้งหมด
  bin \ // dll ไปที่นี่พร้อมกับ exe ที่คอมไพล์แล้ว
  res \ // ไดเรกทอรีทรัพยากรระดับบนสุดของเกม
    เพลง\
    เสียงประกอบ\   
    เสียง \
  cfg \ // ไฟล์การกำหนดค่าเริ่มต้น (ผู้ใช้กำหนดค่าไปในไดเรกทอรีผู้ใช้)
  MyGame.lnk // ทางลัดเพื่อคอมไพล์ exe

บรรจุภัณฑ์ของสินทรัพย์

คุณสามารถใช้ไลบรารีการบีบอัดบางประเภท (zlib, lzo) เพื่อบีบอัดทรัพยากรเกมทั้งหมดของคุณ (ไดเรกทอรี res \ ด้านบน) ลงในไฟล์เดียว จากนั้นคุณต้องใช้ไลบรารีการบีบอัดเดียวกันเพื่อแยกเนื้อหาของทรัพยากรแบบเรียลไทม์เพื่อโหลดเนื้อหาของคุณลงในเกมของคุณ

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

ความจริงแล้วมันไม่สำคัญเลยที่จะทำให้งานนั้นสำเร็จและฉันไม่เห็นการจ่ายเงินในสถานการณ์ของคุณ ไดเรกทอรีง่าย ๆ น่าจะเพียงพอที่จะสรุปแคปต์สไปรท์ของคุณ 10 ตัวและมันง่ายกว่ามากในการเพิ่มและแก้ไขสิ่งต่าง ๆ : เพียงแค่ต้องดาวน์โหลดมันไปยังไดเรกทอรีที่ถูกต้องและเสร็จสิ้น

การสร้างโปรแกรมติดตั้ง

นี่เป็นการสมมติว่าคุณกำหนดเป้าหมายเป็น Windows ... เมื่อคุณมีปัญหาด้านบนคุณสามารถสร้างโปรแกรมติดตั้งสำหรับเกมของคุณได้ ฉันจะหลีกเลี่ยงวิธี ClickOnce ที่ Visual Studio รองรับ มันไม่ได้ติดตั้งของ Windows โดยทั่วไปของคุณและมาพร้อมกับชุดของตัวเองนิสัยใจคอ

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


1
ขอบคุณสำหรับคำตอบตอนนี้ฉันมีความคิดพื้นฐานว่าฉันควรเผยแพร่เกมอย่างไร
Bugster

1
อย่าใช้ WiX มันจะทำร้ายศีรษะของคุณและฆ่าครอบครัวของคุณ
Ray Dey

1
มีตัวเลือกอื่น - อาจมีมากกว่าหนึ่งแพ็คเกจสินทรัพย์ บางอย่างเช่น "resources.pak, patch1.pak, patch1337.pak, .. " จะเป็นวิธีในการจัดเก็บข้อมูลโปรแกรมแก้ไข ไม่จำเป็นต้องแก้ไขแพ็กเกจเดิมเพียงแค่ทำให้เครื่องยนต์สามารถตรวจจับและสั่งซื้อแพทช์แพ็คเกจได้
snake5

0

คุณอาจเชื่อมโยงห้องสมุดบางส่วนเข้าด้วยกันแทนที่จะรวมถึง dll ถ้าและจะแตกต่างกันอย่างไรสำหรับห้องสมุดทุกแห่ง


-1

คุณสามารถใช้ซอฟต์แวร์เช่น Enigma เพื่อจัดเก็บไฟล์ของคุณและบันทึกไว้ในไฟล์. dat เดียว คุณจะต้องเปลี่ยนโฟลเดอร์ของตัวเรียกใช้งานของคุณ

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