6

Tôi đến từ một nền MVC (Flex và Rails) và yêu thích các ý tưởng tách mã, reusability, đóng gói, vv Nó làm cho nó dễ dàng để xây dựng mọi thứ một cách nhanh chóng và tái sử dụng các thành phần trong các dự án khác. Tuy nhiên, nó đã rất khó khăn để gắn bó với các nguyên tắc MVC khi cố gắng xây dựng các ứng dụng phức tạp, trạng thái điều khiển, không đồng bộ, hoạt hình.Model-View-Controller có độc đáo với cây thông minh và hành vi nhân tạo không?

Tôi cố gắng để create animated transitions between many nested views in an application, và nó đã cho tôi suy nghĩ về việc có hay không tôi đã lừa dối bản thân mình ... Bạn có thể áp dụng nguyên tắc từ MVC với các nguyên tắc từ Artificial Intelligence (Behavior-Trees, Nhà nước Máy phân cấp, lồng Kỳ), như trò chơi? Hai môn đó có chơi độc đáo với nhau không?

Rất dễ để giữ cho chế độ xem/đồ họa không biết gì về bất kỳ thứ gì bên ngoài khi mọi thứ tĩnh, như với hệ thống HTML CMS hoặc bất kỳ thứ gì. Nhưng khi bạn bắt đầu thêm quá trình chuyển đổi trạng thái phức tạp, có vẻ như mọi thứ cần biết về mọi thứ khác, và MVC gần như cản trở. Bạn nghĩ sao?

Cập nhật:

Ví dụ. Vâng ngay bây giờ tôi đang làm việc trên một trang web trong Flex. Tôi đã đi đến kết luận rằng để animate đúng mọi yếu tố lồng nhau trong ứng dụng, tôi phải nghĩ về chúng như là AI Agents. Mỗi "View", sau đó, có cây hành vi riêng của nó. Tức là, nó thực hiện hành động (hiển thị và ẩn chính nó) dựa trên ngữ cảnh (dữ liệu được chọn, v.v.). Để làm điều đó, tôi cần một loại điều khiển ViewController, tôi gọi nó là một Presenter. Vì vậy, tôi có một View (đồ họa được trình bày trong MXML), một Presenter (xác định các hoạt ảnh và hành động mà View có thể dựa trên trạng thái và trạng thái lồng nhau của ứng dụng), và một mô hình trình bày để trình bày dữ liệu cho View (thông qua người trình bày). Tôi cũng có các Mô hình cho các đối tượng giá trị và Bộ điều khiển để xử lý các URL và các cuộc gọi cơ sở dữ liệu, v.v ... tất cả các công cụ MVC tĩnh/html bình thường.

Trong một thời gian ở đó tôi đã cố gắng tìm ra cách cấu trúc các "đại lý" sao cho chúng có thể phản ứng với bối cảnh xung quanh của chúng (những gì được chọn, v.v.). Nó có vẻ như tất cả mọi thứ cần thiết để được nhận thức của tất cả mọi thứ khác. Và sau đó tôi đọc về Bảng/Danh sách Đường dẫn/Danh mục dành cho trò chơi và ngay lập tức nghĩ rằng chúng có một bảng được lưu trữ tập trung của tất cả các hành động được tính toán trước mà mọi tác nhân có thể thực hiện. Vì vậy, tôi đã tự hỏi làm thế nào họ thực sự cấu trúc mã của họ.

Tất cả nội dung trò chơi video 3D là một bí mật lớn và rất nhiều thứ từ những gì tôi thấy được thực hiện bằng giao diện người dùng/trình chỉnh sửa đồ họa, như xác định cây hành vi. Vì vậy, tôi tự hỏi nếu họ sử dụng một số loại MVC để cấu trúc cách các tác nhân của họ phản ứng với môi trường và cách họ giữ mã của họ được mô đun hóa và đóng gói.

+0

Bạn có thể đưa ra một ví dụ rất đơn giản không? Câu hỏi được liên kết cũng quá dài. –

+0

Câu hỏi của bạn có vẻ liên quan đến kiến ​​trúc bảng đen. –

+0

ooh, kiến ​​trúc bảng đen trông thú vị! cảm ơn! –

Trả lời

2

"Bạn có thể áp dụng nguyên tắc từ MVC để nguyên tắc từ Artificial Intelligence (Behavior-Trees, phân cấp Nhà nước Máy móc, Nested Kỳ), như Trò chơi?"

Tất nhiên. 99,9% AI là hoàn toàn trong mô hình. Bộ điều khiển gửi đầu vào cho nó, View là cách bạn thể hiện nó trên màn hình cho người dùng.

Bây giờ, nếu bạn muốn bắt đầu điều khiển AI, bạn có thể sẽ lồng ghép các khái niệm và mô hình trò chơi của bạn chứa Mô hình cho thực thể, Bộ điều khiển cho thực thể là lệnh AI gửi tới nó và Chế độ xem cho thực thể đại diện cho nhận thức của thực thể đó mà Bộ điều khiển có thể làm việc. Nhưng đó là một vấn đề riêng biệt cho dù nó có thể 'chơi độc đáo'. MVC là về tách trình bày và đầu vào từ logic và nhà nước và khía cạnh đó không quan tâm những gì logic và trạng thái trông như thế nào.

+0

cảm ơn! bạn có vẻ như bạn biết chuyện gì đang xảy ra với tất cả những điều này, bạn có bất kỳ tài nguyên nào để chỉ tới không? Bất kỳ mã nguồn ??? –

+1

Không, nhà phát triển trò chơi thường không sử dụng MVC, vì vậy bạn sẽ không tìm thấy nhiều điều này trong thực tế. Nhưng tôi chỉ đơn giản là khuyên không nên lấy điều MVC quá xa. Nó được thiết kế một cách rõ ràng để tách bản trình bày khỏi nội dung trong các ứng dụng GUI thay vì là một giao thức chung để viết phần mềm. Ví dụ tôi không thấy rằng bài viết gốc của bạn yêu cầu 'đại lý', cũng không phải bất cứ điều gì phức tạp hơn là chỉ cập nhật mọi thứ và sau đó đọc bản trình bày trực quan mới của họ, như trò chơi thường làm. – Kylotan

0

Hãy ghi nhớ điều này: Những điều cần phản ứng đơn giản là phải nhận thức được những điều mà chúng cần phản ứng. Vì vậy, nếu họ cần biết về mọi thứ, thì họ cần biết về mọi thứ. Nếu không, bạn làm cách nào để họ biết? Trong công cụ trò chơi video 3D, hãy nói những người bắn súng đầu tiên, kẻ thù phản ứng với âm thanh và thị giác (ví dụ như tiếng bước chân/tiếng súng và bạn/xác chết). Lưu ý rằng tôi đã chỉ ra một cơ sở trừu tượng và một phần của cây quyết định. Có thể sẽ sai trong trường hợp cụ thể của bạn để tách toàn bộ điều giữa một số tác nhân và đơn giản hơn là để một đại lý chính có thể ủy nhiệm đơn đặt hàng để tách các quy trình (/ bắt đầu babble): mỗi chế độ xem có thể là một quá trình có thể được yêu cầu chuyển sang chế độ xem bất kỳ (một số) của tác nhân chính, tùy thuộc vào dữ liệu mà tác nhân chính đã nhận được.

Hy vọng điều đó sẽ giúp ..Mang nó tất cả với một hạt muối :)

0

Có vẻ như bạn cần sử dụng thêm mẫu Observer/Event Aggregator. Nếu nhiều thành phần cần phản ứng với các sự kiện ứng dụng tùy ý mà không giới thiệu khớp nối quá mức, thì việc sử dụng trình tổng hợp sự kiện sẽ giúp bạn. Ví dụ: khi một mục được chọn, sự kiện ứng dụng được xuất bản, bộ điều khiển có liên quan cho biết chế độ xem hoạt ảnh của họ, v.v. Các thành phần khác nhau không biết người khác, họ chỉ lắng nghe các sự kiện phổ biến.

Ngoài ra, mã làm cho chế độ xem làm mọi thứ (khởi chạy hoạt ảnh tùy thuộc vào trạng thái mô hình/bộ điều khiển) - đó là một phần của chính Chế độ xem, vì vậy bạn không phải làm cho kiến ​​trúc của bạn trở nên lạ bằng cách có bộ điều khiển và bộ điều khiển xem . Nếu đó là mã giao diện người dùng cụ thể, thì đó là một phần của chế độ xem. Tôi không quen thuộc với Flex, nhưng trong WPF/Silverlight, những thứ như thế sẽ đi vào đoạn mã sau (mặc dù đối với phần lớn Visual State Manager là quá đủ để đối phó với các hình động trạng thái để bạn có thể giữ mọi thứ trong XAML) .

Các vấn đề liên quan