2014-05-05 26 views
6

Tôi đã tìm kiếm và tìm kiếm nhưng dường như không tìm được giải pháp phù hợp với những gì tôi đang cố gắng làm, và tôi gần như ở điểm tôi phải hỏi xem thậm chí có thể.Chuyển đổi giữa Monogame và UIKit

Tôi đang sử dụng Xamarin Studio để phát triển ứng dụng iOS. Tôi có một vài màn hình khác nhau được thiết lập dưới dạng UIViewControllers và chúng hoạt động tốt. Điểm mấu chốt của ứng dụng, tuy nhiên, là một trò chơi và tôi muốn sử dụng Monogame như tôi đã sử dụng nó trước đây và thích làm việc với nó.

Về cơ bản, tôi phải chuyển từ UIViewController sang lớp Trò chơi. Tôi có thể làm điều này bằng cách đơn giản tạo ra một đối tượng Game mới và gọi Run(), nhưng tôi không thể tìm ra cách để thoát khỏi Game khi tôi cần và trả lại quyền kiểm soát cho UIViewController.

Có ai đã thực hiện việc này trong ứng dụng không? Tôi đã thử tất cả mọi thứ tôi có thể nghĩ đến, nhưng dường như không có gì để làm. Thậm chí có thể không? Hoặc tôi sẽ cần phải làm lại nó để Monogame xử lý tất cả mọi thứ, ngay cả tất cả những thứ khác trong ứng dụng không phải là một phần của trò chơi thực tế?

Cảm ơn!

+0

Tôi không biết chính xác những gì bạn đang cố gắng làm nhưng bạn đã cân nhắc tiêm một giao diện vào lớp trò chơi của mình chưa? – craftworkgames

+0

Tôi có một TabController. Một trong những trò chơi là tab "Trò chơi". Khi tab đó được nhấp, có một vài tùy chọn. Một trong số đó là một nút, "Trò chơi mới", mà tôi muốn kích hoạt một đối tượng Game. Khi trò chơi kết thúc, tôi muốn quay lại tab Trò chơi mà người dùng đến và kết thúc đối tượng Trò chơi. – halterdev

Trả lời

4

Có một vài cách hacky tôi cảm thấy điều này sẽ làm việc mà không sửa đổi MonoGame.

1 lựa chọn:

  1. Khi ứng dụng của bạn bắt đầu, bắt đầu lớp Game của bạn như bạn sẽ một trò chơi MonoGame bình thường
  2. Để hiển thị một bộ điều khiển hiện tại nó modally trên đầu trang của trò chơi
  3. Để trở về trò chơi, bỏ qua bộ điều khiển phương thức của bạn

Ví dụ: để hiển thị bộ điều khiển:

var gameController = game.Services.GetService(typeof(UIViewController)) as UIViewController; 
gameController.PresentViewController(new YourController(), true, null); 

Sau đó, bạn chỉ có thể gọi DismissViewController để ẩn. Tôi đã sử dụng điều này để triển khai nội dung của Trung tâm trò chơi.

Đáng buồn thay, bạn sẽ phải sửa đổi cách MonoGame hoạt động nếu bạn muốn hiển thị trò chơi MonoGame sau bộ điều khiển UIKit của bạn.

Tùy chọn khác về cơ bản là thêm UIView vào đầu chế độ xem MonoGame của bạn. Một cái gì đó như thế này:

var gameController = game.Services.GetService(typeof(UIViewController)) as UIViewController; 
var view = new YourView(); 
gameController.View.AddSubview(view); 

Bạn sẽ cần thêm một số logic để tạm dừng trò chơi nếu bạn thực hiện tuyến đường này. Tôi đã sử dụng tùy chọn này trước đây cho iAd, v.v. Bạn cũng có thể thực hiện việc này với các chế độ xem của các trình điều khiển khác, như ví dụ của trình điều khiển tab ở trên.

+0

Xin lỗi vì đã trả lời chậm. Tôi sẽ phải cố gắng theo cách của tôi vì tôi không thể làm cho nó hoạt động bằng cách sử dụng UIKit trước và sau đó rắc những thứ MonoGame vào. Tôi có một câu hỏi, làm thế nào để thực hiện bộ nhớ hiệu ứng này? Nó có bị sa lầy theo cách này không? – halterdev

+0

Sẽ ổn thôi. Chỉ cần chắc chắn để vứt bỏ và removefromsuperview khi không còn sử dụng công cụ UIKit. – jonathanpeppers

+0

Câu trả lời này có phù hợp với bạn không? Bạn có thể dành thời gian để đánh dấu là câu trả lời hoặc thêm nhận xét mới. Cảm ơn. – jonathanpeppers

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