การพัฒนาเกม

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

5
ฉันจะหาแบบอักษรที่ฉันสามารถแจกจ่ายกับเกมโอเพนซอร์ซได้ที่ไหน [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา ฉันต้องการที่จะปล่อยเกมของฉันเป็นโอเพ่นซอร์สและฉันต้องสามารถแจกจ่ายไฟล์ฟอนต์กับเกมของฉัน ฉันจะหาแบบอักษรที่ฉันสามารถใช้ด้วยวิธีนี้ได้ที่ไหนและฉันควรมองหาใบอนุญาตแบบอักษรใด มีข้อควรพิจารณาเพิ่มเติมหรือไม่ถ้าฉันต้องการปล่อยเกมของฉันภายใต้ GPL แทนที่จะเป็นลิขสิทธิ์แบบโอเพนซอร์สที่ จำกัด น้อยกว่าเช่น BSD แก้ไข:เพื่อตอบ Olie ว่าคำถามนั้นไม่ชัดเจน: ปัญหาหลักของฉันคือแบบอักษรที่ฉันพบบนอินเทอร์เน็ตไม่ได้ระบุสิทธิ์ใช้งานอย่างชัดเจนหรือมีสิทธิ์ใช้งานที่ไม่ชัดเจนว่าฉันสามารถแจกจ่ายแบบอักษรด้วยซอฟต์แวร์ได้หรือไม่ . ฉันรู้น้อยมากเกี่ยวกับลิขสิทธิ์แบบอักษร แต่ฉันกำลังมองหาแหล่งที่มาของแบบอักษรซึ่งรับประกันได้ว่าแบบอักษรนั้นเป็นโอเพนซอร์ส / ครีเอทีฟคอมมอนส์ / โดเมนสาธารณะ / ใบอนุญาตแบบอักษรอื่น ๆ ที่อนุญาตให้ฉันแจกจ่ายเกมได้โดยไม่ต้องจ่ายค่าธรรมเนียมลิขสิทธิ์

9
อัลกอริทึมเส้นทางแบบไดนามิกสำหรับเกมป้องกันหอ
ฉันสร้าง Tower Defense และฉันต้องการอัลกอริทึม pathing ที่ดีสำหรับมัน ฉันคิดเกี่ยวกับ Dijkstra แต่ฉันต้องการสิ่งที่สามารถเปลี่ยนแปลงได้ จะต้องสามารถอัปเดตตัวเองได้เมื่อขอบหนึ่งถูกลบหรือเพิ่มโดยไม่มีการคำนวณใหม่ทั้งหมด ฉันกำลังเขียนโปรแกรมใน C # ถ้ามันช่วย

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

4
รับทราบความน่าเชื่อถือโดยใช้ UDP
ฉันมีคำถามเกี่ยวกับ UDP สำหรับบริบทฉันทำงานในเกมแอ็คชั่นตามเวลาจริง ฉันได้อ่านบ้างเล็กน้อยเกี่ยวกับความแตกต่างระหว่าง UDP และ TCP และฉันรู้สึกว่าเข้าใจค่อนข้างดี แต่มีชิ้นส่วนหนึ่งที่ไม่เคยรู้สึกถูกต้องและน่าเชื่อถือและมีการตอบรับเป็นพิเศษ ฉันเข้าใจว่า UDP ไม่ได้ให้ความน่าเชื่อถือตามค่าเริ่มต้น (เช่นแพ็คเก็ตสามารถถูกทิ้ง เมื่อจำเป็นต้องมีความน่าเชื่อถือโซลูชันที่ฉันเห็น (ซึ่งเหมาะสมตามแนวคิด) คือการใช้ acceptgments (เช่นเซิร์ฟเวอร์ส่งแพ็กเก็ตไปยังไคลเอ็นต์และเมื่อไคลเอ็นต์ได้รับข้อความนั้นจะส่งการตอบกลับไปยังเซิร์ฟเวอร์) . จะเกิดอะไรขึ้นเมื่อการตอบรับลดลง ในตัวอย่างข้างต้น (เซิร์ฟเวอร์หนึ่งกำลังส่งแพ็คเก็ตไปยังไคลเอนต์หนึ่ง) เซิร์ฟเวอร์จัดการการสูญหายของแพ็กเก็ตที่อาจเกิดขึ้นโดยการส่งแพ็กเก็ตใหม่ทุกเฟรมจนกว่าจะได้รับการตอบรับสำหรับแพ็กเก็ตเหล่านั้น คุณยังอาจพบปัญหาเกี่ยวกับแบนด์วิดท์หรือข้อความที่ไม่เป็นไปตามคำสั่ง แต่จากมุมมองการสูญเสียแพ็คเก็ตเซิร์ฟเวอร์ครอบคลุม อย่างไรก็ตามหากลูกค้าส่งการตอบรับที่ไม่เคยมาถึงเซิร์ฟเวอร์จะไม่มีทางเลือกนอกจากต้องหยุดส่งข้อความในที่สุดซึ่งอาจทำลายเกมได้หากจำเป็นต้องมีข้อมูลในแพ็คเก็ตนั้น คุณสามารถใช้วิธีการที่คล้ายกันไปยังเซิร์ฟเวอร์ (เช่นส่งการตอบรับจนกว่าคุณจะได้รับ ack สำหรับ ack?) แต่วิธีการนั้นจะทำให้คุณวนกลับไปกลับมาตลอดไป (เนื่องจากคุณต้องการ ack สำหรับ ack สำหรับ ack และอื่น ๆ ) ฉันรู้สึกว่าตรรกะพื้นฐานของฉันถูกต้องตรงนี้ซึ่งทำให้ฉันมีสองตัวเลือก ส่งแพ็คเก็ตการตอบรับเพียงครั้งเดียวและหวังว่าจะดีที่สุด ส่งแพ็คเก็ตการรับทราบจำนวนหนึ่ง (อาจ 3-4) และหวังว่าจะดีที่สุดโดยสมมติว่าจะไม่ทิ้งทั้งหมด มีคำตอบสำหรับปัญหานี้หรือไม่? ฉันเข้าใจอะไรผิดหรือเปล่า? มีการรับประกันการใช้ …
16 networking  udp 

6
วิดีโอเกมจะเก็บข้อมูลไว้ที่หน้าจอนอกได้อย่างไร
ฉันกำลังพยายามสร้างวิดีโอเกมตั้งแต่เริ่มต้น แต่ฉันยังใหม่กับสิ่งนี้และยังคงพบกับปัญหาพื้นฐาน ที่สำคัญที่สุดวิดีโอเกมจะจัดเก็บข้อมูลนอกจอได้อย่างไร สิ่งที่ฉันหมายถึงคือโปรแกรมรู้ได้อย่างไรว่าจะแสดงอะไรต่อไปบนหน้าจอ หรือแม้กระทั่งหากผู้เล่นเปลี่ยนสภาพแวดล้อมการเปลี่ยนแปลงนี้จะยังคงอยู่ในครั้งต่อไปที่โหลดลงบนหน้าจออย่างไร ตัวอย่างเช่นใน New Super Mario Bros ถ้าคุณกดปุ่ม? ปิดกั้นแล้วออกจากหน้าจอและกลับมาก็ยังคงถูกโจมตี ข้อมูลนี้ถูกเก็บไว้อย่างไรและดำเนินการในครั้งต่อไปที่ผู้เล่นโหลดบล็อก? ทำไมมันไม่รีเซ็ต

4
เป็นความคิดที่ดีไหมที่จะ "แมป" ตำแหน่งของเมาส์บนหน้าจอเพื่อให้การตรวจจับการชนกันทำงานโดยไม่คำนึงถึงความละเอียด
พิจารณาเกมที่ความละเอียดเริ่มต้นคือ 800x600 วัตถุที่มีมาสก์การชนกันอยู่ในโลกของเกมขนาด 800x600 หน้ากากกันการปะทะสามารถตรวจจับได้เมื่อเมาส์ชนกับมัน ตอนนี้ให้พิจารณาว่าเราขยายขนาดเกมได้ถึง 1024x768 (สมมติว่าเราขยายกราฟิกโดยการแสดงทุกอย่างให้เป็นเลเยอร์แล้วขยายขนาดเลเยอร์ทั้งหมดขึ้นในครั้งเดียว) เรามีสองตัวเลือกสำหรับการชนกับเมาส์ทำงานอย่างถูกต้องในความละเอียดใหม่นี้: A. ) ขยายขอบเขตของโลกเป็น 1024x768 และปรับสเกลการชนของวัตถุทุกชิ้นตามลำดับ B. ) "แผนที่" ตำแหน่งของเมาส์ไปสู่โลกดั้งเดิม (800x600) โดย "map" ฉันหมายถึงเพียงแค่ปรับตำแหน่งเมาส์บนโลก 800x600 ดั้งเดิม ตัวอย่างเช่นหากตำแหน่งของเมาส์บนหน้าจอคือ (1024, 768) ดังนั้นตำแหน่งของเมาส์ในโลกคือ (800, 600) ตอนนี้เห็นได้ชัดว่าตัวเลือก B ต้องการวิธีการคำนวณที่น้อยลงและอาจมีข้อผิดพลาดทางเรขาคณิตน้อยกว่า แต่ก็รู้สึกเหมือน "แฮ็ก" สำหรับฉันเช่นมีผลที่ไม่คาดคิดจากการใช้วิธีนี้ที่จะแก้ไขในภายหลัง ฉันควรใช้วิธีใด: A, B หรืออย่างอื่น

10
เสียงสุ่มบนพื้นฐานของเมล็ด
ฉันกำลังทำงานกับโปรแกรมที่ควรสร้างสัญญาณรบกวนแบบสุ่มบนหน้าจอโดยยึดตาม 'พิกัด' ของพิกเซล พิกัดควรมีสีเดียวกันทุกครั้งที่คุณเริ่มโปรแกรมใหม่ อย่างไรก็ตามการใช้ประโยชน์ของ Java การสุ่มผลลัพธ์ที่ฉันได้รับนั้นไม่ได้สุ่มอย่างที่ฉันต้องการ: ฉันคิดว่าถ้าฉันใช้พิกัดร่วม (เช่นเดียวกับจำนวนเต็มหนึ่งตัวที่เกิดขึ้นจากพิกัดทั้งสองข้างถัดจากแต่ละอื่น ๆ ) แต่ละพิกัดจะมีจำนวนที่แตกต่างกัน โดยการใช้หมายเลขนั้นเป็นเมล็ดฉันคาดว่าจะได้รับตัวเลขสุ่มที่แตกต่างกันสำหรับแต่ละพิกัดเพื่อใช้สำหรับค่า rgb ของพิกัดนั้น นี่คือรหัสที่ฉันใช้: public class Generate { static Random Random; public static int TileColor(int x, int y){ Random = new Random(Integer.valueOf(Integer.toString(x)+Integer.toString(y))); int b = 1 + Random.nextInt(50); int g = 1 + Random.nextInt(50); int r = 1 …
16 java  random 

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

4
ใช้การสร้างอินสแตนซ์สำหรับทุกสิ่งหรือไม่
อินสแตนซ์ช่วยเพิ่มประสิทธิภาพ (อย่างมีนัยสำคัญ) เมื่อเรนเดอร์หลายชุด แต่มันมีค่าใช้จ่ายเท่าไหร่เมื่อแสดงสำเนาหนึ่งชุดด้วยการเรียกแบบดึงครั้งเดียว เป็นความคิดที่ดีหรือไม่ดีที่จะใช้อินสแตนซ์สำหรับรูปทรงเรขาคณิตทั้งหมดของเครื่องยนต์ แก้ไข: สมมติว่าเรากำลังสร้างเกม FPS วัตถุส่วนใหญ่มีเพียงตัวอย่างเดียว: มีด, ปืน, ปืนกล, อาคารและหอวิทยุ แต่ยังมีวัตถุบางอย่างที่มีหลายอินสแตนซ์: ต้นไม้ (เช่น 3 ชนิดของต้นไม้ที่มีหลายร้อยอินสแตนซ์) หญ้าและอื่น ๆ ... สิ่งที่ฉันหมายถึงคือ: แทนที่จะแสดงวัตถุแบบเดียวกับวิธี "ดั้งเดิม" และต้นไม้ และหญ้าโดยใช้อินสแตนซ์เราแสดงผลทั้งหมดโดยใช้อินสแตนซ์ ดังนั้นหอวิทยุของเรามีเพียงหนึ่งตัวอย่าง (ที่มีข้อมูลที่เราเก็บไว้ในบัฟเฟอร์ข้อมูลเป็นต้น) และเราทำให้หอว่าการใช้ชนิดของการโทรกับอินสแตนซ์นับเท่ากับDrawInstanced() 1เช่นเดียวกับวัตถุอื่น ๆ (แน่นอนต้นไม้และหญ้ามีหลายกรณี) ดังนั้นคำถามของฉันคือ: มันเป็นความคิดที่ดีที่จะวาดอินสแตนซ์เดียวของวัตถุโดยใช้อินสแตนซ์หรือไม่? การอินสแตนซ์มีค่าใช้จ่ายมากเกินไป (หน่วยความจำและประสิทธิภาพการทำงานที่ฉลาด) หรือเป็นสิ่งที่ไม่พึงประสงค์ในการเรนเดอร์วัตถุอินสแตนซ์เดี่ยวหรือไม่?
16 mesh  instancing 

2
เทคนิคการเพิ่มประสิทธิภาพการเรนเดอร์ทั่วไปสำหรับเรขาคณิตผ่านในเรนเดอร์แรเงาที่เลื่อนออกไปเป็นอย่างไร [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันพัฒนาเครื่องมือเกมโดยใช้ OpenGL 3 และ C ++ (และ glfw สำหรับการจัดการหน้าต่าง) ฉันได้ก้าวหน้าไปแล้วทำสิ่งต่าง ๆ ให้เสร็จยกเว้นเสียงและการปรับให้เหมาะสมที่สุด เอ็นจิ้นใช้การแรเงาที่เลื่อนออกไปดังนั้นเนื่องจากการแรเงาที่เลื่อนออกไปนั้นเป็นกระบวนการที่น่าเบื่อสำหรับ GPU โดยเฉลี่ยฉันต้องการเพิ่มประสิทธิภาพของกระบวนการเรนเดอร์ให้มากที่สุด ระบบปัจจุบันประกอบด้วยฉากที่มี Renderer std::vectorsและโลกปัจจุบันและโลกถือหน่วยงานและหน่วยงานที่แยกออกจากแสง ดังนั้นโดยทั่วไปทุกครั้งที่ซีนถูกเรียกโดย->render()และมันเรียกว่า Renderer ผ่านโลกเป็นพารามิเตอร์และรับเอนทิตีซ้ำจากทั่วโลกดึงพวกมันไปยัง FBO จากนั้นผ่านหน่วยแสงสำหรับการผ่านครั้งที่สอง และฉันคิดว่ามันไม่เพียงพอ อัลกอริทึมปัจจุบันของฉันวนซ้ำทุกอย่างแม้ว่าเอนทิตีไม่ได้อยู่ในพื้นที่หน้าจอ ฉันกำลังคิดหาวิธีเพิ่มประสิทธิภาพอัลกอริธึมการแสดงผลปัจจุบันดังนั้นจึงเรียกเฉพาะฟังก์ชัน API เฉพาะสำหรับวัตถุที่มองเห็นดังนั้นเทคนิคทั่วไปในการปรับการแสดงผลให้เหมาะสมคืออะไร

3
ผู้เล่นอันดับที่ใช้ Elo ที่มีผู้เล่นมากกว่าสองคน
ฉันต้องการใช้ Elo เพื่อติดตามการจัดอันดับผู้เล่นระหว่างการแข่งขันของเกมบางเกมอย่างไรก็ตามเกมสามารถเล่นได้กับผู้เล่นสูงสุดสี่คนในการแข่งขัน ฉันเคยเห็นเกมอย่าง Carcassonne ใช้ Elo ที่มีผู้เล่นมากกว่าสองคนเล่น แต่ฉันไม่คุ้นเคยกับ Elo เกินกว่า 1-1 คู่ จากบทความวิกิพีเดียสมการของผู้เล่นสองคนที่ฉันต้องการขยายคือ: E = 1 / (1 + 10 (R ข - R ) / 400 ) E b = 1 / (1 + 10 (R a - R b ) / 400 ) R x ใหม่ = …


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

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

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

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