อยากเรียนเขียนเกม2d

สวัสดีชุมชน stackoverflow! ฉันเรียนรู้พื้นฐานของ C# (ฉันสามารถเขียน Form-Applications ได้บ้าง) และตอนนี้ฉันต้องการเรียนรู้วิธีเขียนเกม 2d ฉันไม่รู้ว่าจะเริ่มตรงไหน มีเอ็นจิ้นที่ดีสำหรับเกม 2d หรือไม่? หลังจากเรียนรู้พื้นฐานของ 2d แล้ว ฉันอยากจะเขียนเกมง่ายๆ ที่ทำงานบน windows และ linux (นั่นคงจะเจ๋งมาก linux :))

ฉันถามเพื่อนที่กำลังสนใจการเขียนโปรแกรม และเขาบอกว่าฉันควรใช้ XNA กับ C# (แต่ใช้ได้เฉพาะบน windows เท่านั้น) หลังจาก googleing ฉันพบว่า OpenGL ที่ใช้ C++ เหมาะที่สุดในการเขียนเกมสำหรับ linux เนื่องจากไม่มี DirectX/XNA และฉันยังไม่ได้ใช้ C++ ซึ่งต้องใช้เวลาในการเรียนรู้อีกครั้ง

มีอะไรที่คุณสามารถแนะนำได้หรือไม่? อาจจะเป็นเครื่องยนต์อื่น? ฉันเพิ่งติดตั้ง XNA และดูเกมสาธิต (Platformer) โค้ดนั้นไม่ได้ยากเลย XNA ดีสำหรับเกม 2d หรือไม่?


person CSharpBeginner    schedule 26.09.2009    source แหล่งที่มา
comment
ลองดูเต๋า mono-project.com/Tao   -  person Dykam    schedule 26.09.2009


คำตอบ (7)


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

ประการที่สอง อย่ากังวลกับ "เครื่องยนต์" มากเกินไป คุณไม่จำเป็นต้องต้องการเอ็นจิ้นในการสร้างเกม และบ่อยครั้งที่มันจะเกิดปัญหามากกว่าที่ควรจะเป็น ความหลงใหลใน "เครื่องยนต์" โดยพื้นฐานแล้วถือเป็นความคิดที่ไม่ดี หากคุณพยายามหาส่วนประกอบซอฟต์แวร์เพียงชิ้นเดียวเพื่อรองรับฟังก์ชันการทำงานทุกส่วนที่คุณต้องการสำหรับเกม มันไม่คุ้มค่าที่จะใช้กับส่วนประกอบ ใดๆ เหล่านั้น..

สิ่งที่คุณต้องการคือ:

  • ภาษาการเขียนโปรแกรมที่คุณคุ้นเคย ดูเหมือนว่านี่คือ C# ดังนั้นให้ยึดถือสิ่งนั้นไว้
  • มีวิธีใส่กราฟิกลงบนหน้าจอบ้าง ไลบรารี .NET สามารถทำเช่นนั้นได้ในระดับหนึ่ง แต่ไลบรารีระดับที่สูงกว่าบางไลบรารีอาจจะทำให้ง่ายขึ้น คุณสามารถใช้ XNA หรือ SlimDX หรือ wrapper Direct3D อื่นได้ หรือคุณสามารถลองใช้ SDL.NET ก็ได้ หรือคุณสามารถเขียนของคุณเอง ความสามารถที่คุณต้องการนั้นค่อนข้างพื้นฐาน และไลบรารีกราฟิก ทุก ทั้งแบบ 2 มิติหรือ 3 มิติก็จะช่วยให้คุณทำได้

คุณไม่ต้องการสิ่งใดที่ "ดีสำหรับเกม 2D" เป็นพิเศษ XNA สามารถใส่กราฟิกบนหน้าจอได้ ดังนั้นจึงทำสิ่งที่คุณต้องการ หากคุณเข้าใจโค้ดที่จำเป็นในการใช้งาน XNA ก็เพียงพอแล้ว อย่าไปพยายามหาเกมที่ "ดีที่สุด" หรือสิ่งที่ "ยอดเยี่ยมสำหรับเกม 2 มิติ" เป็นจุดขาย

person jalf    schedule 26.09.2009
comment
เพิ่ม Tao Framework สำหรับการสร้าง OpenGL และ API ข้ามแพลตฟอร์มเจ๋งๆ อื่นๆ ให้พร้อมใช้งานสำหรับภาษา .NET ซึ่งเกือบจะนำข้ามแพลตฟอร์มมาให้ฟรี ;) - person Cecil Has a Name; 26.09.2009
comment
Tao เป็นคนดี... นี่คือหนึ่งในบทช่วยสอนที่ดีกว่าสำหรับ XNA และ Managed DirectX แบบเก่าสำหรับ C# ฉันพบแล้ว: riemers.net/eng/Tutorials/xnacsharp.php - person Oskar Duveborn; 26.09.2009
comment
ประเด็นของฉันก็คือการข้ามแพลตฟอร์มนั้นไม่สำคัญ Tao ใช้งานง่ายกว่าเฟรมเวิร์กเฉพาะแพลตฟอร์มอื่น ๆ หรือไม่? ถ้าใช่ แสดงว่านั่นคือคือเหตุผลที่เขาควรใช้มัน ถ้าไม่เช่นนั้น เขาไม่ควรใช้มันไม่ว่าจะใช้งานบนแพลตฟอร์มจำนวนเท่าใดก็ตาม - person jalf; 26.09.2009
comment
โดยหลักการแล้วใช่ สมมติว่าคุณอยู่ภายในบิตของ .NET ที่ Mono รองรับ และแน่นอนว่าโค้ดกราฟิกอาจไม่แน่นอนมาก คุณอาจต้องใช้เวลาสักเล็กน้อยในการแก้ไขข้อบกพร่อง เนื่องจากระบบแสดงผลบน Linux แตกต่างจาก Windows อย่างลึกลับ แต่ให้ฉันถามอีกครั้ง ทำไมคุณถึงต้องการเกมนี้ซึ่งเป็นเกมแรกของคุณให้เป็นเกมข้ามแพลตฟอร์ม คุณได้แปลทุกสิ่งที่คุณอ่านในชั้นประถมศึกษาปีที่ 1 เป็นภาษาสเปน รัสเซีย และจีนด้วยหรือไม่ - person jalf; 27.09.2009
comment
ขอบคุณ ฉันคิดว่าฉันจะใช้ XNA เขียนเกมเล็กๆ กรอบสวยๆ ไว้แล้ว :) - person CSharpBeginner; 27.09.2009
comment
เย็น. ฉันได้ยินเรื่องดีๆ เกี่ยวกับเรื่องนี้ และได้รับการสนับสนุนอย่างดี และหลังจากนั้น เมื่อคุณมีเกมแล้ว ให้ทำให้มันรันบนทุกแพลตฟอร์มที่คุณต้องการ แต่ทำให้มันทำงานบนแพลตฟอร์ม หนึ่ง ก่อนที่คุณจะกังวลเกี่ยวกับสองหรือสามแพลตฟอร์ม คุณจะมีมือของคุณเต็มเหมือนเดิม;) - person jalf; 27.09.2009

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

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

อีกแนวทางหนึ่งที่คุณสามารถทำได้คือแทนที่จะเริ่มเกมของคุณเองตั้งแต่ต้น คุณอาจลองสร้างม็อดบางอย่างเช่น Half-Life 2 หรือ Unreal นั่นทำให้คุณมีแพลตฟอร์มพื้นฐานที่คุณสามารถเปลี่ยนแปลงและดูว่ามันทำงานอย่างไร ในระหว่างนี้ คุณจะต้องดูโค้ดของผู้อื่นและเห็นความซับซ้อนของการพัฒนาเกม

นี่คือลิงก์ด่วนที่ฉันดึงมาจากการค้นหาของ Google เกี่ยวกับเกมแฟลช ฉันแน่ใจว่าอาจมีหนังสือสองสามเล่มที่พร้อมจำหน่ายทางออนไลน์ รวมถึงเกี่ยวกับการสร้างเกมด้วยแฟลชและภาษาอื่นๆ

person MunkiPhD    schedule 26.09.2009
comment
มีเครื่องมือที่ดีและฟรีสำหรับสิ่งนี้ (Flash) เช่น Visual Studio Express สำหรับ C# หรือไม่ ฉันอยากรู้จริงๆ เนื่องจาก Adobe Flash CS ดูเหมือนจะแพงไปหน่อย - person Cecil Has a Name; 26.09.2009
comment
มี Flash Develop และ FDT - person ; 19.09.2012

มีคนพูดถึง Flash ซึ่งเป็นคำแนะนำที่ดี แต่ราคาแพงไปหน่อย หากคุณต้องการพัฒนา Flash/AS3 ฟรี ฉันขอแนะนำให้เล่นกับ Flixel คุณจะต้องมี FlashDevelop ซึ่งเป็นสิ่งที่ดี (ฟรีเช่นกัน ) ไอดี ไซต์ Flixel มีแหล่งข้อมูลดีๆ มากมายที่จะช่วยให้คุณเริ่มต้นได้

person Gary the Llama    schedule 02.10.2009
comment
Flixel นั้นยอดเยี่ยม เหมาะสำหรับเกม 2D คุณสามารถใช้ FlashDevelop แต่ยังใช้ FlexBuilder หรือแม้แต่โปรแกรมแก้ไขข้อความที่คุณชื่นชอบเช่น Emacs เพียงใช้เครื่องมือบรรทัดคำสั่ง Flex SDK ฟรี หากคุณใช้โปรแกรมแก้ไขข้อความ + บรรทัดคำสั่ง คุณจะต้องใช้ระบบบิลด์เช่น Make, Ant หรือ Rake - person Sébastien RoccaSerra; 24.11.2009

หากคุณกำลังคิดที่จะก้าวไปสู่อนาคตในการเขียนโปรแกรมกราฟิก ฉันจะเลือก OpenGL ด้วยเหตุผลต่อไปนี้:

  • OpenGL มีการใช้งานบน Windows, Mac, Linux และแม้แต่ PlayStation 3 (อเนกประสงค์มาก)
  • เมื่อคุณพอใจกับการเขียนโปรแกรม 2D แล้ว คุณก็สามารถย้ายไปยัง 3D และคงอยู่กับ OpenGL ได้
  • OpenGL เร็วพอๆ กัน ในแง่ของประสิทธิภาพเมื่อเทียบกับ DirectX
  • C++ เป็นส่วนหนึ่งของหลักสูตรการเขียนโปรแกรมระดับวิทยาลัยทุกหลักสูตร*
  • ฉันคิดว่านายจ้างเคารพความรู้ C++ มากกว่าภาษาอื่นๆ

เส้นโค้งการเรียนรู้อาจสูงกว่า แต่จะใช้เวลาอย่างคุ้มค่า

* หากวิทยาลัยของคุณไม่มี C++ เป็นส่วนหนึ่งของหลักสูตรการเขียนโปรแกรม แสดงว่าคุณเป็นคนนอกเหนือ

person James Jones    schedule 26.09.2009
comment
คุณไม่คิดว่าควรคำนึงถึงว่า 99.99999% ของเกมพีซีทั้งหมดใช้ DirectX ไม่ใช่ OpenGL และแทบจะไม่มีเกมใดบน PS3 เลย เนื่องจากตัวห่อ OGL ของ Sony นั้นแย่มาก และโดยทั่วไปแล้วนักพัฒนาจะทำงานโดยตรงกับ GPU แทน - person jalf; 26.09.2009
comment
ฉันขอโทษ ประเด็นของคุณคือ? ในช่วงทศวรรษที่ผ่านมา (รายการดังกล่าวรวมถึง ดั้งเดิม Unreal จากปี 1998) มีการสร้างเกมจำนวนมหาศาลถึง 73 เกมที่รองรับ OpenGL? (โปรดทราบว่าหลายรายการในรายการนั้นยังรองรับ DirectX ด้วย) คุณแนะนำอย่างจริงจังว่ารายการนี้ถือเป็นเกมส่วนใหญ่ใช่หรือไม่ นักพัฒนาเกมโดยเฉลี่ยของคุณใช้ OpenGL ในการพัฒนาพีซีของตนใช่หรือไม่ OpenGL นั้นคือสิ่งที่คุณควรทำหากคุณต้องการอนาคตในการเขียนโปรแกรมกราฟิก? - person jalf; 27.09.2009
comment
หาก OpenGL แย่มาก ทำไมคุณถึงรวมมันไว้เป็นตัวเลือกในคำตอบของคุณ ไม่สำคัญว่าจะใช้ OpenGL หรือ DirectX - person James Jones; 28.09.2009
comment
เพื่อตอบคำถามสุดท้ายของคุณใช่ รายการซอฟต์แวร์ยังรวมถึงชื่อสมัยใหม่ที่แพร่หลายอย่างแพร่หลาย เช่น Google Earth และ Photoshop CS4 อย่างไรก็ตาม หากคุณอ่านการเปรียบเทียบระหว่าง DirectX กับ OpenGL ของวิกิพีเดีย คุณจะเห็นว่าสิ่งเหล่านี้เทียบเท่ากันในแง่ของความง่ายในการใช้งานและประสิทธิภาพ เมื่อเลือก DirectX คุณจะไม่ได้รับอะไรเลยและเพียงแต่ถูกล็อคอินจากผู้จำหน่ายเท่านั้น - person James Jones; 28.09.2009

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

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

เท่าที่เครื่องยนต์ดำเนินไป: DirectX และ OpenGL ทุกวันนี้ก็เป็นเครื่องยนต์ประเภทหนึ่งเช่นกัน พวกเขาช่วยให้คุณทำงานดั้งเดิมได้มากมายอย่างง่ายดาย (รับโมเดลจาก 3ds Max และโหลดลงในแอปของคุณด้วยโค้ด 1-2 บรรทัด) สำหรับเกมเล็กๆ คุณจะไม่ต้องการสิ่งอื่นใดอีก

ฉันเห็นด้วยกับ MunkiPhD ด้วย: Flash จะเป็นแพลตฟอร์มที่ดีมากสำหรับเกม 2d มันง่ายมากและช่วยให้คุณหลีกหนีจากการเขียนโปรแกรมกราฟิกที่น่าเบื่อได้ อย่างไรก็ตาม การเขียนโปรแกรม ActionScript ไม่ได้อยู่ใกล้การเขียนโปรแกรม "งานหนัก" ด้วยภาษาตระกูล C และการพัฒนาที่เหมาะสม แพลตฟอร์ม ActionScript ทำให้ฉันหงุดหงิดทุกครั้งที่เห็น

person Egor Pavlikhin    schedule 27.09.2009
comment
ฉันไม่ใช่มือใหม่ในการเขียนโปรแกรม ฉันเขียนโปรแกรม php มา 5 ปี และเริ่ม windows/linux prog ครึ่งปีที่แล้ว ฉันเขียน progs บางอย่างใน Delphi (ฉันเกลียดมันเป็นไวยากรณ์) และ C# ดังนั้นการเขียนเกมจึงไม่ใช่ปัญหา ฉันถามที่นี่เพื่อดูว่าเครื่องยนต์/เฟรมเวิร์ก/อะไรก็ตามที่ฉันควรใช้ ฉันรู้ว่า Flash เขียนโค้ดได้ไม่ยาก แต่ฉันต้องการเขียนโค้ดใน C# :) ขอบคุณมาก.. - person CSharpBeginner; 27.09.2009

หากคุณต้องการมุ่งเน้นไปที่เกม 2D และใช้ C# ต่อไปและสามารถให้เพื่อนของคุณเล่นเกมของคุณบน Mac และ PC ได้ คุณเคยคิดที่จะใช้ Silverlight หรือไม่?

การใช้ Silverlight จะช่วยแก้ไขปัญหาบางอย่าง เช่น การติดตั้ง

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

การปฏิเสธความรับผิด: ฉันไม่แน่ใจว่าสถานะของ Silverlight สำหรับ Linux เป็นเช่นไร

person user179700    schedule 27.09.2009

Flixel ใช้งานได้ดีเยี่ยม - คุณสามารถเล่นเกม 2D และรันได้โดยใช้โค้ดเพียงเล็กน้อย คุณสามารถดูบทช่วยสอนโดยละเอียดที่อธิบายขั้นตอนการสร้างเกมแพลตฟอร์มอย่างง่ายโดยใช้ Flixel ที่นี่

ข้อความแสดงแทน

person Phyxx    schedule 07.12.2009