ฉันกำลังสร้างเอ็นจิ้นเกมของตัวเองใน C ++ และตอนนี้ฉันกำลังตัดสินใจว่าควรจะใช้อินเทอร์เฟซผู้ใช้แบบใด
ฉันควรใช้ห้องสมุดหรือไม่ ฉันควรทำเอง
ฉันกำลังสร้างเอ็นจิ้นเกมของตัวเองใน C ++ และตอนนี้ฉันกำลังตัดสินใจว่าควรจะใช้อินเทอร์เฟซผู้ใช้แบบใด
ฉันควรใช้ห้องสมุดหรือไม่ ฉันควรทำเอง
คำตอบ:
อันที่จริงแล้ววิดเจ็ต Qt สามารถรวมเข้ากับ OpenGL และ OpenGL สามารถรวมเข้ากับ Qt (QGLWidget) ได้อย่างง่ายดาย แน่นอนว่าวิดเจ็ตการค้นหาเนทีฟแพลตฟอร์มอาจไม่ตรงกับที่คุณต้องการ แต่ไม่ต้องกังวลมีวิธีในการปรับแต่งสร้างของคุณเองหรือใช้อย่างอื่นที่เหมาะสมกับความต้องการของคุณเช่น Qt Quick (ซึ่ง คุณควรจะสามารถบูรณาการได้เช่นกัน)
หากคุณสนใจอย่าพลาดลิงค์เหล่านี้: วิดเจ็ตเข้าสู่มิติที่สาม: WolfenQtและเร่งความเร็ววิดเจ็ตของคุณด้วย OpenGL
ฉันไม่คิดว่าคุณควรเขียนของคุณเองงานสร้างเอ็นจิ้นเกมมีขนาดใหญ่มากหากคุณมีห้องสมุดมากมายที่มีไลเซนส์ที่ดีที่คุณสามารถใช้ได้และปรับเปลี่ยนตามความชอบของคุณ
สำหรับเอ็นจิ้นเกมฉันจะไปหา GUI โหมดทันที ข้อมูลเพิ่มเติมที่นี่: http://www.mollyrocket.com/forums/viewtopic.php?t=134
แนวคิดหลักคือการวาดองค์ประกอบและควบคุมการโต้ตอบในเวลาเดียวกัน:
if (button(id, position, size))
{
button_was_pressed();
}
สำหรับหนึ่ง Unity ใช้แนวคิดที่คล้ายกัน
คุณสามารถค้นหาการใช้งานโดย NVIDIA ที่ใช้ในการสาธิต: http://code.google.com/p/nvidia-widgets/
ส่วนตัวผมจะแนะนำCEGUI เป็นโอเพ่นซอร์สและค่อนข้างดี อย่างไรก็ตามสิ่งที่คุณต้องจำไว้ก็คือมันเป็นเรื่องที่ละเอียดมากถ้าคุณเขียนทุกอย่างด้วยมือ
แต่ในด้านบวกมันมี renderers สำหรับทั้ง OpenGL และ DirectX ฉันจัดการเพื่อวางบนเทมเพลตที่ฉันใช้ตามปกติซึ่งเขียนลงบนพื้นผิวโดยตรงโดยใช้ VBO (มันเป็นแฮ็ค)
เกมดังกล่าวมีไว้สำหรับการมอบหมายเครือข่าย ที่ได้รับมอบหมายคือจะมีเกมเครือข่ายกับล็อบบี้ ฉันรู้ว่าล็อบบี้จะต้องเจ็บปวดที่คอดังนั้นฉันจึงเลือกห้องสมุดที่ทำเพื่อฉันมากที่สุด
ปัญหาเกี่ยวกับไลบรารี GUI ส่วนใหญ่ (Qt น่าจะเป็น C ++ ที่ได้รับความนิยมสูงสุดที่ไม่ใช่ Windows เท่านั้น) คือส่วนใหญ่จะไม่รวมเข้ากับเอ็นจิ้นได้ดี ตามเนื้อผ้าในแอพ GUI ไลบรารี GUI ควบคุมการวนรอบหลักและคุณเพียงเชื่อมโยงการเรียกกลับไปยังเหตุการณ์ โดยทั่วไปแล้วในเกมเอ็นจิ้นคุณต้องการควบคุมการวนซ้ำดังนั้นมันจึงเป็นเรื่องยากที่สุด บางทีคุณกำลังมองหาบางอย่างที่เพิ่งจะจัดการกับการควบคุมการวาดและการโต้ตอบและเช่นในบริบท 3 มิติที่คุณผ่านมันไป? สิ่งเหล่านั้นสามารถหาได้ยากมาก: - /
ฉันเชื่อมั่นในการเขียนของคุณเอง แต่แล้วฉันอีกครั้งฉันแก่มาก ต่อสู้กับอีกหนึ่ง GUI GUI เพื่อทำสิ่งหนึ่งที่คุณต้องการทำให้ฉันบ้าเพิ่มความจริงที่ว่าเกม GUIs ส่วนใหญ่นั้นค่อนข้างไม่สำคัญดังนั้นคุณไม่ต้องไปออก MDI และการออกแบบ OO ขั้นสุดยอดที่ไหน ปุ่มสามารถมีการเลื่อนดูภาพที่ไฮไลต์เมื่อคุณวางตัวชี้เมาส์ไว้เหนือแถบงานที่ด้านข้างของช่องทำเครื่องหมายด้วยนิ้วหัวแม่มือที่ลากได้ - หรืออะไรทำนองนั้น จังหวะที่แตกต่างกันสำหรับคนที่แตกต่างกันฉันเดา
ทางเลือกหนึ่งที่อาจคุ้มค่าในการตรวจสอบคือการใช้ WebKit เพื่อสร้างส่วนต่อประสานผู้ใช้ของคุณและใช้ UI ของคุณทั้งหมดด้วย CSS / HTML / Javascript
นี่คือการใช้งานโอเพ่นซอร์ส (Berkelium)และนี่คือโอเพ่นซอร์ส, การดำเนินการเชิงพาณิชย์ (Awesomium)
ฉันจะแนะนำ IUP - ส่วนต่อประสานผู้ใช้แบบพกพา: http://www.tecgraf.puc-rio.br/iup/
ฉันใช้มันกับภาษาการเขียนโปรแกรม Lua เท่านั้น แต่มันใช้งานง่ายมาก มันมาใน C, LED และรสชาติ Lua แต่คุณสามารถทำเสื้อคลุมมันได้อย่างง่ายดาย
ฉันเป็นการส่วนตัวที่ใช้ CEGUI ในโครงการเกมของฉันและมันเป็นโซลูชันที่มีประสิทธิภาพ ปัญหาคือบางครั้งมันเกือบจะรู้สึกเหมือนเป็นการเปลี่ยนแปลงไฟล์เล็ก ๆ น้อย ๆ ของคุณ
ฉันไม่ได้ใช้มัน แต่ libRocket เพิ่งจะเสียค่าใช้จ่ายโดยสิ้นเชิงลบค่าธรรมเนียมใบอนุญาตทั้งหมดและสิ่งที่ไม่ ส่วนที่น่าสนใจเกี่ยวกับ lib นี้คือคุณเขียนมันในรูปแบบ html / css http://librocket.com
เพียงแค่เพิ่มข้อเสนอแนะที่น่าสนใจหากพัฒนาเกมสำหรับ Windows ให้ใช้ Win32 API เพียงใช้ตัวควบคุม windows ปกติ (ฉันอยากจะแนะนำให้ใช้ไลบรารี ATL / WTL) แต่ให้เจ้าของเป็นผู้ดึงออกมา
ฉันเห็นเทคนิคนี้ถูกใช้ในเกม Unreal Tournament ครั้งแรกในขณะที่มองผ่านส่วนหัวที่เผยแพร่สู่สาธารณะ (สำหรับผู้สร้าง mod)
หนึ่งในข้อดีหลักของการทำเช่นนี้คือการมีโครงสร้างพื้นฐาน Windows UI ทั้งหมดที่คุณต้องการรวมถึงการรักษาความพึงพอใจของผู้ใช้สำหรับอัตราการทำซ้ำของแป้นพิมพ์ความไวของเมาส์ความเร็วดับเบิลคลิกและอื่น ๆ นอกจากนี้หากคุณปฏิบัติตามกฎอินเตอร์เฟซจะรวดเร็วและปราศจากการสั่นไหว
ข้อเสียคือคุณยังคงต้องเขียนโค้ดบางอย่างเพื่อซับคลาสตัวควบคุม windows เพื่อให้เจ้าของวาดเพื่อให้คุณสามารถใช้กราฟิกและเอฟเฟกต์ของคุณเอง
เพียงแค่โยนความคิดนี้ออกไป