SpriteKit có tuân theo mô hình MVC không?


11

Tôi hiện đang làm việc trên một dự án iOS có tên Old Frank mà tôi đã cố gắng tuân theo một mẫu thiết kế MVC.

Ý chính của nó là

GameObjects(model) <- Scene(controller) -> Sprites "SpriteKit" (View)

Bây giờ nếu tôi hiểu chính xác về MVC, bạn không thể sử dụng nhiều tính năng mà SpriteKit cung cấp nếu bạn muốn theo MVC. Ví dụ SKAction, phát hiện va chạm, v.v.

Đây không phải là mô hình nơi đặt các đối tượng trò chơi và cách chúng phản ứng khi chạm vào các đối tượng khác? Không phải là theo mô hình để xác định vị trí theo thời gian sao?

Có bất kỳ phần nào của SpriteKit sẽ được coi là ổn để sử dụng làm "khung nhìn" trong MVC ngoài việc kết xuất không?


Tôi đã cố gắng làm theo một mẫu thiết kế MVC - tại sao?
Paul D. Chờ

2
@ PaulD.Waite Tôi thích ý tưởng giữ mô hình của tôi riêng biệt. Về lý thuyết, điều này giúp việc chuyển hoặc tái tạo trên nền tảng khác dễ dàng hơn. Nó cũng làm cho nó dễ dàng hơn để quản lý sự kiên trì, đó là lý do lớn nhất cho đến nay.
Skyler Lauren

Gotcha. Để đạt được mục tiêu bền bỉ, mẫu memento có thể được áp dụng nhiều hơn MVC. Các họa sĩ của bạn có thể là người khởi tạo và họ có trách nhiệm tạo ra một đại diện có thể lưu lại trạng thái của họ và khôi phục lại bản thân từ đại diện đó sau đó. Bộ điều khiển cảnh của bạn có thể là thứ yêu cầu đại diện từ họ.
Paul D. Chờ

Điều đó cũng có thể dẫn đến việc các trò chơi tiết kiệm của bạn có thể sử dụng được trên nền tảng khác, mặc dù tôi nghi ngờ rằng bạn có thể đi xa về khả năng cổng khi làm việc với khung công tác chỉ dành cho Mac / iOS như SpriteKit.
Paul D. Chờ

1
@ PaulD.Waite cảm ơn bạn đã cho ý kiến ​​của bạn Tôi sẽ xem xét mô hình memento như một mô hình khác để xem xét trong tương lai. Hai câu hỏi là về cùng một dự án có nhưng không liên quan. Ngạc nhiên khi thấy một người khác đã di chuyển sang stackoverflow và sẽ xem xét câu trả lời của anh ta sau đó tối nay =)
Skyler Lauren

Câu trả lời:


6

Câu hỏi của bạn là một câu hỏi hay. Tôi đã có chính xác câu hỏi tương tự về SpriteKit và đã rất bối rối về việc thiếu thông tin trên web về điều này. SpriteKit dường như khuyến khích bạn đặt tất cả mã Model-View-Controller của bạn vào cùng một lớp (lớp con SKScene của bạn), điều này thực sự khó hiểu với tôi. Làm thế nào bạn có thể xây dựng một trò chơi có độ phức tạp bằng cách sử dụng kỹ thuật đó? Kết hợp trạng thái trò chơi (điểm số, chữ số, v.v.), với mã điều khiển như touchesBegan / Đã kết thúc và xem hiển thị tất cả trong cùng một lớp sẽ thực sự khó quản lý ngoài các trò chơi đơn giản nhất.

Tôi đồng ý rằng sử dụng mẫu memento để giúp kiên trì là một ý tưởng tốt, nhưng tôi cũng nghĩ rằng việc chuyển sang thiết kế MVC có thể có lợi. Tôi hiện đang chuyển trò chơi của mình sang kiến ​​trúc MVC. Cách tiếp cận hiện tại của tôi là để mô hình của tôi (đối tượng trò chơi) quản lý các vật lý, lớp con SKScene đóng vai trò là bộ điều khiển và một lớp riêng biệt đóng vai trò là khung nhìn để định cấu hình và hiển thị các khía cạnh trực quan của SKNodes trong cảnh. Tôi chỉ là một phần trong suốt quá trình, vì vậy không thể chắc chắn liệu đây có phải là một thiết kế tốt hay không, nhưng có vẻ như nó sẽ tốt hơn nhiều so với một lớp con SKScene 10.000 dòng.


Cảm ơn bạn đã trả lời / bình luận của bạn. Âm thanh như bạn cảm thấy rằng việc sử dụng các tính năng của SpriteKit cũng không tuân theo thiết kế MVC. Vui lòng gửi email cho tôi skyler@skymistdevelopment.com nếu bạn có câu hỏi về cách "tôi" đang sử dụng MVC hoặc muốn tìm hiểu chi tiết hơn về cách "bạn" đang sử dụng MVC với SpriteKit =)
Skyler Lauren

Không có gì buộc bạn phải đặt hầu hết mã của mình vào lớp SKScene. Trong thực tế, tôi tìm thấy khi sử dụng SpriteKit, hầu hết logic rơi vào các Nút tự nhiên hơn nhiều so với Cảnh, vì các Nút là nguyên nhân của SpriteKit. Cảnh ít hơn "Trình điều khiển" để xử lý cập nhật và nhập liệu cho cây Nút của bạn. Mặc dù mô hình "MVC" vẫn không khớp với SpriteKit, vì các Nút có xu hướng là "M" và "V".
Attackfarm

1

Nói một cách đơn giản, một thiết kế phổ biến trong các trò chơi SpriteKit là cảnh, lớp, nút và nút con.

Bạn có thể biến mỗi phần thành một lớp riêng biệt gói gọn tất cả các phần, thuộc tính và phương thức.

Ví dụ, một lớp Nền có các lớp hình ảnh, các hạt, các thuộc tính khác nhau như tốc độ mỗi lớp sẽ di chuyển và các phương thức công khai để bắt đầu và dừng cuộn nền.

Trong thiết kế này, bạn tập hợp các lớp riêng biệt này thực hiện công việc riêng của chúng vào Cảnh mà chủ yếu xử lý cập nhật đang chạy:, vật lý, sự kiện chạm, v.v.

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.