วิธีการรหัส UI / HUD ในระบบองค์กร?


18

ฉันคิดว่าฉันมีความคิดเกี่ยวกับระบบ Entity ที่ได้แรงบันดาลใจจาก Adam Martin (เครื่องจักร) ฉันต้องการเริ่มใช้สิ่งนี้สำหรับโครงการต่อไปของฉัน

ฉันรู้พื้นฐานของเอนทิตีส่วนประกอบและระบบแล้ว ปัญหาของฉันคือวิธีจัดการ UI / HUD ตัวอย่างเช่นหน้าต่างภารกิจหน้าต่างทักษะหน้าต่างข้อมูลตัวละคร ฯลฯ คุณจัดการกับกิจกรรม UI ได้อย่างไร (เช่นการกดปุ่ม) สิ่งเหล่านี้เป็นสิ่งที่ไม่จำเป็นต้องประมวลผลทุกเฟรม ขณะนี้ฉันกำลังใช้ MVC เป็น code UI แต่ฉันไม่คิดว่าจะเข้ากันได้กับ Entity System

ฉันได้อ่านแล้วว่าเอนทิตีระบบฝังอยู่บน OOP ที่ใหญ่กว่า ฉันไม่รู้ว่า UI อยู่นอก ES หรือไม่ ฉันจะเข้าใกล้คนนี้ได้อย่างไร

คำตอบ:


17

บางทีคุณอาจคิดมากในระบบเอนทิตี หน่วยงานมีวัตถุประสงค์เพื่อขอบเขตวัตถุในเกมเช่นตัวละคร, ศัตรู, สคริปต์, กระสุน, ทริกเกอร์ ฯลฯ

บางทีถ้าคุณแยก UI ของคุณมันจะดีขึ้นและง่ายขึ้น คุณไม่จำเป็นต้องทำทุกอย่างภายในขอบเขตเอนทิตี


นี่คือสิ่งที่ Adam Martin กล่าวในโพสต์หรือความคิดเห็นของเขาในเครื่อง ES เป็นวิธีการแก้ปัญหาเฉพาะ สามารถและควรใช้ร่วมกับโซลูชัน 'ดั้งเดิม' สำหรับด้านอื่น ๆ ของเกม (เอ็นจิ้น)
user8363

ขอขอบคุณ. ฉันแค่ไม่แน่ใจว่าสิ่งที่ควรจะเป็นใน ES ดังนั้นคุณจะรหัส UI ที่มีประสิทธิภาพได้อย่างไร ฉันคิดว่า MVC ไม่ตัดเพราะฉันมีปัญหากับลำดับชั้น
Sylpheed

ฉันเห็นว่าคุณตกลงที่จะใช้สถาปัตยกรรมที่แตกต่างกันสำหรับ UI แล้ว MVC มีปัญหาอะไร?
Narek

@Armen MVC ไม่มีปัญหา แต่วางไว้ในขอบเขตเอนทิตีได้ เป็นเพียงแค่ว่าผลประโยชน์ของมันจะไม่เอาชนะข้อเสียของมัน ไม่จำเป็นต้องเป็นAstronaut Architecture
Gustavo Maciel

3

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

ระบบ Entity นั้นยอดเยี่ยมและสามารถดึงดูดให้ใช้งานได้ทุกที่ หลังจากทั้งหมดเมื่อคุณได้รับค้อนหวานจริง ๆ คุณถูกล่อลวงให้รักษาปัญหาทั้งหมดของคุณเช่นเล็บ อย่างไรก็ตามระบบ EC เป็นเพียงเครื่องมืออื่นในกระเป๋าของคุณ สำหรับปัญหาที่ใช้ในการแก้ปัญหาทำงานได้ดีจริงๆ แต่คุณมีเครื่องมือที่ดีกว่าสำหรับปัญหาเช่น UI

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


1

คุณสามารถสร้างฟังก์ชั่นอินเทอร์เฟซใหม่ที่เรียกว่าเมื่อใดก็ตามที่มีการดึง UI / HUD และอนุญาตให้ใช้คอมโพเนนต์ที่กำหนดเอง / สคริปต์เพื่อใช้ฟังก์ชันนั้น ต้องใช้ระบบ IMGUI (มีบทช่วยสอนมากมายใน Google นี่เป็นเพียงการนำเสนอดั้งเดิม) ที่จะใช้ ด้วยสิ่งนี้คุณสามารถสร้าง windows เป็นเอนทิตี้ภายในซึ่งคุณจะมีองค์ประกอบการสร้าง UI ของคุณเองและองค์ประกอบเฟรมเรนเดอร์หน้าต่าง

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

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