การพัฒนาเกม

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

9
วิธีสร้างระบบเวทย์มนตร์ที่ใช้งานง่าย
ฉันกำลังออกแบบเกมการเอาชีวิตรอดแบบบนโลกล่างแบบ 2D จากบนลงล่างด้วยระบบเวทย์มนตร์ วิธีการใช้งาน: ผู้เล่นจะได้รับ "ไม้กายสิทธิ์" ในตอนต้นของเกม ในขณะที่ผู้เล่นพบไอเท็มและศัตรูใหม่พวกเขาจะได้รับคาถาเพื่อช่วยให้พวกเขาใช้ไอเท็มเหล่านั้น / กำจัดศัตรูเหล่านั้น ปัญหาที่ฉันมีคือออกแบบวิธีการร่ายคาถา ตอนแรกฉันเพิ่งผูกเวทย์ต่าง ๆ กับกุญแจ 0-10 แต่ในไม่ช้าจำนวนคาถาก็ท่วมท้นและคุณก็มีปัญหาเรื่องคาถาระดับล่างที่ไม่ได้ใช้ในเกมตอนปลาย แต่ก็ยังถูกผูกไว้กับกุญแจที่มีประโยชน์ที่สุด . ดังนั้นวิธีที่ดีที่สุดในการสร้างระบบสะกดคำที่ใช้งานง่ายคืออะไร ฉันสามารถยกเครื่องวิธีการทำงานของเวทมนตร์ในเกมของฉันหากจำเป็น แก้ไข: เพื่ออธิบายอย่างชัดเจนฉันกำลังพัฒนาสำหรับพีซีแบบเรียลไทม์ด้วยรูปแบบการสะกดและวัตถุประสงค์ที่หลากหลายแม้ว่าคำถามนี้ควรใช้กับทุกแพลตฟอร์ม

1
ฮัลล์โดเมนและรูปทรงเรขาคณิตใช้สำหรับทำอะไร?
ฉันทำส่วนแบ่งการเขียนโปรแกรมเกมสามมิติสำหรับนายจ้าง (อดีต) ของฉันแล้วและในเอ็นจิ้นกำหนดเองของฉันสำหรับเกมอินดี้ของฉันเอง เริ่มแรกฉันเริ่มด้วย Direct3D 9 และ D3DX9 ซึ่งทำทุกอย่างให้ฉันและไม่ต้องการให้ฉันคิดในแง่ของความแตกต่างทั้งหมด หลังจากนั้นฉันเขียน Direct3D 9 shader ครั้งแรกของฉัน แต่ส่วนใหญ่ใช้ shader ง่าย ๆ สำหรับทุกสิ่งที่ฉันทำ ในการทำซ้ำเกมเอ็นจิ้นล่าสุดของฉันฉันย้ายไปที่ Direct3D 11 และด้วยการที่ฉันสร้างเฉดสีมากมาย ฉันทำสกิน GPU, อนุภาคที่คำนวณจาก GPU, แสงจำนวนมากและเอฟเฟกต์การประมวลผลทั้งหมดใน GPU สิ่งที่เจ๋งจริงๆ จนถึงตอนนี้ฉันเพิ่งใช้จุดสุดยอดและพิกเซล / ชิ้นส่วน แม้ว่าจะยังมีอีกหลายสิ่งที่ฉันยังไม่ได้ทำ แต่ฉันเชื่อว่าฉันมีความรู้ที่ดีเกี่ยวกับสิ่งที่ยอดและพิกเซล / ชิ้นส่วนเงาทำและวิธีการทั้งหมดที่เหมาะกับไปป์ไลน์ 3D ทั้งหมด ติดตามความคืบหน้าของการพัฒนาเมื่อเร็ว ๆ นี้ฉันเริ่มให้ความสนใจกับขั้นตอนการสร้างภาพที่ใหม่กว่า นั่นคือ Geometry Shader และใหม่กว่าคือ Hull และ Domain shaders …

5
การปรับปรุงฟังก์ชั่น O (N ^ 2) (เอนทิตีทั้งหมดทำซ้ำมากกว่าเอนทิตีอื่น ๆ ทั้งหมด)
พื้นหลังเล็กน้อยฉันเขียนโค้ดเกมวิวัฒนาการกับเพื่อนใน C ++ โดยใช้ ENTT สำหรับระบบเอนทิตี สิ่งมีชีวิตที่เดินไปรอบ ๆ ในแผนที่ 2 มิติกินสีเขียวหรือสิ่งมีชีวิตอื่นทำซ้ำและคุณสมบัติของพวกมันกลายพันธุ์ นอกจากนี้ประสิทธิภาพก็ดี (60fps ไม่มีปัญหา) เมื่อเกมทำงานแบบเรียลไทม์ แต่ฉันต้องการที่จะเพิ่มความเร็วอย่างมีนัยสำคัญโดยไม่ต้องรอ 4h เพื่อดูการเปลี่ยนแปลงที่สำคัญ ดังนั้นฉันต้องการได้เร็วที่สุด ฉันกำลังดิ้นรนเพื่อหาวิธีที่มีประสิทธิภาพสำหรับสิ่งมีชีวิตในการค้นหาอาหารของพวกเขา สิ่งมีชีวิตแต่ละคนควรจะมองหาอาหารที่ดีที่สุดที่อยู่ใกล้พวกเขา หากต้องการกินสิ่งมีชีวิตที่อยู่ในภาพควรจะมองไปรอบ ๆ ตัวเองในรัศมี 149.64 (ระยะการมองของมัน) และตัดสินว่าควรกินอาหารชนิดใดซึ่งขึ้นอยู่กับโภชนาการระยะทางและประเภท (เนื้อสัตว์หรือพืช) . ฟังก์ชั่นที่รับผิดชอบในการค้นหาสิ่งมีชีวิตทุกชนิดของพวกเขาคือการกินอาหารประมาณ 70% ของเวลาใช้งาน ทำให้การเขียนง่ายขึ้นในขณะนี้มันจะเป็นดังนี้: for (creature : all_creatures) { for (food : all_entities_with_food_value) { // if the food is within the …

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

3
สถาปัตยกรรมการสั่งการของป้อมปราการคนแคระ
วิธีที่ดีที่สุดในการใช้ระบบการสั่งซื้อคำสั่งสำหรับ AI คืออะไร? ตัวอย่างเช่นในป้อมปราการคนแคระเมื่อคุณทำเครื่องหมายพื้นที่ป่าสำหรับการตัดไม้จากนั้นคนแคระจะทำตามลำดับต่อไปนี้: ไปที่ต้นไม้ สับต้นไม้ ส่งไม้ไปยังคลังสินค้า ไปที่ต้นไม้ต้นอื่น และอื่น ๆ .. ฉันมีคำสั่งสแต็คที่ไม่ทำงาน 1 ซึ่งเปลี่ยนจากสถานะไม่ได้ใช้งานไปถึงไทล์ปลายทางของต้นไม้ สิ่งที่ฉันกลัวคือสิ่งนี้จะยุ่งเมื่อฉันสร้างคำสั่งซื้อเพิ่มเติมเช่นนี้: สร้างบ้าน ไปที่คลังสินค้า นำไม้ไปยังพื้นที่ก่อสร้าง กลับไปที่คลังสินค้า นำหินไปที่บริเวณก่อสร้าง อาคารสไปรต์เคลื่อนไหว การเพาะปลูก ไปที่คลังสินค้า นำเมล็ดพันธุ์ไปสู่แปลงฟาร์ม การต้มเบียร์ ไปที่คลังสินค้า นำพืชให้นิ่ง เบียร์สไปรต์เคลื่อนไหว ดังนั้นคำถามของฉันคือฉันจะใช้ระบบการสั่งคำสั่งเช่นป้อมปราการคนแคระและหลีกเลี่ยงรหัสสปาเก็ตตี้ในเวลาเดียวกันได้อย่างไร มีโครงสร้างข้อมูลใดบ้างที่ฉันต้องการศึกษา ฉันต้องใส่ลำดับคำสั่งลงในไฟล์ xml แยกกันหรือไม่

4
อะไรคือความแตกต่างระหว่างสไปรต์ชีทกับแผนที่พื้นผิว?
ฉันสงสัยว่าความแตกต่างระหว่างแผ่นสไปรต์และแผนที่พื้นผิวคืออะไร ไม่เหมือนกันทั้งคู่หรือ ในแผ่นสไปรต์คุณมีสไปรต์และแผนที่พื้นผิวคุณยังมีสไปรต์ด้วยดังนั้นอะไรคือความแตกต่าง?

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

3
ฉันจะสร้างวัสดุพิซซ่าชีสแบบยืดและแตกได้อย่างไร
ฉันต้องการสร้างพิซซ่าที่เหมือนจริงและอนุญาตให้ผู้ใช้โต้ตอบกับมัน สิ่งที่ฉันต้องการ: สิ่งที่ฉันสร้าง: ฉันสร้างโมเดลของพิซซ่า (8 ชิ้น) ใน Blender จากนั้นนำเข้าสู่ Unity ชิ้นส่วนของพิซซ่าดูเหมือนประดิษฐ์มากส่วนใหญ่เป็นเพราะ "สามเหลี่ยมแข็ง" ฉันจะทำให้ชีสยืดและแตกเมื่อผู้ใช้ย้ายชิ้นส่วนได้อย่างไร

6
แยกข้อมูลเกม / ตรรกะจากการเรนเดอร์
ฉันกำลังเขียนเกมโดยใช้ C ++ และ OpenGL 2.1 ฉันคิดว่าฉันจะแยกข้อมูล / ตรรกะออกจากการแสดงผลได้อย่างไร ในขณะนี้ฉันใช้คลาสพื้นฐาน 'Renderable' ที่ให้วิธีเสมือนจริงเพื่อนำมาใช้วาดภาพ แต่วัตถุทุกชิ้นมีรหัสพิเศษเฉพาะวัตถุเท่านั้นที่รู้วิธีการตั้งค่าเครื่องแบบ shader อย่างถูกต้องและจัดระเบียบข้อมูลบัฟเฟอร์อาร์เรย์จุดสุดยอด ฉันลงเอยด้วยฟังก์ชัน gl * จำนวนมากโทรไปทั่วรหัสของฉัน มีวิธีการทั่วไปในการวาดวัตถุหรือไม่?
21 c++  opengl  rendering  logic  data 

1
วิธีการแปลงพิกัดของเมาส์เป็นดัชนีมีมิติเท่ากัน?
ฉันวาดแผนที่ภาพวาดสามมิติด้วยไทล์64x32 : const Offset = 160; int X, Y; for (int a=0; a < 6; a++) for (int b=0; b < 6; b++) { X = a * 32 - b * 32 + Offset; Y = a * 16 + b * 16; DrawTile(X, Y, tile); } ภาพแสดงรหัสนี้: มืออาชีพที่รักโปรดช่วยด้วยสูตรการแปลงค่าพิกัดของเมาส์ในดัชนีมีมิติเท่ากันของเซลล์ …

3
แนวทางปฏิบัติที่ดีที่สุดสำหรับการติดฉลากเวอร์ชันเกมหรือไม่
ไม่มีใครรู้ว่ามีวิธีปฏิบัติที่ดีที่สุดสำหรับการติดฉลากเวอร์ชันเกม ฉันไม่แน่ใจว่ามีชื่อมาตรฐานสำหรับชื่ออื่นนอกเหนือจากรุ่น แต่สิ่งที่ฉันหมายถึงคือ: 1.0 1.1 1.2 1.3.1 เบต้า

6
การใช้ภาษาสคริปต์ของคุณทำงานได้จริงหรือไม่?
ฉันเขียนโค้ดเกม Beat 'em up ใน C ++ และถึงเวลาแล้วที่จะใช้สคริปต์สำหรับกิจกรรมทริกเกอร์ cutscenes ฯลฯ ฉันได้อ่านไปทั่วอินเทอร์เน็ตและได้รับข้อมูลที่เป็นธรรม วิธีการแก้ปัญหาเป็นตัวเลือกแรกของฉันจะเป็นที่จะใช้ภาษาสคริปต์ของตัวเองเหมือนหนึ่งในถ้ำเรื่อง ฉันได้เห็นสิ่งนี้แนะนำแล้ว แต่บทกวีส่วนใหญ่แนะนำ lua แต่ดูเหมือนจะไม่เหมาะกับประเภทของการเขียนโปรแกรมของฉัน คุณสร้างภาษาสคริปต์ของคุณเองหรือ ทำไมคุณถึงเลือกที่จะม้วนตัวเองแทนที่จะใช้อันที่มีอยู่ คุณให้คำปรึกษาด้านทรัพยากรใดในระหว่างการพัฒนา
21 scripting 

1
ฉันจะสร้างเขตข้อมูลระยะทางที่ลงนาม (2D) แบบเรียลไทม์ได้อย่างรวดเร็วได้อย่างไร
ในคำถามก่อนหน้านี้มีข้อเสนอแนะว่าฟิลด์ระยะทางที่ลงนามแล้วสามารถทำการคำนวณล่วงหน้าโหลดตอนรันไทม์แล้วใช้จากนั้น ด้วยเหตุผลที่ฉันจะอธิบายในตอนท้ายของคำถามนี้ (สำหรับผู้ที่สนใจ) ฉันต้องสร้างฟิลด์ระยะทางแบบเรียลไทม์ มีเอกสารบางส่วนสำหรับวิธีการที่แตกต่างกันซึ่งควรจะทำงานได้ในสภาพแวดล้อมแบบเรียลไทม์เช่นวิธีการแปลง Chamfer distance และ Voronoi ไดอะแกรมการประมาณตามการแปลง (ตามที่เสนอในงานนำเสนอโดย Pixeljunk Shooter dev guy ) แต่ ฉัน (และอาจเป็นที่คาดเดาของคนอื่น ๆ ) มีช่วงเวลาที่ยากมากจริง ๆ ทำให้พวกเขาใช้เพราะพวกเขามักจะยาวส่วนใหญ่ป่องกับคณิตศาสตร์และอัลกอริทึมไม่มากในการอธิบายของพวกเขา อัลกอริทึมใดที่คุณจะแนะนำสำหรับการสร้างเขตข้อมูลระยะไกลแบบเรียลไทม์ (อยู่ในเกณฑ์ดีของ GPU) โดยเฉพาะอย่างยิ่งเมื่อพิจารณาถึงคุณภาพของเขตข้อมูลระยะทาง เนื่องจากฉันกำลังมองหาคำอธิบาย / บทแนะนำที่เกิดขึ้นจริงซึ่งตรงข้ามกับลิงก์ไปยังกระดาษหรือสไลด์อื่นคำถามนี้จะได้รับรางวัลเมื่อมันมีสิทธิ์สำหรับหนึ่ง :-) นี่คือเหตุผลที่ฉันต้องทำในเวลาจริง: หากคุณต้องคำนวณ SDF เหล่านี้ล่วงหน้าสำหรับสภาพแวดล้อมแบบ 2D ขนาดใหญ่ (คิดว่าเป็นแผนที่แบบ Terraria ขนาดใหญ่) นี่หมายความว่าคุณยอมรับค่าใช้จ่ายที่ค่อนข้างใหญ่ในพื้นที่เก็บข้อมูล (และเวลาในการสร้างแผนที่) อัลกอริทึมที่ซับซ้อนซึ่งเร็วพอสำหรับการสร้าง SDF แบบเรียลไทม์ ตัวอย่างเช่นแผนที่ขนาดค่อนข้างเล็กที่มี 1,000 * 256 …

4
มีการใช้งานการประกอบเท่าไหร่ในรหัสเกมสมัยใหม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว โดยเฉลี่ยแล้วแอสเซมบลีที่ใช้ในรหัสเกมสมัยใหม่บ่อยแค่ไหน? โดยเฉพาะบนแพลตฟอร์มที่มีคอมไพเลอร์ C ++ ที่ดีอยู่แล้วเช่น x86, PPC หรือ ARM - เพราะฉันคิดว่าเกมบนระบบฝังตัวใช้ประโยชน์จากการประกอบอย่างกว้างขวาง
21 c++  c 

6
การวางแผนเกมและการออกแบบซอฟต์แวร์? ฉันรู้สึกว่า UML ไม่สะดวก
ในมหาวิทยาลัยของฉันพวกเขามักจะเน้นและโฆษณาเกี่ยวกับการออกแบบและสิ่ง UML ซึ่งฉันรู้สึกว่ามันจะไม่ทำงานได้ดีกับการออกแบบโครงสร้างของเกม ตอนนี้ฉันแค่ต้องการคำแนะนำอย่างมืออาชีพเกี่ยวกับวิธีที่ฉันจะเริ่มออกแบบเกมของฉันได้อย่างไร เรื่องคือฉันมีความสามารถในการเขียนโปรแกรมและได้ทำเกมเล็ก ๆ น้อย ๆ เช่นการทำให้ platformer 2D ทำงานเพื่อขยาย ปัญหาที่ฉันพบเกี่ยวกับโปรแกรมของฉันคือการออกแบบที่มีคุณภาพไม่ดี หลังจากเขียนโค้ดไประยะหนึ่งสิ่งต่าง ๆ เริ่มพังทลายลงเนื่องจากการวางแผนที่ไม่ดี (เมื่อฉันเพิ่มฟีเจอร์ใหม่มันทำให้ฉันต้องเขียนโปรแกรมใหม่ทั้งหมด) อย่างไรก็ตามการวางแผนทุกอย่างโดยไม่มีข้อบกพร่องในการออกแบบเพียงอย่างเดียวก็เหมาะเกินไป ดังนั้นคำแนะนำใด ๆ ที่ฉันควรวางแผนเกมของฉัน? ฉันจะใส่ลงในภาพที่มองเห็นได้อย่างไรเพื่อให้ฉันและเพื่อน ๆ สามารถดูภาพรวมการออกแบบได้ ฉันวางแผนที่จะเริ่มเขียนโปรแกรมเกมกับเพื่อนของฉัน นี่จะเป็นการทำงานเป็นทีมครั้งแรกของฉันดังนั้นคำแนะนำจากมืออาชีพใด ๆ ก็จะมีความสุข มีทางเลือกอื่นนอกเหนือจาก UML หรือไม่ คำถามอื่นคือ "การสร้างต้นแบบ" ตามปกติเป็นอย่างไร

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