ฉันเจอคำถามนี้เมื่อฉันออกแบบวิดีโอเกมใน C #
หากเราพิจารณาเกมเช่นBattlefieldหรือCall of Dutyกระสุนหลายร้อยหรือหลายพันกระสุนกำลังบินในเวลาเดียวกัน เหตุการณ์ถูกเรียกใช้อย่างต่อเนื่องและจากสิ่งที่ฉันรู้สิ่งนี้ดูดพลังการประมวลผลมากมาย ... หรือไม่? ฉันต้องการทราบว่านักพัฒนาเกมต่าง ๆ จัดการกับสัญลักษณ์แสดงหัวข้อย่อย (2D และ 3D) และวิธีที่มีประสิทธิภาพที่สุดสำหรับแต่ละรายการอย่างไร
ฉันอ่านคำถามว่ากระสุนถูกจำลองในวิดีโอเกมอย่างไร แต่มันไม่ได้สัมผัสว่ากระสุนทำงานอย่างไรจากมุมมองการออกแบบโปรแกรม
ฉันมีความคิดสองสามข้อ แต่ก็มีข้อเสีย:
วิธีที่มีประสิทธิภาพที่สุดที่ฉันคิดได้ (สำหรับเกม 2D):
สมมติว่าฉันต้องสร้างคลาสที่ชื่อว่า Bullet แต่ผู้ใช้กดปุ่มค้างไว้นาน 0.01 วินาทีทุกครั้งที่มีการสร้างวัตถุ Bullet กระสุนนี้มี:
1ความเร็ว
2ตำแหน่งเริ่มต้นของตำแหน่งที่มันถูกยิงจาก
3 Sprite เนื้อ
4เอฟเฟกต์ที่โจมตี
เนื่องจากสัญลักษณ์แสดงหัวข้อจะเป็นคลาสของตัวเองจึงสามารถจัดการการวาดการเคลื่อนไหวและการดำเนินการฟังเอง
หน่วยประมวลผลจะไม่สามารถประมวลผลวัตถุนับพันรายการได้ยากหรือไม่แล้วจะถูกทำลาย (เมื่อมีการเรียกใช้เอฟเฟกต์เมื่อโจมตี) พื้นที่แรม?
วิธีการที่มีประสิทธิภาพสำหรับเกม 3D - อีกหนึ่งความคิดที่ฉันมีคือ:
ให้บอกว่าฉันสร้างคลาสอาวุธ อาวุธนี้มีคุณสมบัติหลากหลายซึ่งบางส่วน:
1ตรวจสอบว่าอาวุธเล็งไปที่ใดและตัดสินว่ามองเป้าหมายหรือไม่
2เรียกภาพเคลื่อนไหวของการยิงปืน
3มีเมธอด doDamage () ที่บ่งบอกบางสิ่งที่จะลบความแข็งแรงออกจากสิ่งที่ปืนชี้ไป
4แจ้งคลาสกระสุนเคลื่อนไหวเมื่อกดปุ่ม
ฉันสามารถสร้างคลาสแบบคงที่, พูด BulletAnimation, ที่สามารถรับการแจ้งเตือนจากที่ที่ปืนถูกเรียกมันคือ, ซึ่งปืนนั้นชี้ไปที่ (สำหรับปลายทางกระสุน) และข้อมูลเกี่ยวกับสไปรต์และความเร็วที่เหมาะสมเพื่อใช้กระสุน . ชั้นนี้จะดึงสไปรต์ (บนเธรดใหม่บางที idk) ตามตำแหน่งและสไปรท์ที่ต้องการเพื่อจำลองลูกกระสุนที่ถูกไล่ออกจากปืน
หลังดูเหมือนจะยากกว่าในการเขียนโค้ดและจะไม่ใช้พลังการประมวลผลจำนวนมากในการเรียกสแตติกเพื่อทำสิ่งนี้ต่อครั้งเป็นพัน ๆ ครั้ง? การได้รับการอัปเดตอย่างต่อเนื่องทั้งตำแหน่งเริ่มต้นและจุดสิ้นสุดก็ยากเช่นกัน
คำถามของฉันคือผู้สร้างเกมมีประสิทธิภาพมากที่สุดทำอะไร? วิธีนี้เปลี่ยนจากเกม 2D เป็น 3D หรือไม่?
pew-pew-pew
เทคโนโลยี :)