อำนวยความสะดวกในการปรับใช้เกม XNA สำหรับโปรแกรมเมอร์ที่ไม่ใช่


12

ขณะนี้ฉันกำลังใช้งาน RPG โดยใช้ชุดเริ่มต้นสวมบทบาทจาก XNA เป็นพื้นฐาน (http://xbox.create.msdn.com/en-US/education/catalog/sample/roleplaying_game) ฉันทำงานกับทีมเล็ก ๆ (นักออกแบบสองคนและศิลปินเพลง / เสียงหนึ่งคน) แต่ฉันเป็นคนเดียว โปรแกรมเมอร์ ขณะนี้เรากำลังทำงานกับระบบ (ไม่ยั่งยืน) ต่อไปนี้: ทีมสร้างรูป / เสียงใหม่เพื่อเพิ่มในเกมหรือพวกเขาปรับเปลี่ยนเสียง / ภาพที่มีอยู่จากนั้นพวกเขาก็ผูกมัดงานของพวกเขาไปยังพื้นที่เก็บข้อมูล ของทุกอย่าง (รหัสรูปภาพเสียง ฯลฯ ) ทุกวันฉันจะสร้างตัวติดตั้งใหม่สะท้อนภาพใหม่การเปลี่ยนรหัสและเสียงและทุกคนติดตั้ง

ปัญหาของฉันคือ: ฉันต้องการสร้างระบบที่ส่วนที่เหลือของทีมสามารถแทนที่เสียงต่อสู้ได้และพวกเขาสามารถเห็นการเปลี่ยนแปลงได้ทันทีโดยไม่ต้องรอให้ฉันสร้าง วิธีการตั้งค่าของ XNA ถ้าฉันเผยแพร่มันจะเข้ารหัสไฟล์ภาพและเสียงทั้งหมดดังนั้นทีมจึงไม่สามารถ "hot swap" ฉันสามารถตั้งค่า Microsoft VS บนเครื่องของทุกคนและแสดงวิธีเผยแพร่อย่างรวดเร็ว แต่ฉันต้องการทราบว่ามีวิธีการที่ง่ายกว่านี้หรือไม่

มีใครคิดบ้างไหมเมื่อทำงานกับทีมที่ใช้ XNA


2
ด้วยการเข้ารหัส XNA ของรูปภาพและไฟล์เสียงทั้งหมดคุณหมายถึงว่ามันถูกสร้างขึ้นโดยไปป์ไลน์เนื้อหา XNA และเปลี่ยนเป็นไฟล์. xnb หรือไม่
David Gouveia

ฉันจำส่วนขยายที่แน่นอนไม่ได้ แต่พวกมันผ่านท่อมาตรฐานใช่
พ.ย.

คำตอบ:


12

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

สำหรับคำถามของคุณฉันคิดได้สองวิธีซึ่งหนึ่งในนั้นเกี่ยวข้องกับการติดตั้ง Visual Studio บนเครื่องของพวกเขาและอื่น ๆ ที่เกี่ยวข้องกับการเปลี่ยนแปลงเกม:

  • ให้พวกเขาติดตั้ง Visual Studio และสอนให้พวกเขาส่งต่อสินทรัพย์ของพวกเขาผ่านทางท่อส่งเนื้อหา XNA พวกเขาเพียงแค่ต้องสร้างโครงการขั้นตอนการผลิตเนื้อหาลากไฟล์ไปที่นั่นและสร้าง จากนั้นพวกเขาสามารถสลับไฟล์ XNB ที่ได้กับไฟล์ในโฟลเดอร์โครงการและเรียกใช้ EXE เพื่อดูการเปลี่ยนแปลง

  • หากคุณกำลังพัฒนาสำหรับ Windows คุณสามารถเปลี่ยนรหัสของคุณเพื่อให้โหลดเนื้อหาที่รันไทม์ในรูปแบบดั้งเดิมโดยไม่ต้องผ่านไปป์ไลน์เนื้อหา สำหรับการโหลดภาพคุณสามารถใช้Texture2D.FromStream(เช่นตัวอย่างนี้ ) และสำหรับเสียงทางออกที่ดีที่สุดที่ฉันพบคือการใช้ FMOD API แทน (เช่นตัวอย่างนี้ ) จากนั้นพวกเขาสามารถแลกเปลี่ยนสินทรัพย์โดยตรงและเรียกใช้เกม

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


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

1
@Sal ใช่คุณสามารถทำแค่นั้น ตรวจสอบเอกสารที่นี่
David Gouveia

1
@Sal ตามค่าเริ่มต้น Visual Studio จะสร้างโปรไฟล์บิลด์สองรายการ: Debug and Release Build->Configuration Managerคุณสามารถสลับระหว่างสองจาก โดยค่าเริ่มต้นตรวจแก้จุดบกพร่องสร้างมีการรวบรวมสัญลักษณ์ที่กำหนดไว้ซึ่งหมายความว่าคุณสามารถตัดรหัสที่ไม่ใช่การเปิดตัวของคุณด้วยDEBUG #if ( DEBUG ) doStuffIWouldntDoInRelease(); #elif theActualReleaseCode(); #endif
Cypher

1
@Sal นอกจากนี้ฉันพบว่ามันง่ายกว่ามากที่จะรวมไดเรกทอรี bin / * ในที่เก็บและมีนักออกแบบ / ศิลปิน / qa เพียงตรวจสอบโฟลเดอร์ bin เพื่อให้สามารถเรียกใช้ล่าสุดและยิ่งใหญ่ที่สุด โดยการทำเช่นนั้นพวกเขาได้รับการอ้างอิงพื้นผิวเสียงและอื่น ๆ ทั้งหมดเข้าด้วยกัน จากนั้นในแต่ละวันสิ่งที่พวกเขาต้องทำคือทำsvn updateไดเรกทอรีทำงานและเร็วขึ้น
Cypher

4

สายไปปาร์ตี้เล็กน้อย แต่นี่คือความคิดของฉัน

ฉันจะไปกับตำแหน่งที่ 3 ซึ่งไม่เกี่ยวข้องกับการปรับเปลี่ยนรหัสฐานที่มีอยู่แล้ว สิ่งนี้จะใช้ได้หากคุณจะยอมรับ (และคัดลอก) ไบนารี (เกมจริง. exe และ. dll ที่เกี่ยวข้องจากการรวบรวม) ที่ใดที่หนึ่งในไดเรกทอรีผลลัพธ์ - ตัวอย่างเช่นสคริปต์หลังการสร้าง ฉันจะสมมติว่าเรากำลังพูดถึง Visual Studio 2010 และ XNA Game Studio 4.0 (กระบวนการนี้คล้ายกันมากสำหรับรุ่นอื่น ๆ เพียงแค่ต้องแทนที่ตัวเลขบางส่วน)

ดังนั้นแนวคิดคือ: สร้างสคริปต์ (.cmd) ในรูทของโปรเจ็กต์ของคุณโดยที่โซลูชัน. sln ตั้งอยู่โดยมีขั้นตอนต่อไปนี้:

  1. เรียกใช้ "พรอมต์คำสั่ง Visual Studio 2010":

    เรียก "C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ vcvarsall.bat" x86

    นี่คือเพื่อให้สคริปต์ของเราสามารถค้นหาไลบรารี XNA และเครื่องมือและไบนารีที่จำเป็นทั้งหมด

  2. เรียกใช้งาน MSBuild ในโครงการเนื้อหา (.contentproj):

    msbuild / คุณสมบัติ: XNAContentPipelineTargetPlatform = Windows / คุณสมบัติ: XNAContentPipelineTargetProfile = เข้าถึง mygame.content / projectfile.contentproj

    คุณสามารถแก้ไขคุณสมบัติได้โดยระบุแพลตฟอร์ม / โปรไฟล์ที่แตกต่างกัน คุณยังสามารถสร้างเนื้อหาสำหรับแพลตฟอร์มเพิ่มเติมได้ตลอดเวลา (Windows Phone, Xbox 360 หรือ Windows) โปรไฟล์สามารถ: Reach หรือ HiDef (http://msdn.microsoft.com/en-us/library/ff604995.aspx)

  3. คัดลอกผลลัพธ์ซ้ำไปยังโฟลเดอร์ที่เก็บไบนารี + เกมจริงไว้ในที่เก็บ:

    xcopy / d / y / i / e bin \ x86 \ Debug \ Content * .. \ game_output \ Content

    xcopy /?สำหรับรายละเอียดเกี่ยวกับธงที่คุณสามารถเรียกใช้ในพรอมต์คำสั่ง: สิ่งสำคัญคือ: /dเพื่อคัดลอกเฉพาะไฟล์ที่ถูกดัดแปลง - ในกรณีที่คุณมีสินทรัพย์จำนวนมากมันมีประโยชน์ที่จะไม่คัดลอกไฟล์ที่มีอยู่แล้วและไม่ได้ทำการแก้ไขซ้ำแล้วซ้ำอีก /yสำหรับแทนที่ไฟล์ที่มีอยู่โดยอัตโนมัติเพื่อให้สามารถอัปเดตด้วยเวอร์ชันที่ใหม่กว่า ฉันใช้xcopyเพราะปกติcopyไม่สามารถคัดลอกโฟลเดอร์ซ้ำตามที่ฉันรู้ - และบางทีคุณอาจจัดโครงสร้างเนื้อหาในโฟลเดอร์และโฟลเดอร์ย่อย นอกจากนี้ยังดีกว่าปกติcopy(มีธงแตกต่างกันมากมาย)

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

ตอนนี้ศิลปิน (หรือทุกคน) ที่ปรับเปลี่ยนไฟล์เนื้อหาต้องการเพียงแค่ดับเบิลคลิกที่สคริปต์. cmd และเนื้อหาใหม่จะถูกสร้างและคัดลอกไปยังไดเรกทอรีผลลัพธ์ที่มีการเตรียมสิ่งประดิษฐ์ที่พร้อมใช้งาน

อย่างไรก็ตามมีปัญหาเล็กน้อยซึ่งคุณจะต้องย้อนกลับไปยังจุดที่ 1 ของโพสต์ของ David: หากศิลปินต้องการแก้ไขโครงการเนื้อหาด้วยการเพิ่ม / ลบ / ย้ายไฟล์พวกเขาต้องทำโดยการเปิด โครงการใน Visual Studio (หรือแก้ไขไฟล์โครงการด้วยมือซึ่งฉันสงสัยว่าใครจะทำ) อย่างที่ฉันบอกไปนี่เป็นปัญหาเล็กน้อยเพราะพวกเขาสามารถส่งไฟล์ใหม่ในที่เก็บได้และคุณ coder จะรวมไฟล์เหล่านั้นไว้ในโครงการเนื้อหาเมื่อมีการใช้รหัสเพื่อจัดการไฟล์เหล่านั้น

ในแนวคิดนี้ Shawn Hargreaveas โพสต์บางอย่างเกี่ยวกับ msbuild และสร้างโครงการเนื้อหาจากบรรทัดคำสั่ง: http://blogs.msdn.com/b/shawnhar/archive/2006/11/07/build-it-ahead-of-time .aspxวิธีแก้ปัญหาของเขาคือสร้างไฟล์ใหม่ แต่ฉันคิดว่ามันง่ายกว่าและดูแลรักษาได้ดีกว่าเพื่อใช้ไฟล์โครงการที่มีอยู่แล้วโดยตรง

PS: ขออภัยสำหรับการโพสต์ยาว xD

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