Sau khi hỏi hai câu hỏi về hệ thống thực thể ( 1 , 2 ) và đọc một số bài viết về chúng, tôi nghĩ rằng tôi hiểu chúng hơn nhiều so với trước đây. Tôi vẫn còn một số điểm không chắc chắn, chủ yếu là về việc xây dựng bộ phát hạt, hệ thống đầu vào và máy ảnh. Tôi rõ ràng vẫn còn một số vấn đề trong việc hiểu các hệ thống thực thể và chúng có thể áp dụng cho toàn bộ các đối tượng khác, nhưng tôi đã chọn ba đối tượng này vì chúng là các khái niệm rất khác nhau, nên bao quát một nền tảng khá rộng và giúp tôi hiểu các hệ thống thực thể và cách xử lý các vấn đề như thế này, bản thân tôi, khi họ đi cùng.
Tôi đang xây dựng một công cụ bằng JavaScript và tôi đã triển khai hầu hết các tính năng cốt lõi, bao gồm: xử lý đầu vào, hệ thống hoạt hình linh hoạt, bộ phát hạt, các lớp và chức năng toán học, xử lý cảnh, máy ảnh và kết xuất và toàn bộ những thứ khác mà động cơ thường hỗ trợ. Tôi đọc câu trả lời của Byte56, điều đó khiến tôi hứng thú với việc biến động cơ thành một hệ thống thực thể. Nó vẫn sẽ là một công cụ trò chơi HTML5, với triết lý cảnh cơ bản, nhưng nó sẽ hỗ trợ việc tạo các thực thể động từ các thành phần.
Vấn đề tôi có, bây giờ, là phù hợp với khái niệm động cơ cũ của tôi vào mô hình lập trình mới này. Đây là một số định nghĩa từ các câu hỏi trước, được cập nhật:
Một thực thể là một định danh. Nó không có bất kỳ dữ liệu nào, nó không phải là một đối tượng, đó là một id đơn giản đại diện cho một chỉ mục trong danh sách cảnh của tất cả các thực thể (mà tôi thực sự có kế hoạch thực hiện như một ma trận thành phần).
Một phần là người nắm giữ dữ liệu, nhưng với phương pháp có thể hoạt động trên dữ liệu đó. Ví dụ tốt nhất là một
Vector2D
thành phần hoặc "Vị trí". Nó có dữ liệu:x
vày
, nhưng cũng có một số phương pháp mà làm cho hoạt động trên dữ liệu một chút dễ dàng hơn:add()
,normalize()
, và vân vân.Một hệ thống là cái gì đó có thể hoạt động trên một tập hợp các thực thể đáp ứng các yêu cầu nhất định; thông thường các thực thể cần phải có một bộ các thành phần được chỉ định, sẽ được vận hành theo. Hệ thống là phần "logic", phần "thuật toán", tất cả các chức năng được cung cấp bởi các thành phần hoàn toàn để quản lý dữ liệu dễ dàng hơn.
Máy ảnh
Máy ảnh có thuộc tính Vector2D
vị trí, thuộc tính xoay và một số phương pháp để định tâm xung quanh một điểm. Mỗi khung hình, nó được đưa đến một trình kết xuất, cùng với một cảnh và tất cả các đối tượng được dịch theo vị trí của nó. Cảnh sau đó được kết xuất.
Làm thế nào tôi có thể đại diện cho loại đối tượng này trong một hệ thống thực thể? Máy ảnh sẽ là một thực thể, một thành phần hoặc kết hợp (theo câu trả lời của tôi )?
Phát xạ hạt
Vấn đề tôi gặp phải với bộ phát hạt của mình là, một lần nữa, cái gì sẽ là cái gì. Tôi khá chắc chắn rằng bản thân các hạt không nên là thực thể, vì tôi muốn hỗ trợ hơn 10.000 trong số chúng và tôi tin rằng việc tạo ra nhiều thực thể đó sẽ là một đòn nặng nề đối với hiệu suất của tôi.
Làm thế nào tôi có thể đại diện cho loại đối tượng này trong một hệ thống thực thể?
Quản lý đầu vào
Điều cuối cùng tôi muốn nói là cách xử lý đầu vào. Trong phiên bản hiện tại của động cơ, có một lớp được gọi Input
. Nó là một trình xử lý đăng ký các sự kiện của trình duyệt, chẳng hạn như nhấn phím và thay đổi vị trí chuột và cũng duy trì trạng thái bên trong. Sau đó, lớp trình phát có một react()
phương thức, chấp nhận một đối tượng đầu vào làm đối số. Ưu điểm của việc này là đối tượng đầu vào có thể được tuần tự hóa thành .JSON, sau đó được chia sẻ qua mạng, cho phép mô phỏng nhiều người chơi mượt mà.
Làm thế nào điều này dịch vào một hệ thống thực thể?