Làm cách nào để mã UI / HUD trong Hệ thống thực thể?


18

Tôi nghĩ rằng tôi đã có ý tưởng về Hệ thống thực thể lấy cảm hứng từ Adam Martin (máy t). Tôi muốn bắt đầu sử dụng điều này cho dự án tiếp theo của tôi.

Tôi đã biết cơ bản của Thực thể, Thành phần và Hệ thống. Vấn đề của tôi là làm thế nào để xử lý UI / HUD. Ví dụ: cửa sổ nhiệm vụ, cửa sổ kỹ năng, cửa sổ thông tin nhân vật, v.v ... Làm thế nào để bạn xử lý các sự kiện UI (ví dụ: nhấn nút)? Đây là những thứ không cần xử lý ở mọi khung hình. Hiện tại, tôi đang sử dụng MVC để viết mã UI nhưng tôi không nghĩ rằng nó sẽ tương thích với Hệ thống thực thể.

Tôi đã đọc rằng Hệ thống thực thể được nhúng trên một OOP lớn hơn. Tôi không biết UI có nằm ngoài ES hay không. Làm thế nào để tôi tiếp cận cái này?

Câu trả lời:


17

Có lẽ bạn đang suy nghĩ quá nhiều trong các hệ thống thực thể. Các thực thể có nghĩa là phạm vi các đối tượng trong trò chơi, như nhân vật, kẻ thù, kịch bản, đạn, kích hoạt, v.v.

Có lẽ nếu bạn làm cho UI của bạn tách ra, nó sẽ tốt hơn và dễ dàng hơn. Bạn không cần phải thực hiện MỌI THỨ trong phạm vi thực thể.


Đây cũng là những gì Adam Martin nói trong một trong những bài đăng hoặc bình luận của anh ấy trên máy t. ES là một giải pháp cho một vấn đề cụ thể. Nó có thể và nên được sử dụng cùng với các giải pháp 'truyền thống' hơn cho các khía cạnh khác của trò chơi (công cụ).
dùng8363

Cảm ơn bạn. Tôi chỉ không chắc chắn những gì nên có trong ES. Vậy làm thế nào để bạn viết mã UI hiệu quả? Tôi nghĩ rằng MVC không cắt nó vì tôi gặp vấn đề với hệ thống phân cấp.
Sylpheed

Tôi thấy bạn đồng ý sử dụng kiến ​​trúc khác nhau cho UI. Vậy thì vấn đề với MVC là gì?
Narek

@Armen MVC không có vấn đề gì, nhưng đặt nó trong phạm vi thực thể thì có. Chỉ là lợi ích của nó sẽ không đánh bại nhược điểm của nó. Không cần phải là một phi hành gia kiến ​​trúc
Gustavo Maciel

3

Mặc dù tôi nghĩ rằng một Entity / UI UI có thể hoạt động, nhưng thật khó để làm cho nó như vậy. Ngoài ra, nó đã bị xóa đủ xa khỏi các thành phần và hệ thống mà bạn có để xử lý các thực thể trò chơi của mình, về cơ bản nó sẽ chỉ là một hệ thống thực thể / thành phần khác trong trò chơi của bạn. Tôi không thể tưởng tượng sẽ có nhiều sự chồng chéo giữa hai người.

Các hệ thống thực thể là tuyệt vời và nó có thể hấp dẫn để sử dụng chúng ở mọi nơi. Rốt cuộc, khi bạn nhận được một cây búa thực sự ngọt ngào, bạn muốn xử lý tất cả các vấn đề của bạn như móng tay. Tuy nhiên, hệ thống EC chỉ là một công cụ khác trong túi lập trình của bạn. Đối với các vấn đề được sử dụng để giải quyết nó hoạt động thực sự tốt, nhưng bạn có các công cụ tốt hơn cho các vấn đề như UI.

Cấu trúc kế thừa hoạt động thực sự tốt cho GUI. Không chỉ để tạo các thành phần UI mà còn đặt chúng ra. Thật tuyệt khi có thể có các thành phần UI là con của các thành phần khác để chúng có thể kế thừa các thuộc tính như vị trí, tỷ lệ và độ mờ. Nếu bạn cố gắng thiết lập hệ thống EC đó, bạn sẽ phải phá vỡ một số quy tắc của hệ thống EC.


1

Bạn có thể tạo một chức năng giao diện mới được gọi bất cứ khi nào UI / HUD được vẽ và cho phép các thành phần tùy chỉnh / kịch bản thực hiện chức năng đó. Điều này đòi hỏi một hệ thống IMGUI (có rất nhiều hướng dẫn về nó trong Google, đây chỉ là bản trình bày gốc) để được sử dụng. Cùng với đó, bạn có thể biến các cửa sổ thành các thực thể bên trong mà bạn sẽ có thành phần xây dựng giao diện người dùng của riêng mình và thành phần kết xuất khung cửa sổ.

Vì không xử lý tất cả các khung này, bạn có thể kết xuất tất cả giao diện người dùng sang một bộ đệm khác mà bạn sẽ chỉ cập nhật trên tất cả các loại sự kiện đầu vào / dữ liệu. Đó là, bất cứ khi nào một sự kiện được nhận, nó sẽ thay đổi một số biến để chỉ ra rằng cửa sổ cần được sơn lại khung tiếp theo. Nếu biến đó là true, thì nó được đặt thành false và giao diện UI được gọi sau đó. Nếu bạn muốn hoạt hình, điều quan trọng là bạn sử dụng thứ tự hoạt động chính xác này để bản thân UI có thể kích hoạt việc sơn lại cho khung tiếp theo.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.