การพัฒนาเกม

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

3
เกมวน C # / Windows Forms มาตรฐานคืออะไร?
เมื่อเขียนเกมใน C # ที่ใช้ Windows Forms แบบเก่าและกราฟิก API wrapper บางอย่างเช่นSlimDXหรือOpenTKเกมหลักจะต้องมีโครงสร้างอย่างไร แอปพลิเคชันแบบฟอร์มมาตรฐานของ Windows มีจุดเข้าใช้ที่มีลักษณะดังนี้ public static void Main () { Application.Run(new MainForm()); } และในขณะที่บางคนสามารถบรรลุสิ่งที่จำเป็นโดยการเชื่อมโยงเหตุการณ์ต่าง ๆ ของFormชั้นเรียนเหตุการณ์เหล่านั้นไม่ได้ให้สถานที่ที่ชัดเจนในการวางบิตของรหัสเพื่อดำเนินการปรับปรุงเป็นระยะเพื่อวัตถุตรรกะของเกมหรือเริ่มและสิ้นสุดการเรนเดอร์ กรอบ เทคนิคใดที่เกมดังกล่าวควรใช้เพื่อให้ได้สิ่งที่คล้ายกับบัญญัติ while(!done) { update(); render(); } ลูปเกมและจะทำอย่างไรกับประสิทธิภาพที่น้อยที่สุดและผลกระทบ GC?

1
แคชเอนทิตีระบบมีประสิทธิภาพอย่างไร?
เมื่อเร็ว ๆ นี้ฉันได้ทำการอ่านมากมายเกี่ยวกับระบบเอนทิตีเพื่อนำไปใช้ในเอ็นจิ้นเกม C ++ / OpenGL ของฉัน ประโยชน์หลักสองประการที่ฉันได้ยินอย่างต่อเนื่องเกี่ยวกับระบบเอนทิตีคือ การสร้างเอนทิตีแบบใหม่ ๆ ได้ง่ายเนื่องจากไม่ต้องยุ่งเกี่ยวกับลำดับชั้นการสืบทอดที่ซับซ้อนและ ประสิทธิภาพแคชซึ่งฉันมีปัญหาในการทำความเข้าใจ ทฤษฎีนี้เรียบง่ายแน่นอน แต่ละองค์ประกอบจะถูกเก็บไว้อย่างต่อเนื่องในบล็อกของหน่วยความจำดังนั้นระบบที่ใส่ใจเกี่ยวกับองค์ประกอบนั้นสามารถทำซ้ำในรายการทั้งหมดโดยไม่ต้องกระโดดไปรอบ ๆ ในหน่วยความจำและฆ่าแคช ปัญหาคือฉันไม่สามารถคิดถึงสถานการณ์ที่เป็นจริงได้ อันดับแรกให้ดูที่การจัดเก็บส่วนประกอบและวิธีการอ้างอิงซึ่งกันและกัน ระบบจำเป็นต้องทำงานกับส่วนประกอบได้มากกว่าหนึ่งองค์ประกอบนั่นคือทั้งระบบเรนเดอร์และระบบฟิสิกส์จำเป็นต้องเข้าถึงส่วนประกอบที่แปลงสภาพ ฉันได้เห็นการใช้งานที่เป็นไปได้หลายอย่างซึ่งกล่าวถึงเรื่องนี้และไม่มีสิ่งใดที่ทำได้ดี คุณสามารถมีพอยน์เตอร์เก็บส่วนประกอบไปยังส่วนประกอบอื่น ๆ หรือพอยน์เตอร์ไปยังเอนทิตีที่เก็บพอยน์เตอร์ไปยังส่วนประกอบ อย่างไรก็ตามทันทีที่คุณส่งพอยน์เตอร์ไปผสมคุณก็ฆ่าประสิทธิภาพของแคชแล้ว คุณสามารถมั่นใจได้ว่าทุกองค์ประกอบของอาเรย์นั้นมีขนาดใหญ่ 'n' โดยที่ 'n' คือจำนวนเอนทิตีที่มีอยู่ในระบบ สิ่งนี้ทำให้ยากมากในการเพิ่มประเภทส่วนประกอบใหม่ลงในเอ็นจิ้น แต่ยังคงทิ้งประสิทธิภาพของแคชไว้เพราะคุณกำลังกระโดดจากอาร์เรย์หนึ่งไปยังอีกอาร์เรย์หนึ่ง คุณสามารถแทรกเอนทิตี้ของอาร์เรย์แทนการเก็บอาร์เรย์แยกต่างหาก แต่คุณยังคงสูญเสียความจำ ทำให้ราคาแพงอย่างไม่น่าเชื่อในการเพิ่มส่วนประกอบหรือระบบใหม่ แต่ตอนนี้มีประโยชน์เพิ่มเติมของการทำให้ระดับเก่าทั้งหมดของคุณเป็นโมฆะและบันทึกไฟล์ นี่คือทั้งหมดที่สมมติว่าเอนทิตีถูกประมวลผลเชิงเส้นในรายการทุกเฟรมหรือติ๊ก ในความเป็นจริงนี่ไม่ใช่กรณี สมมติว่าคุณใช้เซกเตอร์ / พอร์ทัลเรนเดอร์หรืออ็อคทรีเพื่อทำการคัดแยก คุณอาจเก็บเอนทิตีต่อเนื่องกันภายในเซกเตอร์ / โหนด แต่คุณจะกระโดดไปมาไม่ว่าคุณจะชอบหรือไม่ก็ตาม จากนั้นคุณมีระบบอื่น ๆ ซึ่งอาจต้องการเอนทิตีที่จัดเก็บตามลำดับอื่น AI อาจไม่เป็นไรสำหรับการจัดเก็บรายการใหญ่จนกว่าคุณจะเริ่มทำงานกับ …

11
ฉันต้องอธิบายถึงความเหนือกว่าทางกลของตัวละครผู้เล่นในนวนิยายของเกมหรือไม่?
ในขณะที่ฉันสงสัยว่าวิธีการกำหนดแนวคิดนี้ซึ่งดูเหมือนจะเป็นเรื่องธรรมดา แต่แทบจะไม่ได้กล่าวถึงในเกม มันเป็นเรื่องเกี่ยวกับแนวความคิดของตัวละครที่ผู้เล่นควบคุม (PC)เป็นอย่างสม่ำเสมอดีกว่าทั่วไปอักขระควบคุมที่ไม่ใช่ผู้เล่น (NPC) สิ่งนี้จะต้องไม่ขึ้นอยู่กับทักษะของผู้เล่นจริง(กำหนดว่าสิ่งที่ผู้เล่นสามารถทำได้อย่างแข็งขัน) และมีอยู่ในพีซีแทน ตอนนี้สำหรับเกม RPG มันมักจะเป็นสิ่งที่มีชะตากรรมเวทมนตร์ทักษะที่เหนือกว่าอุปกรณ์หลังเวทีอุปกรณ์ที่ดีกว่า (มีเสน่ห์) มีพลังที่หายาก แต่ถ้าเป็นเรื่องเกี่ยวกับยานอวกาศที่มีขนาดเท่ากันประเภทและอุปกรณ์ ฉันจะอธิบายได้อย่างไรว่าผู้เล่นสามารถบดซ้ำ ๆ ได้อย่างง่ายดายผ่านเรือรบอวกาศ 5-10 ลำที่เขาใช้โดยไม่ต้องมีทักษะในการเล่นมากนักเนื่องจากอาวุธและเครื่องขับดันทำงานโดยอัตโนมัติ กดปุ่มอย่างมีประสิทธิภาพเพื่อเริ่มโจมตีเช่นเดียวกับที่ฝ่ายตรงข้ามกำลังทำอยู่ สมมติว่ามันเป็นช่วงเริ่มต้นของเกมเพื่อให้เป็นนามธรรม นอกจากนี้สมมติว่าการตั้งค่ามาตรฐานอนาคตที่ไม่มีองค์ประกอบตามตำนานพิเศษเช่นพลัง psi หรือคริสตัล มีแนวทางหรือแนวคิดใดบ้างที่สามารถนำมาใช้เพื่อพิสูจน์ความเหนือกว่าของพีซีโดยทั่วไป ในแง่คณิตศาสตร์ฉันต้องอธิบาย -75% ดาเมจที่ได้รับและดาเมจ + 300% นั้นเป็นพื้นฐานสำหรับพีซีทุกเครื่องอย่างน่าเชื่อถือ? หรือว่าเป็นเกมทั่วไปที่เป็นที่ยอมรับอย่างเงียบ ๆ ?

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

3
คุณจะเข้าถึงความละเอียดในเนื้อหากราฟิกแบบแรสเตอร์ได้อย่างไร?
เกมเหล่านั้นที่โชคไม่ดีพอที่จะเรียกใช้บนสเปคแพลตฟอร์มที่ถูกล็อคเช่นอุปกรณ์พกพาจำเป็นต้องทำงานในรูปแบบความละเอียดและอัตราส่วนภาพที่หลากหลาย ในเกม 3 มิติคุณอาจมี HUD หรือ GUI เมนูตามกราฟิกแรสเตอร์และในเกม 2 มิติคุณอาจมีล่ามมากมายซึ่งเป็นเรือสำหรับสไปรต์ ดังนั้นคำถามของฉันคือคุณจะออกแบบและใช้งานเนื้อหาในความละเอียดและอัตราส่วนภาพที่หลากหลายได้อย่างไร สมมติว่าคุณมีตัวละครสไปรต์ที่มีขนาด 300x400 พิกเซลสไปรท์และล้อมรอบด้วยระดับที่ทำจากแผ่นกระเบื้อง ในการแก้ปัญหาที่แตกต่างกัน / อัตราส่วนภาพคุณจะเห็น FOV อื่นทั้งหมด หรือถ้าคุณมี HUD หรือเมนู GUI คุณต้องการเก็บบางสิ่งไว้ในตำแหน่งเดียวกันและมีขนาดเท่ากันเมื่อเทียบกับหน้าจอ กระนั้นแหล่งกราฟิกก็คือบิตแมปแรสเตอร์ไม่ใช่เวกเตอร์ เห็นได้ชัดว่าปัญหาได้รับการแก้ไขหลายครั้ง ฉันสนใจที่จะได้ยินเกี่ยวกับวิธีการต่าง ๆ ที่ทำงานสำหรับคุณจนถึง คุณรักษาหน่วย 'พิกเซล' ที่ไม่เชื่อเรื่องพระเจ้าไว้โดยไม่ได้ตั้งใจซึ่งคุณเปลี่ยนเป็นมิติที่ต้องการอย่างน่าอัศจรรย์ผ่านสูตรโดยยึดตามความละเอียดและอัตราส่วนภาพหรือวิธีอื่น ๆ หรือไม่? แก้ไข: ดังนั้นข้อสรุปคือการระบุอัตราส่วนภาพของคุณ การผสมผสานด้านต่ำสุด: ความละเอียดเป็นสิ่งที่คุณออกแบบสิ่งที่สำคัญ พื้นที่ที่ปลอดภัยถ้าคุณจะ อัตราส่วนกว้างยาวเหมือนกัน แต่ความละเอียดที่สูงกว่าเป็นปัญหาการปรับสเกลง่าย เนื้อหาศิลปะถูกออกแบบมาเพื่อความละเอียดสูงสุด อัตราส่วนภาพกว้างขึ้นเพียงแสดงระดับ / FOV มากขึ้นด้วยข้อมูลที่นำเสนอซึ่งไม่สำคัญเท่าที่ควรในพื้นที่ปลอดภัย สิ่งที่ฉันทำในรูปนี้
32 2d  sprites  gui 


9
ปรับสมดุลผู้เล่นกับมอนสเตอร์: เส้นโค้งระดับขึ้น
ฉันเขียนเกมที่มีจำนวนพอสมควรซึ่งมีลักษณะคล้ายเกม RPG "เลเวลอัพ" ซึ่งผู้เล่นได้รับประสบการณ์ในการฆ่าสัตว์ประหลาด / ศัตรูและในที่สุดก็มาถึงระดับใหม่ซึ่งสถิติของพวกเขาเพิ่มขึ้น คุณจะพบความสมดุลระหว่างการเติบโตของผู้เล่นความแข็งแกร่งของมอนสเตอร์และความยากได้อย่างไร ปลายสุดของสเปกตรัมนี้คือ: ผู้เล่นเลเวลอัพเร็วมาก ๆ สัตว์ประหลาดมีความแข็งแกร่งอย่างไม่น่าเชื่อและแม้แต่ในระดับต่ำก็ยากที่จะเอาชนะ ฉันได้ลองสถานการณ์แปลก ๆ ที่ทำให้ศัตรูสัมพันธ์กับผู้เล่นนั่นคือศัตรูจะอยู่ที่ 50% หรือ 100% หรือ 150% ของสถิติผู้เล่นเสมอ (ดังนั้นผู้เล่นต้องใช้เทคนิคอื่นแทนการใช้กำลังดุเดือดเพื่อให้สำเร็จ) แต่ความสมดุลอยู่ที่ไหนและคุณหาได้อย่างไร แก้ไข:ตัวอย่างเช่นฉันคาดว่าจะได้ยินสิ่งต่าง ๆ เช่น: ยอดคงเหลือสูงแทนที่จะเป็นยอดคงเหลือต่ำ (200 HP และ 20 str ง่ายต่อการสมดุลกว่า 20 HP และ 2 str) ดูสัตว์ประหลาดที่ยากที่สุดและยากที่สุดและดูว่าคุณมีอะไรในช่วงของระยะ

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

8
เกมจะจัดการกับตัวละครทั้งหมดในครั้งเดียวได้อย่างไร?
คำถามนี้เป็นเพียงการได้รับความรู้เกี่ยวกับวิธีการที่เกมสามารถจัดการกับตัวละครมากมายในครั้งเดียว ฉันยังใหม่กับการเล่นเกมดังนั้นฉันจึงขอให้อภัยคุณล่วงหน้า ตัวอย่าง ฉันกำลังสร้างเกมป้องกันหอคอยที่มีช่องหอคอย 15 ช่องที่หอคอยถูกสร้างขึ้นและแต่ละหอจะยิงกระสุนออกมาในอัตราที่แน่นอน สมมติว่าทุก ๆ วินาทีมี 2 projectilesถูกสร้างขึ้นโดยแต่ละหอคอยและมีศัตรูเดินทัพในสนามรบให้บอกว่า 70 (แต่ละชนิดมีคุณลักษณะ 10 ประเภทเช่น HP, มานา ฯลฯ ซึ่งจะเปลี่ยนไปตามการเคลื่อนที่รอบ ๆ สนามรบ). สรุป จำนวนหอคอย = 15 Projectiles ที่สร้างโดยแต่ละหอคอยต่อวินาที = 2 จำนวนทั้งหมดของ Projectile ที่สร้างต่อวินาที = 30 หน่วยใน Battlefield Count = 70 ตอนนี้เกมจัดการ30 projectiles และ 70 ยูนิตโดยจัดการกับเธรด 100 หัวข้อ (ซึ่งมากเกินไปสำหรับพีซี) หรือ1 เธรดที่ย้ายทั้งหมดของพวกเขาลดค่าของพวกเขา ฯลฯ …

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

1
คุณจะเปลี่ยนลูกบาศก์เป็นทรงกลมได้อย่างไร
ฉันพยายามสร้างทรงกลมรูปสี่เหลี่ยมตามบทความซึ่งแสดงผลลัพธ์ดังนี้: ฉันสามารถสร้างลูกบาศก์ได้อย่างถูกต้อง: แต่เมื่อฉันแปลงคะแนนทั้งหมดตามสูตรนี้ (จากหน้าที่ลิงก์ด้านบน): x = x * sqrtf(1.0 - (y*y/2.0) - (z*z/2.0) + (y*y*z*z/3.0)); y = y * sqrtf(1.0 - (z*z/2.0) - (x*x/2.0) + (z*z*x*x/3.0)); z = z * sqrtf(1.0 - (x*x/2.0) - (y*y/2.0) + (x*x*y*y/3.0)); ทรงกลมของฉันมีลักษณะเช่นนี้: อย่างที่คุณเห็นขอบของลูกบาศก์ยังคงโผล่ออกมาไกลเกินไป ลูกบาศก์มีช่วงตั้งแต่-1ถึง+1แกนทั้งหมดเช่นบทความบอกไว้ ความคิดใด ๆ ที่ผิดปกติ?
31 3d  geometry  sphere 

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

10
อะไรที่ทำให้ตกใจกระโดดได้ดี?
ฉันกำลังเล่นเกมและต้องการรวมการกระโดดข้ามสองสามครั้ง ดังนั้นนี่คือคำถามที่ค่อนข้างง่าย - อะไรที่ทำให้ตกใจกระโดดดีและเมื่อใดและอย่างไรพวกเขาควรจะเกิดขึ้น?

7
ทำไมเกมถึงมีของใช้สิ้นเปลือง?
ลองคิดถึงคำถามนี้และสิ่งที่ยอดเยี่ยมเกินกว่าจะใช้ Trope โดยทั่วไป ทำไมนักออกแบบเกมจึงต้องการรวมไอเท็มสิ้นเปลืองไว้ในเกม? Mortal Kombat 11 ทำให้ฉันคิดว่า ... ทำไมต้องรวมยุทโธปกรณ์ที่ทำให้คุณได้เปรียบในการต่อสู้เลย? ฉันกำลังมองหาคำตอบที่เป็นรูปธรรมสำหรับสิ่งที่เป็นของใช้ในการเล่นเกมไม่ว่าจะเกี่ยวกับสิ่งที่คุณสามารถซื้อด้วยเงินจริงหรือที่คุณเพิ่งได้รับจากการเล่นเกมหรือไม่ว่าจะมี จำกัด หรือไม่ จำกัด ปริมาณ

5
ใช้อินสแตนซ์หรือคลาสสำหรับทรัพยากรเกม (ไม้เหล็กทอง)
ดังนั้นฉันจึงสร้างเกมที่คุณสามารถส่งเรือไปยังสถานที่ต่างๆเพื่อขายหรือซื้อทรัพยากรเช่นไม้เหล็กทองคำ ฯลฯ ตอนนี้ฉันกำลังสงสัยว่าจะสร้างทรัพยากรในเกมได้อย่างไร ฉันมากับ 2 ตัวเลือก สร้างคลาสสำหรับแต่ละทรัพยากร: public class ResourceBase { private int value; // other base properties } public class Gold : ResourceBase { public Gold { this.value = 40 // or whatever } } สร้างอินสแตนซ์ของคลาสทรัพยากร public class Resource { string name; int value; public Resource(string name, int value) …

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