XNA ดีต่อการพัฒนาระดับมืออาชีพสำหรับ Xbox 360 หรือไม่?


16

ฉันต้องการเริ่มพัฒนาสำหรับ Xbox 360 ของฉันและฉันเคยได้ยินเกี่ยวกับกรอบ XNA ที่สามารถกำหนดเป้าหมายทั้งพีซีและ Xbox ฟังดูเหมือนตัวเลือกที่น่าดึงดูดเนื่องจากลูกค้าของฉันสามารถใช้เกม / แอพบนคอมพิวเตอร์ปกติได้เช่นกัน

อย่างไรก็ตามฉันใหม่มากกับฉาก Xbox XNA เป็นเพียงเพื่อการพัฒนางานอดิเรกและไม่แนะนำสำหรับการพัฒนาแอพพลิเคชั่นกึ่งมืออาชีพหรือองค์กร? XNA ขาดความสามารถของโซลูชั่นที่พัฒนา C ++ หรือไม่หรือลดประสิทธิภาพของเกม / แอพที่ทำงานบน Xbox หรือไม่?

เป็นไปได้หรือไม่ที่จะกำหนดเป้าหมาย Xbox ด้วย C # และไม่มี XNA ข้อดีคืออะไร?

การเขียนโปรแกรมระดับต่ำจะอยู่ใน C ++ โดยตรงกับ DirectX ข้อดีคืออะไร?

คำตอบ:


15

คำตอบสั้น ๆ : ใช่

XNA เป็นเพียงเครื่องมือ เหมาะสำหรับทุกคน แต่เป็นเกมที่ใช้โปรเซสเซอร์และกราฟิกมากที่สุด หากคุณกำลังพิจารณา XNA สำหรับเกม Xbox 360 นี่คือสิ่งที่คุณจะพลาด:

  • เข้าถึงหน่วย SIMD / Vector สำหรับการทำคณิตศาสตร์จุดลอยตัว CPU ที่รวดเร็วจริงๆ
  • ความสามารถในการใช้รหัสภาษาพื้นเมืองที่อาจจะเร็วกว่า C # เล็กน้อย
  • ความสามารถที่จะเป็นคนขี้เกียจนิดหน่อยกับวิธีการจัดสรรหน่วยความจำ
  • เกม XBLIG มีการเข้าถึงเพียง 4 ใน 6 คอร์ (แต่เรายังคงได้รับซีพียูทั้ง 3 ตัวและพวกเขาก็ไม่ได้เต็มคอร์เช่นกันดังนั้นเราจึงไม่พลาดมากนัก) - ไม่แน่ใจว่าสิ่งนี้ใช้ได้กับ non-XBLIG XNA เกม
  • การเข้าถึง DirectX เต็มรูปแบบสำหรับการใช้เล่ห์เหลี่ยมกราฟิกที่ไม่ชัดเจน

อาจมีมากกว่านี้ - อยู่ด้านบนของหัวของฉัน

(การเก็งกำไร: ถ้าคุณเป็นนักพัฒนามืออาชีพ (เช่นใน: มี devkit ก) ผมคิดว่าคุณสามารถใช้ XNA กับรหัสพื้นเมืองเช่นเดียวกับ P / วิงวอนบน Windows ที่ดีที่สุดของโลกทั้งสองคุณจะต้องขอให้ไมโครซอฟท์.. ดูXDKด้วย)

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

ฉันไม่รู้ว่ามี DirectX ที่จัดการใด ๆ สำหรับ 360 หรือไม่บางทีSlimDXเป็นจุดเริ่มต้นที่ดี


1
"XBLIG" คืออะไร?
Ricket

2
เกม Xbox Live อินดี้
dotminic

มีเพียง 3 คอร์และเราสามารถเข้าถึงได้ทั้งหมด คุณไม่สามารถเข้าถึง 2 เธรด หนึ่งในเธรดเหล่านั้นมีไว้สำหรับ XNA และอีกรายการเป็นเธรดที่ไม่มีใครสามารถเข้าถึงได้เมื่อสร้างเกมเนื่องจากเป็นสำหรับ XBOX OS
Olhovsky

1
นอกจากนี้คุณไม่ต้องขี้เกียจกับการจัดสรรหน่วยความจำ ยกเว้นเกมที่ง่ายมากคุณต้องรวมวัตถุทั้งหมด (ซึ่งเกี่ยวข้องกับรูปแบบการจัดสรร / ฟรี - ไม่ดีกว่า C ++) เพื่อป้องกันการเก็บขยะที่มีราคาแพงบน. NET Compact CLR ซึ่งใช้วิธีการรวบรวมแบบ generational
Olhovsky

12

นอกจากว่าคุณยินดีจ่าย $ 10,000 สำหรับ XBOX หรือ Playstation devkit คอนโซลเดียวที่คุณสามารถพัฒนาคือ XBOX 360 และวิธีเดียวที่คุณสามารถทำได้คือ XNA

สำหรับการพัฒนาระดับมืออาชีพเว้นแต่คุณจะต้องได้รับพลังการประมวลผลของ XBOX 100% (ซึ่งเกมส่วนใหญ่โดยเฉพาะเกม 2D ไม่จำเป็นต้องใช้) ดังนั้น XNA ในความคิดของฉันดีกว่ามากสำหรับการพัฒนา

ข้อผิดพลาดบางอย่างที่ผู้ตอบคนอื่นทำ:

XBOX มีเพียง 3 คอร์ คุณสามารถเข้าถึงได้ทั้งหมดด้วย XNA

แต่ละคอร์มีไฮเปอร์เธรดและสนับสนุนไฮเปอร์เธรด 2 รายการ คุณสามารถเข้าถึงกระทู้ 4/6 เท่านั้น หนึ่งในเธรดเหล่านั้นมีไว้สำหรับ XNA อีกอันคือเธรดที่ผู้พัฒนาเกมไม่สามารถเข้าถึงได้เนื่องจากมันถูกใช้โดย XBOX OS

C # บน XBOX นั้นช้ากว่า C # บน Windows มาก XBOX ใช้. NET compact CLR ซึ่งมีน้ำหนักเบามากและขาดการเลือกใช้เดสก์ทอป CLR จำนวนมาก คุณลักษณะด้านความปลอดภัยของ XBOX ป้องกันไม่ให้โปรแกรมแก้ไขรหัสต้นฉบับของตนเอง สิ่งนี้ทำให้ยากมากที่จะอนุญาตให้เรียกใช้รหัส. NET ซึ่งทำงานได้เร็วกว่ามาก ส่วนหนึ่งของสิ่งที่ทำให้โค้ดที่ได้รับการจัดการแข่งขันกับประสิทธิภาพด้วยโค้ดเนทีฟ C ++ คือ CLR สามารถแก้ไขโค้ดของตัวเองเพื่อเพิ่มประสิทธิภาพการเชื่อมโยงกันของแคช ทีม XNA dev ต้องกระโดดผ่านห่วงใหญ่ที่น่ารักเพียงเพื่อให้ C # ทำงานบน XBOX เลยและมีค่าใช้จ่ายที่เกี่ยวข้องกับห่วงเหล่านี้

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

ที่กล่าวว่าการพัฒนาใน C # / XNA ยังคงเร็วกว่าและง่ายกว่าการพัฒนาใน C ++ หลายเท่าโดยไม่ต้องใช้ DirectX API (ซึ่ง XNA นั้น)

นี่คือสถานะของเกมที่ฉันทำใน XNA หลังจากทำงาน 4 สัปดาห์:

สกรีนช็อตของเกมหลังจาก 4 สัปดาห์ของการพัฒนา

นั่นควรให้ความรู้สึกว่าการพัฒนาอย่างรวดเร็วอย่างไม่น่าเชื่อกับ XNA library / API นั้นเป็นการรวมกันกับ C #

ภาพหน้าจอนั้นแสดงผลโดย XBOX ที่ประมาณ 65FPS

หากคุณเป็นนักพัฒนาเกมมือสมัครเล่นและคุณต้องการสร้างเกมสำหรับคอนโซลไม่เพียง แต่เป็น XNA + XBOX ตัวเลือกที่แท้จริงของคุณเท่านั้นมันยังเป็นตัวเลือกที่น่าทึ่งมากสภาพแวดล้อมการพัฒนาที่สนุกสนานและเกม Xbox Live Arcade หลายเกม ทำด้วย XNA และทำเงินหลายแสนดอลลาร์ ( เช่นบริเวณขอบรก )


1
หนึ่งในคำตอบที่ชัดเจนที่สุดที่ฉันเคยมีเกี่ยวกับ XNA dev ขอขอบคุณ.
keyle

4

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

คุณสามารถปรับใช้กับ Xbox ของคุณผ่าน C # / XNA หรือผ่าน C ++ / DirectX เท่านั้น แต่ตัวเลือกที่สองต้องการสิทธิ์การใช้งาน XBLA และการจ่ายเงินสำหรับ devkit ซึ่งอาจมีราคาแพงมาก (~ 10,000 $)

และจำไว้ว่า Xbox เป็นระบบปิด ลืมการโต้ตอบ TCP / IP โดยตรงคุณสามารถสื่อสารกับคอนโซลอื่น ๆ ที่มีอยู่ใน Xbox Live! เครือข่ายและคุณไม่สามารถทำการเชื่อมต่อ HTTP ดิบ

ดังนั้นหากคุณกำลังคิดถึงเกมให้ลองใช้ XNA และย้ายไปที่ devkit หากคุณต้องการพลังที่ดิบมากขึ้น (และคุณมีเงิน) หากคุณกำลังคิดถึงแอปพลิเคชัน ... เพียงกำหนดเป้าหมายสำหรับแพลตฟอร์มอื่น


ฉันสงสัยว่าแตกต่างกันและ XNA devkit ที่มี ...
Spooks

XNA เป็น C # API ระดับสูง devkit เป็นคอนโซลพิเศษที่คุณสามารถปรับใช้เกมที่เขียนด้วย C ++ และ DirectX ดังนั้นจึงมีการเข้าถึงระดับล่างและประสิทธิภาพโดยรวมที่ดีขึ้น
r2d2rigo

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