2012-07-14 32 views
7

Tôi đang tạo một trò chơi 2D trong java bằng cách sử dụng mẫu MVC và sau khi đọc và tìm kiếm ass của tôi, tôi vẫn chưa tìm thấy câu trả lời thỏa đáng cho cách tôi xử lý biểu diễn đồ họa của các đối tượng.Làm thế nào xử lý đồ họa đại diện của các đối tượng trong trò chơi MVC 2D?

Tôi có nên chia mọi đối tượng, ví dụ Trình phát thành PlayerModel (được lưu trữ trong Mô hình) và PlayerView (được lưu trong Chế độ xem) không?

Điều đó có vẻ hơi lộn xộn bởi vì sau đó tôi sẽ phải theo dõi đối tượng đại diện hình ảnh nào, tức là "ScaryMonsterEnemyView" được kết nối với đối tượng logic-đại diện, "ScaryMonsterEnemyModel". Đây có phải là cách tôi phải làm theo MVC không? Nếu vậy, kết nối này sẽ được lưu ở đâu? Theo quan điểm?

Tôi biết điều này có thể là một vấn đề ngớ ngẩn khi gặp khó khăn, nhưng tôi muốn nhận được càng nhiều càng tốt ngay từ đầu. Cảm ơn bạn đã giúp đỡ :)

+1

Có thể bạn sẽ tìm thấy [bài viết này] (http://www.gamasutra.com/view/feature/130693/the_guerrilla_guide_to_game_code.php) hữu ích .. nếu bạn chưa đọc nó. –

+0

@ tereško Vì vậy, về cơ bản ScaryMonsterEnemyView sẽ giữ ScaryMonsterEnemyModel? Điều đó có thể có ý nghĩa tôi đoán .. – tobes

+0

trong MVC xem không giữ mô hình. Chế độ xem chỉ nhận dữ liệu từ lớp mô hình. Nó được gửi từ lớp mô hình (MVC cổ điển) hoặc yêu cầu xem (Model2 MVC). –

Trả lời

4

Nếu tôi không nhầm, về cơ bản bạn đang hỏi cách chia nhỏ trò chơi thành mô hình Model-View-Controller.

Đơn giản chỉ cần đặt, Mô hình là trạng thái của trò chơi của bạn. Trong các thuật ngữ O-O, bạn có thể nghĩ về Mô hình như tất cả các đối tượng trong trò chơi của bạn.

Bộ điều khiển là tập hợp các quy tắc được áp dụng cho trạng thái trò chơi của bạn (trong trường hợp này là tất cả các đối tượng trò chơi của bạn) trong mỗi chu kỳ cập nhật. Điều này có thể được thực hiện như một phương thức được gọi là update() trong tất cả các đối tượng của bạn, hoặc nó có thể là một hàm được gọi trong vòng lặp trò chơi của bạn có hệ thống đi qua tất cả các đối tượng cần được cập nhật và cập nhật chúng. Bạn cũng có thể nghĩ về Controller như bản thân vòng lặp game. Nó gọi tất cả mọi thứ để cập nhật, và sau đó vẽ nó trên màn hình và lặp lại, trừ khi một số điều kiện được đáp ứng, sau đó nó nói với chương trình để làm điều gì đó khác. Bằng cách này, bạn hầu như có hai cấu trúc MVC lồng nhau. Một trong những kiểm soát dòng chảy của chương trình thông qua các menu và như vậy, và một dành riêng cho các trò chơi riêng của mình.

Chế độ xem chỉ là biểu diễn đồ họa của trò chơi của bạn. Điều này có thể đơn giản như văn bản trên màn hình, nhưng trong trường hợp của bạn nó là đồ họa 2D. Để thực hiện điều này, bạn có thể có từng đối tượng cũng chứa trạng thái đồ họa của chúng, trực tiếp hoặc bằng cách đóng gói. Chế độ xem sẽ làm ít hơn truy vấn tất cả các đối tượng cho trạng thái đồ họa của chúng và sau đó shunt nó vào màn hình. Một lần nữa, điều này có thể được thực hiện trên cơ sở mỗi đối tượng, chẳng hạn như một phương thức gọi là draw() hoặc một hàm hệ thống khác được gọi trực tiếp từ vòng lặp trò chơi. Một thực tế phổ biến là tạo ra một đối tượng được gọi là 'Sptite' hoặc một cái gì đó tương tự như giữ thông tin đồ họa, và có tất cả các đối tượng trò chơi được vẽ có một cá thể cá nhân. Cũng lưu ý rằng View không cần phải là một đối tượng cho chính nó. Hàm duy nhất được gọi trong vòng lặp trò chơi sẽ đủ, mặc dù đôi khi cần lưu trữ thông tin trực tiếp ảnh hưởng đến hoạt động của Chế độ xem (như kích thước cửa sổ), trong trường hợp đó Chế độ xem có thể là đối tượng. Điều tương tự cũng xảy ra với Controller.

Cũng nên nhớ rằng các bộ phận này có thể được chia nhỏ hơn nữa để làm cho cuộc sống đơn giản hơn. Ví dụ: Bộ điều khiển có thể được chia thành xử lý AI, cập nhật chuyển động và kiểm tra va chạm. View có thể được tách thành màn hình hiển thị đối tượng trò chơi và HUD và Model có thể là tất cả các đối tượng + tất cả trạng thái độc lập của đối tượng trò chơi (như cài đặt trò chơi cho độ phân giải, kích thước cửa sổ, cấu hình chính và như vậy).

Tôi biết điều này có thể hơi quá mức và có thể có thêm thông tin, nhưng hy vọng nó sẽ trả lời câu hỏi của bạn và cung cấp cho bạn ý tưởng về nơi bắt đầu.

1

Mô hình và Chế độ xem là hai bộ sưu tập/danh mục/miền của đối tượng.

Bộ điều khiển cung cấp một bộ giao diện để thực hiện một số chức năng trên các đối tượng mô hình. Và nếu được yêu cầu, khung nhìn có thể nói trực tiếp với các đối tượng mô hình về thông tin trạng thái của chúng.

Theo truyền thống, miền Chế độ xem tương ứng với GUI, với các khái niệm như Nút, Biểu mẫu, Windows, v.v. Trong môi trường máy tính để bàn.

Tên miền chế độ xem của bạn (Hoặc một trong số chúng) sẽ tương ứng với môi trường 3D mà bạn sẽ xây dựng. (Cây cối, Nhà cửa, Cá nhân, v.v.). Điều này bao gồm chi tiết va chạm và vật lý của bạn. Cả hai đều yêu cầu hình học liên quan đến môi trường 3D của bạn.

Có thể rất hiếm khi trò chơi cho bất kỳ đối tượng nào trong số này phải hợp tác với một đối tượng trong một tên miền khác. Nhưng một ví dụ, hãy xem xét một điện thoại. Đối tượng sẽ tồn tại trong môi trường 3D của bạn, nhưng cũng sẽ cộng tác với một miền khác mô tả "một nửa cuộc gọi", "kênh", "nút chuyển" vv. Các đối tượng này không thuộc miền Xem của bạn nhưng trong miền Mô hình riêng biệt.

Ví dụ có liên quan hơn có thể là một số loại hệ thống tính điểm, chẳng hạn như số liệu thống kê RPG, sẽ thuộc về Miền mô hình.

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