2015-10-09 12 views
7

Tôi gặp sự cố với UIWebView và đang chạy trò chơi HTML 5 (nhà phát triển khác đang làm việc). Chúng tôi đã thử hai tùy chọn khác nhau và không phải là tối ưu.UIWebView HTML 5 trò chơi Giảm tốc độ vẽ Canvas trong iOS 9 hoặc WebGL bị lỗi trong iOS 8.0 trở lên

Tùy chọn 1: Anh ấy hiển thị trò chơi HTML 5 bằng "bản vẽ canvas". Khi anh ta làm theo cách này, không có gì đổ vỡ, tuy nhiên trong iOS 9 khi chúng ta quay trở lại ứng dụng từ nền, Web View sẽ tải lên, nhưng trò chơi di chuyển chậm hơn nhiều so với bình thường (vấn đề không phải trên iOS 7.1 trở lên) . Bởi chậm hơn nhiều tôi đang nói về các hình ảnh động không di chuyển cùng một vận tốc mà họ đã được khi chúng tôi lần đầu tiên tải các trò chơi. Điều kỳ lạ về vấn đề này là ngay cả khi người dùng mở một trò chơi HTML 5 khác (chúng tôi đang thêm nhiều trò chơi), hoạt ảnh cũng chậm hơn cho trò chơi đó. Tôi đã thử loại bỏ Trình điều khiển Chế độ xem Web khi UIApplicationWillResignActiveNotification được đăng. Khi tôi thiết lập trò chơi theo cách này, sự chậm chạp chỉ xảy ra nếu ứng dụng ở trong 4 giây (nó rất lạ).

Tùy chọn 2: Anh ấy hiển thị trò chơi bằng "WebGL". Khi anh ta render nó theo cách này, ứng dụng đổ vỡ khi ứng dụng được backgrounded trên iOS 8.0 trở lên. Nghiên cứu của tôi về vụ tai nạn là iOS không thể vẽ OpenGL ES trong nền. Tôi giả định rằng các lệnh WebGL đang chạy các lệnh tương tự như OpenGL ES sẽ làm, do đó sự cố. Loại bỏ Trình điều khiển Chế độ xem Web trên UIApplicationWillResignActiveNotification vẫn gây ra sự cố xảy ra.

Có ai khác từng đối phó với tình huống như thế này không?

Trả lời

2

Tôi đã không tìm thấy giải pháp tốt cho vấn đề, nhưng tôi đã tìm được một công việc.

Khi tôi nhận được thông báo Ứng dụng sẽ từ chức hoạt động, tôi xóa UIWebView khỏi giao diện người dùng của UIWebViewController. Khi tôi nhận được thông điệp đã hoạt động trở thành, tôi thêm UIWebView vào khung nhìn của UIWebViewController.

Giải pháp này phù hợp cho cả hai trường hợp.

+0

Từ đây bạn có thể đã kích hoạt các sự kiện JavaScript dừng & khởi động lại hoạt ảnh để điều này không xảy ra khi sử dụng phương pháp OpenGL ES –

+0

Một trong những giải pháp mà chúng tôi đã thử là tạm dừng trò chơi (bằng cách gọi một hàm JavaScript trên web lượt xem). Hàm sẽ hiển thị màn hình tạm dừng. Khi chúng tôi thử giải pháp này, các vấn đề tương tự đã xảy ra. –

+0

Vâng, nếu bạn mở màn hình tạm dừng, bạn vẫn có thể vẽ vòng lặp vẽ chỉ vẽ một màn hình tạm dừng. Những gì tôi đã cố gắng để nói là xây dựng vòng lặp vẽ của bạn bằng cách sử dụng 'setTimeout();' thì bạn có thể đặt một phương thức tạm dừng gọi 'clearTimeout();' và sơ yếu lý lịch của bạn chỉ gọi phương thức vẽ của bạn ở cuối sử dụng ' setTimeout' tuy nhiên không kiểm tra, đó là tất cả các lý thuyết dựa trên kinh nghiệm của tôi. :) Tôi không nói để sử dụng này nhưng tôi có một thực hiện của một cuộc gọi Draw trong 2D sử dụng deltaTime và quản lý dựa trên thời gian chờ http://650h.rs/1R1f1uv –

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