C ++ ถูกแทนที่ด้วย C # ในเกมอุตสาหกรรมหรือไม่


23

ในอุตสาหกรรมเกมผมหมายถึง Quake, CoD เป็นต้น


7
มันจะช่วยได้ถ้าคุณอธิบายสั้น ๆ ว่าอะไรทำให้คุณมีความคิด
Konrad Rudolph

2
การพิจารณาแผ่นดินไหวจะเกิดขึ้นใน C .. ;-)
The Communist Duck

ฉันแค่สงสัยคำถามนี้เอง!
เจฟฟ์

2
ดูเหมือนว่าโดย "เกมอุตสาหกรรม" คุณหมายถึงสิ่งที่มักจะเรียกว่า "ชื่อ AAA"
ความโกลาหล

คำตอบ:


53

เรียกได้ว่า C ++ นั้นถูกแทนที่จริงๆ - ไม่เพียงแค่ C # เท่านั้น แต่ยังมีภาษาอื่น ๆ แต่ถ้าคุณถามมันจะโดยแทนที่สมบูรณ์ - แล้วคำตอบคือแน่นอนไม่มี

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

ความจุที่สองนี้ไม่ต้องการจุดแข็งของ C ++ (เช่นการควบคุมรายละเอียดระดับต่ำอย่างสมบูรณ์) แต่ได้รับผลกระทบจากจุดอ่อน (เช่นการจัดการหน่วยความจำที่เขียนด้วยมือแบบบั๊ก) และในความสามารถที่สองนี้ C ++ จะถูกแทนที่ด้วยภาษาสคริปต์ที่แตกต่างกัน นักพัฒนาจำนวนมากใช้ Lua บางคนใช้ Python แต่ถ้าแพลตฟอร์ม CLI พร้อมใช้งานในรูปแบบของ. NET หรือ Mono ก็จะแสดงโฮสต์ผู้เขียนสคริปต์ที่ดี แพลตฟอร์มเหล่านี้ค่อนข้างรวดเร็วเชื่อถือได้นำเสนอภาษาที่รู้จักกันอย่างกว้างขวาง (C #) และห้องสมุดระดับฐานที่ครอบคลุม อย่าลืมเครื่องมือ: MS Visual studio และ SharpDevelop / MonoDevelop อาจไม่ใช่ IDE ที่ดีที่สุดในโลก แต่มันก็ค่อนข้างดี

ดังที่กล่าวมาเกมเอ็นจิ้นจะไม่ถูกเขียนใน C # (หรือ Lua หรือ Python สำหรับเรื่องนั้น) ทำไม? เพราะมันไม่เร็วพอ

ขัดกับความเชื่อที่นิยมมากเดียวตีประสิทธิภาพที่ใหญ่ที่สุดในวันนี้คือเนื่องจากความล่าช้าของหน่วยความจำ ซึ่งหมายความว่าการเข้าถึงหน่วยความจำเป็นเรื่องจริงจัง และภาษาที่มีการจัดการไม่อนุญาตให้ผู้ใช้ควบคุมการเข้าถึงหน่วยความจำ - นั่นเป็นเหตุผลที่พวกเขา "จัดการ" ในครั้งแรก ดังนั้นภาษาที่ไม่มีการจัดการจะอนุญาตให้เขียนเอ็นจินเกมที่รวดเร็วมาก ที่จริงแล้วเครื่องยนต์ "C #" ใหญ่ทั้งหมดที่ฉันนึกถึง - XNA, MOGRE, Unity - ขึ้นอยู่กับรหัส C ++ ดั้งเดิม แต่อนุญาตให้เขียนตรรกะของเกมใน C #

ในการสรุป : C # จะถูกใช้แทน C ++ หรือภาษาอื่น ๆ แต่จะไม่แทนที่ C ++ อย่างน้อยก็จนกว่าจะมีคนคิดค้นหน่วยความจำเข้าถึงได้ทันทีที่ไม่มีความหน่วงแฝง


16
+1 Visual Studio เป็น IDE ที่ดีมาก แม้ว่ามันจะเป็นด้านมืด ...
Michael Coleman

1
Bah ในประสบการณ์ของฉัน C # ไม่เร็วพอสำหรับการจำลองเช่นกัน แต่นั่นก็ไม่ได้หยุดยั้งผู้คนไม่ให้ลอง
BigSandwich

@Nevermind "ภาษาที่มีการจัดการ" คืออะไร?
Quazi Irfan

3
@iamcreasy ในความหมายกว้าง ๆ โดย "ภาษาที่มีการจัดการ" ฉันหมายถึงภาษาที่ทำงานภายใต้เครื่องเสมือนที่มีการรวบรวมขยะบางรูปแบบและ / หรือการจัดการหน่วยความจำ ภาษาที่ได้รับการจัดการอย่างเข้มงวดมากขึ้นคือภาษาที่มีเป้าหมาย (การใช้งานบางอย่าง) Common Language Runtime แต่คำตอบของฉันไม่ได้มีเฉพาะกับพวกเขาเท่านั้น
ไม่เป็นไร

ในความเห็นของคุณโครงร่าง GC ที่นับอ้างอิงอ้างอิงอยู่ภายใต้หมวดหมู่นี้ a la Vala หรือไม่
weberc2

6

การเลือกภาษาขึ้นอยู่กับแพลตฟอร์มเป็นอย่างมาก ตอนนี้ดูเหมือนว่าไม่น่าเป็นไปได้ที่จะมีสิ่งใดนอกจากแพลตฟอร์มของ Microsoft ที่จะต้องใช้. NET ในการดำเนินการ

ภูมิปัญญาดั้งเดิมจะบอกว่าเป็นแพลตฟอร์มที่มีขนาดเล็กจะต้องใกล้เคียงกับโลหะที่จะ performant แต่ในมืออื่น ๆ , แพลตฟอร์มการจัดการมีความปลอดภัยมากขึ้น นั่นอาจเป็นเหตุผลที่ Windows Phone 7 บังคับให้คุณใช้. NET

มันจะน่าสนใจอย่างแน่นอนหาก Xbox ใหม่ต้องการแพลตฟอร์มที่มีการจัดการ หากฮาร์ดแวร์ของโทรศัพท์สามารถจัดการได้ (และเป็นเช่นนั้น) ฉันจะเห็นพวกเขาใช้มันบนคอนโซลขนาดเต็ม มันจะกระตุ้นระบบนิเวศของคอนโซลสักหน่อยเพราะมันยากที่จะเขียนเกมข้ามแพลตฟอร์มโดยไม่ต้องเขียนโค้ดเกมของคุณทั้งหมดในภาษาสคริปต์ หากเป็นเช่นนั้น C # จะไม่แทนที่ C ++ แต่มันจะไปด้วยกัน

ตอนนี้คุณสามารถใช้ Mono เป็นสคริปต์แบ็คเอนด์ (คล้ายกับ Unity ทำ) แต่ฉันคิดว่าผู้ผลิตเครื่องยนต์ส่วนใหญ่ต้องการที่จะม้วนตัวเองหรือใช้อะไรที่กะทัดรัดกว่าเช่น Lua หรือ Python มากกว่า C #

ไม่ว่าจะด้วยวิธีใดมันเป็นเรื่องของเครื่องมือที่เหมาะสมสำหรับงานที่เหมาะสม คุณควรเรียนรู้ทั้งสองภาษาจริง ๆ เนื่องจาก C # ทำให้การทำบางสิ่งง่ายขึ้น (การพัฒนาเครื่องมือการพัฒนาเซิร์ฟเวอร์เป็นต้น) และคุณไม่สามารถใช้อะไรเลยนอกจาก C ++ ในบางกรณี


ณ ตอนนี้ 3 ปีต่อมาสถานะของ C # สำหรับการพัฒนาเกมมีการพัฒนามากขึ้น Mono-Project หยิบ XNA Game Studio ขึ้นมาและเปลี่ยนเป็น MonoGame SharpDX, SlimDX และ OpenTK ล้วนเป็นตัวห่อ opengl / directx ที่ดีมาก ๆ แม้แต่เครื่องยนต์ฟิสิกส์บางตัวใน c # ก็เกิดขึ้นมา Mono / MonoGame ช่วยให้คุณสร้างเกมได้ครั้งเดียวและต่อเชื่อมอัตโนมัติกับ android, linux, mac os, ios, xbox 360, ps3, ps4 และ wii
Ryan Mann

3

มันไม่น่าเป็นไปได้ C ++ มีประโยชน์ในระดับต่ำเพื่อให้นักพัฒนาสามารถปรับแต่งรายละเอียดที่เล็กที่สุดเพื่อให้ได้ประสิทธิภาพที่ดีที่สุด

ด้วย C # และ. NET คุณมีการรวบรวมขยะซึ่งมีประโยชน์มาก แต่เมื่อทำงานกับแพลตฟอร์มที่มีหน่วยความจำ จำกัด และทรัพยากร (คอนโซลพกพาและคอนโซลที่ใช้ในบ้าน) คุณจำเป็นต้องควบคุมหน่วยความจำให้มากที่สุดเท่าที่จะทำได้ ของทรัพยากร การอนุญาตให้ภาษาที่มีการจัดการจัดสรรและเพิ่มหน่วยความจำสำหรับคุณน่าจะทำให้เกิดปัญหามากมาย

ความเร็วก็เป็นปัญหาเช่นกัน (แม้ว่าอาจน้อยกว่านั้น) เมื่อเวลาผ่านไปฉันแน่ใจว่าภาษาที่มีการจัดการสามารถทำการเปรียบเทียบกับคอมไพเลอร์ C ++ ได้

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


2

AFAIK .NET GC ยังคงมีปัญหาจากการหยุดอัลกอริธึมสไตล์โลก แม้ว่านี่จะเหมาะสมสำหรับแอพพลิเคชั่นที่หลากหลาย แต่ก็ไม่เป็นที่ยอมรับสำหรับแอพแบบเรียลไทม์เช่นเกม

ในความเป็นจริงมันยากมากที่จะใช้ภาษาที่มีการจัดการอย่างมีประสิทธิภาพสำหรับโปรแกรมแบบเรียลไทม์จนกว่าเราจะมีความก้าวหน้าใน GC


1

ไม่ทั้งนี้ขึ้นอยู่กับ. NET ที่บ่งบอกถึงการเขียนซ้ำครั้งใหญ่สำหรับแพลตฟอร์มที่ไม่มี Framework เช่น PS3 และข้อเสียของประสิทธิภาพอาจเป็นที่ยอมรับได้อย่างสมบูรณ์แบบบนพีซีหรือสำหรับเกม Live Arcade แต่เกมที่มีขนาดใหญ่กว่านั้น ประสิทธิภาพการทำงานจากคอนโซลของพวกเขาเพื่อให้ทำงานได้เร็วพอ ยิ่งไปกว่านั้นมีฐานรหัสขนาดใหญ่ใน C ++ ที่ไม่มีใครสามารถอัพเกรดได้แม้ว่าพวกเขาต้องการ C ++ อยู่ในอุตสาหกรรมเกมและจะยังคงอยู่ต่อไปอีกนาน


ในขณะที่มีความเฉื่อยอยู่โค้ด C ++ ไม่ใช่ตัวของมันเองที่เก่าแก่ที่สุด - บางทีอาจจะนานถึง 10 ปี รหัสเกือบทั้งหมดในพวกเขาได้รับการเปลี่ยนในช่วงเวลานั้น - สำหรับเครื่องเร่งความเร็ว 3 มิติ, ท่อส่งที่ตั้งโปรแกรมได้, สถาปัตยกรรมที่ขับเคลื่อนด้วยข้อมูลและการสนับสนุนการเขียนสคริปต์ หากนักพัฒนา AAA ต้องการทำการโยกย้ายเต็มรูปแบบไปที่ C # พวกเขาอาจทำได้โดยเสียค่าใช้จ่ายน้อยที่สุดภายในพื้นที่ของเกมสามเกม - ใช้มันเป็นเครื่องมือและโฮสต์การเขียนสคริปต์อันดับที่สองย้ายเลเยอร์ตรรกะเกมลงไปและพอร์ตที่สาม renderer เพื่อใช้ wrapper DX / GL ที่ได้รับการจัดการ

1
Mono มีโซลูชัน. NET เชิงพาณิชย์สำหรับ PS3
Dan Olson

ประการที่สองหากคุณสร้างเกมของคุณใน c # เทียบกับ mono หรือ monogame (การแทนที่ xna) คุณสามารถพอร์ตไปยัง ps3 / ps4, wii, xbox 360, android, max os และอื่น ๆ ที่สร้างขึ้น
Ryan Mann

0

ในช่วงเวลาที่คอมพิวเตอร์มีพลังงานน้อยทุกอย่างที่จำเป็นต้องตั้งโปรแกรมใน C หรือ C ++ เพียงเพราะภาษาที่รวบรวมขยะใช้การควบคุมหน่วยความจำออกไปจากโปรแกรมเมอร์ดังนั้นประสิทธิภาพอาจลดลง

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

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

  • ขณะนี้มีฟังก์ชั่นอื่น ๆ เช่นสถานะเกม AI เสียงอินพุตเครือข่ายซึ่งยังคงมีความสำคัญในเกม แต่แทบจะไม่ใช้ทรัพยากรคอมพิวเตอร์มากนัก ฟังก์ชั่นเหล่านั้นส่วนใหญ่แล้วยังไม่ได้รับการปรับให้เหมาะสม นั่นคือเป้าหมายของภาษาสคริปต์และภาษาที่รวบรวมขยะ: คุณไม่ต้องคิดถึงการเชื่อมโยงหน่วยความจำและการจัดระเบียบแอปพลิเคชันของคุณเพราะรหัสที่คุณจะเขียนด้วยภาษาเหล่านี้หากคุณไม่ได้เข้ารหัสสิ่งที่ต่ำ คอขวด

ตัวอย่างที่มี 2 กรณี

  • จัดส่งเฟอร์นิเจอร์ 500 กิโลกรัมพร้อมรถบรรทุก
  • จัดส่งวัตถุ 30 ตันพร้อมเรือ

ทั้งสองอยู่ที่ระยะ 500 กม.

ในทั้งสองกรณีมันจะทำให้กระบวนการขนถ่ายเร็วขึ้นหรือเร็วขึ้นเพื่อทำให้เวลาการขนส่งทั้งหมดเล็กลงรู้ว่าคุณไม่สามารถทำให้เรือหรือรถบรรทุกเคลื่อนที่เร็วขึ้นได้หรือไม่

คำตอบคือ: มันมีความสำคัญกับรถบรรทุก แต่ไม่ได้อยู่กับเรืออีกต่อไปเพราะคุณได้ทำสิ่งต่าง ๆ มากมายแล้วโดยการเคลื่อนย้ายหุ้นกับเรือ

ฉันไม่รู้ว่าคุณเข้าใจคำอุปมานี้หรือไม่ แต่อาจทำให้คุณจินตนาการถึงปัญหาทางคณิตศาสตร์ซึ่งสำคัญกว่าการเข้าใจคำตอบ

ภาษาสคริปต์ช่วยให้การสร้างเกมเร็วขึ้นหากคุณมีโปรแกรมเอ็นจิ้นใน C / C ++ แล้ว: เอ็นจิ้น 3 มิติแก้ปัญหาระดับต่ำตอนนี้คุณต้องสร้างเกมด้วยสคริปต์ของคุณ

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

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

ยกเว้นถ้าคุณวางแผนที่จะพอร์ต ir บน DS แต่ฉันจะหยุดตรงนั้น


1
"การปรับให้เหมาะสมสามารถเป็นสิ่งที่ชั่วร้าย" นั้นเป็นคำที่เขาอ่านมาแล้ว

ฉันอธิบายมันเป็นเหตุผลว่าทำไมฉันถึงไร้ประโยชน์ที่จะพูดคำพูดทั้งหมดของเขาซึ่งเป็นประโยคที่ค่อนข้างยาวและไม่ได้อธิบายจริงๆ ... นอกจากนั้นเรากำลังพูดถึงเกมที่ไม่เหมือนกัน ซอฟต์แวร์ที่กว้างขึ้น Knuth ต้องการพูดเกี่ยวกับ
jokoon

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

0

ดูสิฉันรู้ว่านี่เป็นคำโผงผาง แต่ฉันไม่ได้แยกแค่ขน ฉันรู้สึกว่าโปรแกรมเมอร์ส่วนใหญ่ไม่ได้รวบรวมมันเข้าด้วยกัน ภาษานั้นไม่เกี่ยวข้องกับความเร็ว / ประสิทธิภาพการทำงาน มันเป็นคอมไพเลอร์ / กรอบ คุณสามารถโต้แย้ง gcc กับ cl (microsoft compiler pre 2010) หรือ msbuild (คอมไพเลอร์ c ++ ปัจจุบันสำหรับปี 2010) ทุกครั้งที่คอมไพเลอร์เหล่านี้ดีขึ้นดังนั้นคุณต้องเปรียบเทียบมันกับเวอร์ชั่นก่อน ๆ ฉันประทับใจมากกับ. net และทำงานได้ดี แต่ถึงแม้ว่ามันจะดีกว่าเล็กน้อยฉันก็ไม่เห็นว่ามันเข้ามามีเหตุผลประการหนึ่ง: การพกพา

เกม AAA ต้องการเป็น Windows, Linux, Mac, XBox, PS3, Nintendo และอื่น ๆ


แน่นอนว่าการใช้งานคอมไพเลอร์มีบทบาท แต่ภาษาต่าง ๆ มีความสามารถในการจ่ายเงินที่แตกต่างกันสำหรับการปรับให้เหมาะสมที่คอมไพล์เลอร์และค่าใช้จ่ายที่แตกต่างกันสำหรับโปรแกรมเมอร์เพื่อหลีกเลี่ยงกฎภาษาปกติและพูดคุยกับฮาร์ดแวร์โดยตรง ภาษาและเป้าหมายต่อ seมีมากมายเกี่ยวกับประสิทธิภาพ

ภาษามีหลายสิ่งหลายอย่างที่เกี่ยวข้องกับความเร็ว / ประสิทธิภาพการทำงานเนื่องจากไวยากรณ์และไลบรารีมาตรฐานจะสนับสนุนแนวทางที่แตกต่างกัน ตัวอย่างเช่นภาษาที่ยากต่อการใช้อาร์เรย์ของหน่วยความจำต่อเนื่องเนื่องจากวัตถุทั้งหมดของพวกเขาเป็นตัวชี้จะมีแนวโน้มที่จะฟาดแคชมากกว่าหนึ่งที่คุณสามารถใช้อาร์เรย์หรือเวกเตอร์ได้อย่างมีประสิทธิภาพ
Kylotan

+1 จุดที่ดีมากซึ่งคุณสามารถทำได้โดยไม่ดูถูกคนโง่พวกเขาไม่รู้ว่าพวกเขาเป็นใคร
ไฟอีกา

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