คุณสามารถแนะนำไลบรารี C ++ GUI อะไรได้บ้าง [ปิด]


26

ฉันกำลังสร้างเอ็นจิ้นเกมของตัวเองใน C ++ และตอนนี้ฉันกำลังตัดสินใจว่าควรจะใช้อินเทอร์เฟซผู้ใช้แบบใด

ฉันควรใช้ห้องสมุดหรือไม่ ฉันควรทำเอง


3
ไม่ชัดเจนว่าคุณหมายถึงอะไร: GUI ในเกม? หรือ GUI สำหรับเครื่องมือ? แต่ละคนเป็นความต้องการที่แตกต่างกันมาก ..
jacmoe

1
ใครต้องการเครื่องมือเมื่อคุณมี ENGINE (ดนตรีที่ยิ่งใหญ่)
Ricket

1
หากคุณต้องการไดอะล็อก modal ไดอะล็อกไฟล์เล็ก ๆ บน sourceforge คือไฟล์ข้ามแพลตฟอร์ม C C ++ ไฟล์เดียวเพื่อเพิ่มในโครงการของคุณ ไม่มี init, ไม่มีลูปหลัก
tinyfiledialogs

คำตอบ:


11

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

หากคุณสนใจอย่าพลาดลิงค์เหล่านี้: วิดเจ็ตเข้าสู่มิติที่สาม: WolfenQtและเร่งความเร็ววิดเจ็ตของคุณด้วย OpenGL


9

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

สำหรับเอ็นจิ้นเกมฉันจะไปหา 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/


4
IM GUI เป็นแนวคิดที่น่าสนใจ แต่ฉันพบว่ามีปัญหาบางอย่างที่ปรากฏขึ้นเมื่อคุณพยายามทำสิ่งที่เป็นเกม หากคุณต้องการให้องค์ประกอบเมนูเคลื่อนไหวเข้า / ออกคุณต้องทำอะไรบางอย่างเช่นปรับเปลี่ยนตำแหน่งของวิดเจ็ตทั้งหมดหรือทำบางอย่างเช่นปรับเปลี่ยนเมทริกซ์การแปลง GUI สำหรับการโทรนั้น มันจะง่ายขึ้นถ้าคุณมีตัวอย่างเช่นคอนเทนเนอร์ของหน้าต่างที่มีการแปลการกระทำของลูก ๆ และสิ่งนั้น นอกจากนี้ด้วยเหตุผลบางประการการใช้งาน IMGUI ส่วนใหญ่ไม่มีสถานะวิดเจ็ต "ปิดใช้งาน"
Tetrad

@Tetrad: มันง่ายมากที่จะใช้กลุ่มวิดเจ็ตที่มีเลย์เอาต์อัตโนมัติ, ตำแหน่งสัมพัทธ์หรือตำแหน่งสัมบูรณ์ (วิดเจ็ตของ Nvidia ทำเช่นนี้) ช่วยให้คุณมีวิดเจ็ตภายในหน้าต่างหรือพาเนลได้อย่างง่ายดาย สำหรับสถานะ "ปิดการใช้งาน" ฉันไม่สามารถเห็นได้ว่าทำไมสิ่งนี้จึงไม่ถูกนำไปปฏิบัติเล็กน้อย สำหรับ "สิ่งที่เป็นเกม" ฉันคิดว่าแนวคิดโหมดทันทีเหมาะสมกว่าโหมดที่คงอยู่เนื่องจากวิดเจ็ตได้รับการอัปเดตทุกเฟรม
Oskar N.

7

ส่วนตัวผมจะแนะนำCEGUI เป็นโอเพ่นซอร์สและค่อนข้างดี อย่างไรก็ตามสิ่งที่คุณต้องจำไว้ก็คือมันเป็นเรื่องที่ละเอียดมากถ้าคุณเขียนทุกอย่างด้วยมือ

แต่ในด้านบวกมันมี renderers สำหรับทั้ง OpenGL และ DirectX ฉันจัดการเพื่อวางบนเทมเพลตที่ฉันใช้ตามปกติซึ่งเขียนลงบนพื้นผิวโดยตรงโดยใช้ VBO (มันเป็นแฮ็ค)

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


นี่คือสิ่งที่ฉันกำลังใช้อยู่ ฉันพบว่ามันพึ่งพามากเกินไป และฉันมีปัญหาในการเชื่อมโยงไปยังโครงการของฉัน (IIRC ใบอนุญาตบอกว่าฉันสามารถเชื่อมโยงไปยังห้องสมุดเท่านั้น)
MrValdez

6
มันมีจำนวนการพึ่งพาที่ไร้สาระ มันทำให้เกมตัวอย่างเล็ก ๆ ของฉันพองตัวถึง 50 MB!
knight666

อะไร? ฉันคิดว่าคุณทำผิด :) น้ำหนักของ CEGUI DLLs ในเกมของฉันน้อยกว่า 3 MB และถึง MrValdez: CEGUI อยู่ภายใต้ใบอนุญาต BSD ..
jacmoe

ใบอนุญาต MIT - ขอโทษ CEGUI อยู่ภายใต้ใบอนุญาต MIT :)
jacmoe

5

ปัญหาเกี่ยวกับไลบรารี GUI ส่วนใหญ่ (Qt น่าจะเป็น C ++ ที่ได้รับความนิยมสูงสุดที่ไม่ใช่ Windows เท่านั้น) คือส่วนใหญ่จะไม่รวมเข้ากับเอ็นจิ้นได้ดี ตามเนื้อผ้าในแอพ GUI ไลบรารี GUI ควบคุมการวนรอบหลักและคุณเพียงเชื่อมโยงการเรียกกลับไปยังเหตุการณ์ โดยทั่วไปแล้วในเกมเอ็นจิ้นคุณต้องการควบคุมการวนซ้ำดังนั้นมันจึงเป็นเรื่องยากที่สุด บางทีคุณกำลังมองหาบางอย่างที่เพิ่งจะจัดการกับการควบคุมการวาดและการโต้ตอบและเช่นในบริบท 3 มิติที่คุณผ่านมันไป? สิ่งเหล่านั้นสามารถหาได้ยากมาก: - /


<pedantic> wxWidgets นั้นข้ามแพลตฟอร์ม </pedantic> แม้ว่าฉันจะให้ความสำคัญกับการรวมระบบของเครื่องยนต์
zebrabox

3
ฉันบอกว่า "เป็นที่นิยมที่สุด" ไม่ใช่ "เท่านั้น" :-P wx ได้รับการสนับสนุนน้อยลงสำหรับการทำงานกับบริบท 3 มิติล่าสุดที่ฉันดู
coderanger

4

ฉันเชื่อมั่นในการเขียนของคุณเอง แต่แล้วฉันอีกครั้งฉันแก่มาก ต่อสู้กับอีกหนึ่ง GUI GUI เพื่อทำสิ่งหนึ่งที่คุณต้องการทำให้ฉันบ้าเพิ่มความจริงที่ว่าเกม GUIs ส่วนใหญ่นั้นค่อนข้างไม่สำคัญดังนั้นคุณไม่ต้องไปออก MDI และการออกแบบ OO ขั้นสุดยอดที่ไหน ปุ่มสามารถมีการเลื่อนดูภาพที่ไฮไลต์เมื่อคุณวางตัวชี้เมาส์ไว้เหนือแถบงานที่ด้านข้างของช่องทำเครื่องหมายด้วยนิ้วหัวแม่มือที่ลากได้ - หรืออะไรทำนองนั้น จังหวะที่แตกต่างกันสำหรับคนที่แตกต่างกันฉันเดา


มีสถานการณ์ที่ "เขียนของคุณเอง" ไม่ได้นอกสถานที่อย่างที่ใคร ๆ ก็คิดว่า เกมที่ UI มีความสำคัญเช่นเกมการจัดการหรือเกม RPG ที่มีการจัดการไอเท็มที่ซับซ้อน UI จะเป็นส่วนสำคัญของประสบการณ์ joelonsoftware.com/articles/fog0000000007.html ถ้ามันเป็นฟังก์ชั่นธุรกิจหลัก - ทำมันเองไม่ว่าจะเป็นอะไร
v.oddou

3

ทางเลือกหนึ่งที่อาจคุ้มค่าในการตรวจสอบคือการใช้ WebKit เพื่อสร้างส่วนต่อประสานผู้ใช้ของคุณและใช้ UI ของคุณทั้งหมดด้วย CSS / HTML / Javascript

นี่คือการใช้งานโอเพ่นซอร์ส (Berkelium)และนี่คือโอเพ่นซอร์ส, การดำเนินการเชิงพาณิชย์ (Awesomium)


5
WebKit และเครือญาตินั้นมุ่งไปที่อัตราการรีเฟรชมากกว่าหนึ่งครั้งหรือสองครั้งต่อวินาทีอาจเป็นเรื่องยากที่จะทำ HUD สำหรับเกมแอ็คชั่น จะดีสำหรับเมนูหรือบิตช้าลง
coderanger

1
@coderanger: คุณสามารถเขียนเกมทั้งหมดใน JavaScript / HTML5 ฉันเผยแพร่เกมแอคชั่นเชิงพาณิชย์สำหรับ Chrome เว็บสโตร์ที่ทำงานที่ 60 FPS ได้ดีใน WebKit / Chrome
Sean Middleditch

3

ฉันจะแนะนำ IUP - ส่วนต่อประสานผู้ใช้แบบพกพา: http://www.tecgraf.puc-rio.br/iup/

ฉันใช้มันกับภาษาการเขียนโปรแกรม Lua เท่านั้น แต่มันใช้งานง่ายมาก มันมาใน C, LED และรสชาติ Lua แต่คุณสามารถทำเสื้อคลุมมันได้อย่างง่ายดาย


ดูน่าสนใจ ฉันจะตรวจสอบมันโดยเร็วที่สุด
MrValdez

3

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

ฉันไม่ได้ใช้มัน แต่ libRocket เพิ่งจะเสียค่าใช้จ่ายโดยสิ้นเชิงลบค่าธรรมเนียมใบอนุญาตทั้งหมดและสิ่งที่ไม่ ส่วนที่น่าสนใจเกี่ยวกับ lib นี้คือคุณเขียนมันในรูปแบบ html / css http://librocket.com


2

เพียงแค่เพิ่มข้อเสนอแนะที่น่าสนใจหากพัฒนาเกมสำหรับ Windows ให้ใช้ Win32 API เพียงใช้ตัวควบคุม windows ปกติ (ฉันอยากจะแนะนำให้ใช้ไลบรารี ATL / WTL) แต่ให้เจ้าของเป็นผู้ดึงออกมา

ฉันเห็นเทคนิคนี้ถูกใช้ในเกม Unreal Tournament ครั้งแรกในขณะที่มองผ่านส่วนหัวที่เผยแพร่สู่สาธารณะ (สำหรับผู้สร้าง mod)

หนึ่งในข้อดีหลักของการทำเช่นนี้คือการมีโครงสร้างพื้นฐาน Windows UI ทั้งหมดที่คุณต้องการรวมถึงการรักษาความพึงพอใจของผู้ใช้สำหรับอัตราการทำซ้ำของแป้นพิมพ์ความไวของเมาส์ความเร็วดับเบิลคลิกและอื่น ๆ นอกจากนี้หากคุณปฏิบัติตามกฎอินเตอร์เฟซจะรวดเร็วและปราศจากการสั่นไหว

ข้อเสียคือคุณยังคงต้องเขียนโค้ดบางอย่างเพื่อซับคลาสตัวควบคุม windows เพื่อให้เจ้าของวาดเพื่อให้คุณสามารถใช้กราฟิกและเอฟเฟกต์ของคุณเอง

เพียงแค่โยนความคิดนี้ออกไป


1
ฉันเชื่อว่า win32 / COM นั้นถูกเลียนแบบบน Vista และ Win 7 ไม่แนะนำสำหรับประสิทธิภาพสูง ...
Stephen Furlani

ฉันเดาว่ามันขึ้นอยู่กับจำนวน GUI ที่คุณจะใช้ในเกม หากเป็นเพียงสำหรับระบบเมนูแล้วใครที่สนใจจริงๆถ้าคุณใช้มันอย่างกว้างขวางในส่วนสำคัญของอัตราเฟรมก็ต้องใช้งานและคิด
Daemin

@StephenFurlani Win32 / COM ไม่ได้จำลองบน Vista และ Windows 7 เป็นแบบเนทีฟและความเร็วเต็ม นอกจากนี้ ATL / WTL ไม่ได้ใช้ COM แต่ DirectX ทำได้
Daemin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.