การพัฒนาเกม

คำถาม & คำตอบสำหรับนักพัฒนาเกมมืออาชีพและเป็นอิสระ

2
ระบบเล่นซ้ำ: บันทึกอินพุตหรือเหตุการณ์?
ฉันอ่านสิ่งนี้: วิธีการออกแบบระบบเล่นซ้ำแต่มันไม่ได้ตอบคำถามของฉัน เกมของฉันสร้างขึ้นด้วยไคลเอนต์ "ดู" ของเกมเป็นโปรแกรมแยกจากเซิร์ฟเวอร์ "รุ่น" และ "ตัวควบคุม" (บิตเช่น mmo หรือเกมที่มีผู้เล่นหลายคนสร้างขึ้นด้วยวิธีนี้) ฝั่งเซิร์ฟเวอร์เป็น "ความจริง" ของเกมเสมอยอมรับเฉพาะคำขอการกระทำเป็นข้อมูลจากลูกค้าและเหตุการณ์เอาท์พุทและข้อความ "สถานะปัจจุบัน" รูปแบบและกฎของเกมได้รับการกำหนดอย่างสมบูรณ์ด้วยวัฏจักรการอัพเดท "ติ๊ก" ที่แน่นอนดังนั้นในฝั่งเซิร์ฟเวอร์ฉันสามารถบันทึกเหตุการณ์ที่ส่งไปยังมุมมองไคลเอนต์และคำขอการดำเนินการ ทั้งสองเกี่ยวข้องกับหมายเลขรอบเฉพาะ คำถามคือ: ในกรณีนี้เพื่อติดตั้งระบบเล่นซ้ำฉันควรใช้อินพุตหรือคำขอการกระทำของผู้ใช้ (ตามที่แนะนำในที่นั่น) หรือเหตุการณ์? ฉันคิดว่าทั้งคู่จะให้ผลลัพธ์ที่เหมือนกันทั้งหมด ความแตกต่างเดียวที่ฉันเห็นคือ: เหตุการณ์ให้ผลผลิตจริงในขณะที่คำขอการดำเนินการจะต้องดำเนินการเพื่อให้เหตุการณ์ คำขอการดำเนินการอาจมีข้อมูลน้อยกว่าที่จะบันทึก มีสิ่งอื่นที่ต้องพิจารณาอีกไหม?

3
วิธีจัดการกับ Block World อย่าง Minecraft
ฉันต้องการเขียนเกมง่ายๆที่มีโลกบล็อกเหมือนกับใน Minecraft คำถามเชิงทฤษฎีของฉันคือวิธีที่ดีที่สุดในการจัดการข้อมูลบล็อกนี้ในระหว่างการเล่น ความคิดแรกของฉันคือชุดใหญ่ แต่จะทำให้หน่วยความจำหมดฉันคิดว่า บางทีฉันอาจต้องโหลดบล็อกที่อยู่ใกล้กับผู้เล่นเท่านั้น ฉันจะจัดการการโหลดข้อมูลบล็อกที่ต้องการจากไฟล์และการถือเฉพาะข้อมูลที่ต้องการในหน่วยความจำได้อย่างไร

4
ผลกระทบของลูปที่มีความยาวผันแปรได้ใน GPU shaders
เป็นที่นิยมในการแสดงเนื้อหาขั้นตอนภายใน GPU เช่นใน demoscene (วาดรูปสี่เหลี่ยมจัตุรัสเดียวเพื่อเติมหน้าจอและปล่อยให้ GPU คำนวณพิกเซล) เรย์เดินขบวนเป็นที่นิยม: ซึ่งหมายความว่า GPU กำลังประมวลผลวนซ้ำที่ไม่รู้จักจำนวนหนึ่งต่อพิกเซล (แม้ว่าคุณจะมีขอบด้านบนเหมือนmaxIterations) การวนลูปที่มีความยาวผันแปรมีผลต่อประสิทธิภาพของ shader อย่างไร ลองนึกภาพ psuedocode ray-marching ที่เรียบง่าย: t = 0.f; while(t < maxDist) { p = rayStart + rayDir * t; d = DistanceFunc(p); t += d; if(d < epsilon) { ... emit p return; } } ตระกูล …

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

3
เอ็นจิ้นที่ใช้ระบบเอ็นติตี้คอมโพเนนต์
หมายเหตุ: ฉันกำลังเขียนโปรแกรมนี้ใน Javascript แต่ควรเป็นภาษาที่ไม่เชื่อเรื่องพระเจ้าส่วนใหญ่ ฉันกำลังคิดที่จะเปลี่ยนเอนจินของฉันให้เป็น ECS ฉันได้รับแนวคิดพื้นฐาน ( หมายเหตุ: นี่ผิดโปรดดูคำตอบของฉัน ): หน่วยงานเป็นวัตถุเกม คอมโพเนนต์คือบิตของฟังก์ชัน ( reactToInput()) หรือสถานะ ( position) ซึ่งสามารถรับ "ติดกาว" กับเอนทิตี ระบบมีรายการเอนทิตีที่จัดการและอัปเดต แต่ฉันไม่แน่ใจว่าจะได้รับการใช้งานและรายละเอียดบางอย่าง ... คำถาม: ระบบสามารถทำงานกับเอนทิตีประเภทต่าง ๆ ได้หรือไม่? ฉันมักจะให้ตัวอย่างของคลาสที่เรียกSceneในเครื่องยนต์ของฉันและมันจะให้บริการตามวัตถุประสงค์นี้ทันทีเช่นกัน ฉากหนึ่งเป็นคอนเทนเนอร์ของวัตถุทั้งหมดที่สามารถแสดงผลอัปเดตส่งผลกระทบต่อการเรนเดอร์ (ไฟ) และบางทีในอนาคตแม้กระทั่ง2DSoundEmitterวัตถุ มีอินเทอร์เฟซระดับสูงเพื่อให้ผู้ใช้ไม่จำเป็นต้องกังวลเกี่ยวกับประเภทของวัตถุที่เขามีอยู่scene.add()และสิ่งต่าง ๆ ทั้งหมดนั้น ฉันตระหนักว่าSceneอาจเป็นระบบ ใช้เวลาในเอนทิตีจัดเก็บและจากนั้นสามารถเรียกวิธีการอัพเดตของพวกเขาและอาจทำการเปลี่ยนแปลงสถานะบางอย่าง แต่มีปัญหา: ตามที่ฉันได้อธิบายไว้ข้างต้นแล้วมันSceneสามารถเลี้ยงวัตถุประเภทต่าง ๆ ได้ ! ฉันควรทำอย่างไรในสถานการณ์ที่มีทั้งวัตถุที่สามารถถ่ายภาพได้ ("drawable") และไฟในนั้น ฉันควรจะตรวจสอบเอนทิตีก่อนทำการโต้ตอบหรือไม่ หรือฉันควรจะแก้ปัญหาในระดับที่ต่ำกว่า: สร้างLightSourceส่วนประกอบที่สามารถเพิ่มเข้าไปในวัตถุใด ๆและแสงก็จะเป็นนิติบุคคลที่มีLightSourceและPositionส่วนประกอบ เป็นที่ยอมรับหรือไม่? …

2
ฉันจะโหลดพื้นผิวด้วย SFML สำหรับ OpenGL ได้อย่างไร
ฉันกำลังมองหาที่NeHe ของพื้นผิวการทำแผนที่การกวดวิชา มันดูซับซ้อนเกินไปสำหรับการโหลดพื้นผิว มีวิธีการโหลดพื้นผิวใน SFML แล้วใช้มันใน Open GL หรือไม่ ฉันใช้ SFML สำหรับหน้าต่างของฉัน

3
ประดับด้วยเพชรพลอยถัดไปการเลือกอัญมณีที่ดีที่สุด
มีเทคนิคการออกแบบเกมที่ฉันสามารถใช้ได้หรือไม่เพื่อให้ฉันลบสถานการณ์ 'ไม่มีการเคลื่อนไหวเหลืออีก' โดยสมบูรณ์ กล่าวคือ เกมไม่ควรมีสถานการณ์ที่เป็นไปไม่ได้ เท่าที่ฉันเดามันทั้งหมดขึ้นอยู่กับอัญมณีและสถานที่ที่คุณให้ผู้ใช้หลังจากกลุ่มอัญมณี 3 หรือ 4 ละลาย เป็นไปได้ไหม ? An always infinitely solvable Bejewelled game?

3
ฉันจะสร้างตาข่ายนำทางแบบ 2d ในสภาพแวดล้อมแบบไดนามิกที่รันไทม์ได้อย่างไร
ดังนั้นฉันจึงเข้าใจวิธีใช้ A * สำหรับการค้นหาเส้นทางและฉันสามารถใช้ในตารางได้ อย่างไรก็ตามโลกของเกมของฉันมีขนาดใหญ่มากและฉันมีศัตรูมากมายที่เคลื่อนเข้าหาผู้เล่นซึ่งเป็นเป้าหมายที่เคลื่อนที่ดังนั้นระบบกริดจึงช้าเกินไปสำหรับการค้นหาเส้นทาง ฉันต้องการทำให้กราฟโหนดของฉันง่ายขึ้นโดยใช้ mesh navigational ฉันเข้าใจแนวคิดของ "วิธี" ตาข่ายทำงาน (ค้นหาเส้นทางผ่านโหนดบนจุดยอดและ / หรือศูนย์กลางของขอบของรูปหลายเหลี่ยม) เกมของฉันใช้สิ่งกีดขวางแบบไดนามิกที่สร้างขึ้นตอนรันไทม์ ฉันไม่สามารถคาดศีรษะได้ว่าจะต้องใช้เครื่องบินที่มีสิ่งกีดขวางมากมายและแบ่งพื้นที่ที่สามารถเดินได้ให้เป็นรูปหลายเหลี่ยมสำหรับตาข่ายนำทางเช่นเดียวกับภาพต่อไปนี้ ฉันจะเริ่มที่ไหน ฉันจะรู้ได้อย่างไรว่าเมื่อเซ็กเมนต์ของพื้นที่ที่สามารถเดินได้หรือที่แย่กว่านั้นเมื่อฉันรู้ว่าฉันต้องแบ่งพื้นที่ที่สามารถเดินได้ที่กำหนดไว้ก่อนหน้านี้เป็นอัลกอริทึม "เดิน" ผ่านแผนที่ ฉันใช้จาวาสคริปต์ใน nodejs ถ้ามันสำคัญ

1
ผู้คนได้รับสิทธิบัตร Reverse ของ Carmack อย่างไร
เห็นได้ชัดว่ามีความคิดสร้างสรรค์สิทธิบัตร Carmack ของย้อนกลับและพวกเขาประสบความสำเร็จในการบังคับใช้รหัสในการปรับเปลี่ยนเทคนิคของพวกเขาลดลงแหล่งที่มาเช่นเดียวกับการที่จะรวม EAX ในวาระ 3 แต่ Carmack's Reverse มีการพูดคุยกันบ่อยครั้งและเห็นได้ชัดว่าเป็นตัวเลือกที่ดีสำหรับการแรเงาที่เลื่อนออกไปดังนั้นจึงใช้ในการผลิตที่มีงบประมาณสูงอื่น ๆ เป็นจำนวนมาก แม้ว่าจะไม่เป็นไปได้ที่ Creative จะดำเนินการตาม บริษัท ขนาดเล็ก แต่ฉันก็สงสัยว่าสตูดิโอที่ใหญ่กว่าจะสามารถแก้ไขปัญหานี้ได้อย่างไร พวกเขาเพียงแค่ข้ามมือของพวกเขาและหวังว่า Creative จะไม่หมุนรอบพวกเขาหรือพวกเขาไม่ใช้ Carmack's Reverse เลย?

3
โซลูชันสำหรับการค้นพบ LAN ที่มีน้ำหนักเบาหรือไม่
ฉันสร้างห้องสมุดสำหรับการเขียนโปรแกรมข้ามแพลตฟอร์มล้วนๆ เกมของฉันทำงานได้ดีใน Android, PC, Linux, Mac และอื่น ๆ ความสามารถในการเชื่อมต่อเครือข่ายนั้นมาจากไลบรารีของ ENET ดังนั้นการสื่อสารทั้งหมดระหว่างแอพของฉันไม่เข้ากันได้กับ TCP หรือ UDP แต่เฉพาะในโปรโตคอลที่กำหนดเองเท่านั้น ฉันไม่คิดว่าเป็นไปได้ที่จะทำสิ่งที่ฉันต้องการด้วย ENET นั่นเป็นเหตุผลที่ฉันขอความช่วยเหลือที่นี่! ให้บอกว่าฉันมีเกมเดียวกันที่ทำงานในโทรศัพท์ Android แล็ปท็อปและพีซีของฉัน พวกเขาทั้งหมดอยู่ในเครือข่าย wifi เดียวกันและดังนั้นใน LAN ไม่ว่าจะเป็นฮอตสปอต Wifi (?) หรือเราเตอร์ในครัวเรือน ฉันต้องการเพื่อนทั้งสามคนนี้เพื่อค้นหาอีกสองคนในเครือข่าย นี่เป็นเพียงการหาไอพีของแอพที่มีชีวิตในเครือข่าย LAN เพื่อให้สามารถโฮสต์เกมแบบผู้เล่นหลายคนระหว่างพวกเขาได้ ฉันสามารถคิดถึงวิธีที่มีประสิทธิภาพเพียงวิธีเดียวในการทำเช่นนี้การออกอากาศ UDP รอการตอบกลับ แต่ถ้านั่นเป็นวิธีแก้ปัญหาฉันต้องมีบางสิ่งบางอย่างเล็ก ๆ วิธีอื่นอาจลองเชื่อมต่อกับ IP ทั้งหมดในช่วงย่อยที่อยู่ LAN แต่ฉันไม่คิดว่าระบบปฏิบัติการจะอยู่กับฉันในรายการนี้: p

2
ข้อ จำกัด เฟรมโหลด
ที่ประสบความสำเร็จมากที่สุดเครื่องมือเกมการแข่งขันชอบid Tech, GoldSrc, Sourceและเช่นอนุญาตให้มีข้อ จำกัด framerate คุณสามารถเล่นกับ 30 กับ 60 กับ 99 กับ 72 กับ 68 ฯลฯ ในระยะสั้นคุณสามารถ cap มันและควบคุมหมวก ฉันสงสัยว่าฉันจะ จำกัด อัตราเฟรมอย่างไร ไม่สนใจรหัส แต่เป็นทฤษฎี

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

3
ปัญหาการแมปเงาครั้งแรก
ฉันใช้การทำแผนที่เงาพื้นฐานเป็นครั้งแรกใน OpenGL โดยใช้ shaders และฉันประสบปัญหาบางอย่าง ด้านล่างคุณสามารถดูตัวอย่างของฉากที่แสดงผลของฉัน: กระบวนการของการแมปเงาที่ฉันกำลังติดตามคือฉันแสดงฉากให้กับ framebuffer โดยใช้ View Matrix จากมุมมองแสงและเมทริกซ์การฉายและแบบจำลองที่ใช้สำหรับการเรนเดอร์ปกติ ในรอบที่สองฉันส่งเมทริกซ์ MVP ด้านบนจากมุมมองแสงไปยังตัวแบ่งจุดยอดซึ่งเปลี่ยนตำแหน่งเป็นพื้นที่แสง ส่วนของ shader จะแบ่งมุมมองและเปลี่ยนตำแหน่งเป็นพิกัดพื้นผิว นี่คือจุดสุดยอดของฉัน #version 150 core uniform mat4 ModelViewMatrix; uniform mat3 NormalMatrix; uniform mat4 MVPMatrix; uniform mat4 lightMVP; uniform float scale; in vec3 in_Position; in vec3 in_Normal; in vec2 in_TexCoord; smooth out vec3 pass_Normal; …

2
จัดการกับแสงจำนวนมากในฉาก (พร้อมเฉดสี)
ฉันอยากรู้เกี่ยวกับวิธีจัดการกับแสงไฟมากมายในฉาก ให้แผนที่ขนาดใหญ่มากในเกมเล่นตามบทบาทกับดันเจี้ยน (พร้อมไฟในนั้น) ฯลฯ ฉันรู้เกี่ยวกับแสงที่เลื่อนออกไป แต่คำถามของฉันคือเพิ่มเติม: วิธีการที่ไม่ได้ทำให้ไฟจำนวนมาก เห็นได้ชัดว่าเป็นที่น่าพอใจที่จะแสดงแสงที่มีผลต่อฉากเท่านั้น แต่ฉันไม่รู้เทคนิค / อัลกอริทึมในการเก็บภาพ ไม่มีใครต้องการหรือสามารถให้แสง 500 จุดเพียงเพราะมีบางแห่งในแผนที่ แต่ไม่มีใครสามารถนำเส้นตรงจากแสงไปยังผู้เล่นและทดสอบว่ามีอะไรอยู่ระหว่างนั้นหรือไม่ ระยะทางดูไม่เหมือนตัวบ่งชี้ที่ดี (แสงแดด?) tl; dr: ฉันจะทราบได้อย่างไรว่าไฟใดที่ส่งผลกระทบต่อฉากเพื่อแสดงผลเท่านั้น

5
การจัดการรายการเอนทิตีประเภทต่าง ๆ - มีวิธีที่ดีกว่านี้ไหม?
ฉันกำลังพัฒนาเกมอวกาศ 2 มิติสำหรับอุปกรณ์พกพา แต่มันซับซ้อนจริง ๆ และโซลูชันของฉันสับสนจริง ๆ และสร้างเซ็กเมนต์รหัสซ้ำจำนวนมาก ฉันได้ระดับโลกที่ฉันมีรายการหลากหลายของวัตถุที่แตกต่างกันเช่น: List<Enemy> enemys; List<Projectile> projectiles; List<Collectable> collectables; List<Asteroid> asteroids; List<Effect> effects; .. แต่ละรายการได้รับการปรับปรุงโดยระดับโลก แต่นั่นไม่ใช่ทั้งหมด .. ศัตรูแต่ละคนมีรายชื่อเครื่องยนต์และรายชื่ออาวุธที่ได้รับการปรับปรุงโดยศัตรู ตอนนี้แต่ละเครื่องยนต์เพิ่มเอฟเฟกต์ไฟบางส่วนให้กับรายการ 'เอฟเฟกต์โลก' และอาวุธแต่ละอันจะเพิ่มโปรเจ็คเตอร์ลงใน 'โปรเจ็คเตอร์' ของรายการโลก คลาสทั้งหมดเหล่านี้มีพารามิเตอร์ที่แตกต่างกันดังนั้นฉันต้องการการปรับปรุงพิเศษและฟังก์ชั่นการแสดงผลเพิ่มเติมสำหรับแต่ละชั้นเรียน อย่างน้อยพวกเขาก็เป็นเด็กทั้งหมดของ 'GameObject' ซึ่งให้สิ่งพื้นฐานเช่นตำแหน่งความเร็วและเวกเตอร์การเร่งความเร็ว มีวิธีที่ดีกว่าหรือมากกว่าทั่วไปในการทำเช่นนี้? เหมือนคลาส catch-all หนึ่งคลาสที่มีพารามิเตอร์และวิธีการที่เป็นไปได้ทั้งหมดสำหรับวัตถุที่แตกต่างกันทั้งหมด (ฉันคิดว่านี่จะสร้างรหัสที่สับสนมากขึ้น)

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