2015-10-09 16 views
7

üzerinde WebGL çöküyor UIWebView ve HTML 5 oyunları (başka bir geliştirici üzerinde çalışıyor) çalışan bir sorun yaşıyorum. İki farklı seçeneği denedik ve en uygun olanı değil.UIWebView HTML 5 oyunu iOS 9 tuval çizim yavaşlığı veya iOS 8.0 ve üstü

Seçenek 1: HTML 5 oyununu "tuval çizimi" ile gerçekleştirir. Bunu bu şekilde yaptığında hiçbir şey çökmez, ancak iOS 9'da arka plandaki uygulamaya geri döndüğümüzde, Web Görünümü yedeklenir, ancak oyun normalden çok daha yavaş hareket eder (iOS 7.1 ve üzeri sürümde değil). . Animasyonlardan bahsettiğim çok daha yavaş, oyunu ilk yüklediğimiz zamanki hızda hareket etmiyoruz. Bu konuyla ilgili garip olan şey, kullanıcı farklı bir HTML 5 oyunu açsa bile (birden fazla oyun ekliyoruz) animasyonlar bu oyun için daha yavaştır. UIApplicationWillResignActiveNotification gönderildiğinde Web View Controller'ı reddetmeyi denedim. Oyunu bu şekilde ayarladığımda, yavaşlık sadece uygulama 4 saniyeliğine (çok tuhaf) ise gerçekleşir.

Seçenek 2: Oyunu "WebGL" ile oluşturuyor. Bunu bu şekilde oluşturduğunda, uygulama iOS 8.0 ve üzeri sürümlere eriştiğinde uygulama çöküyor. Kilitlenmeye yönelik araştırmam, iOS'un arka planda OpenGL ES'yi çekememesi. WebGL komutlarının OpenGL ES'nin yapacağı benzer komutları çalıştırdığını ve dolayısıyla da çökme olduğunu varsayıyorum. UIApplicationWillResignActiveNotification'daki Web Görünümü Denetleyicisini reddetmek yine de çökmenin gerçekleşmesine neden olur.

Başkası böyle bir durumla uğraştı mı?

cevap

2

Soruna iyi bir çözüm bulamadım, ancak bir iş buldum.

Uygulamanın Aktif İstenir İletisini Aldığımda, UIWebView'ı UIWebViewController'in alt görünümünden kaldırırım. Etkin Oldu iletisi aldığımda UIWebView'ı UIWebViewController'in alt görünümüne ekliyorum.

Bu çözüm, her iki durumda da çalışır.

+0

Bundan, animasyonu durduran ve yeniden başlatan JavaScript olaylarını tetiklemiş olabilirsiniz, bu nedenle OpenGL ES yöntemi –

+0

kullanıldığında bu gerçekleşmez. Denediğimiz çözümlerden biri oyunu duraklatmaktı (web'deki JavaScript işlevini çağırarak) görünüm). Fonksiyon bir duraklama ekranı getirecektir. Bu çözümü denediğimizde aynı sorunlar yaşanıyordu. –

+0

Evet, bir duraklatma ekranı açarsanız, çizim döngüsünün yalnızca bir duraklatma ekranı çizmesini sağlayabilirsiniz. Söylemeye çalıştığım şey, 'setTimeout();' ile çizim döngüsünüzü oluşturmaktı, daha sonra 'clearTimeout(); 'diyen bir duraklama yöntemi koyabilirsiniz ve özgeçmişiniz sadece kullandığı çizim yöntemini çağırır. setTimeout' test etmeden ancak benim deneyimime dayanan tüm teori. :) Bunu kullanmak için söylemiyorum ama deltaTime ve timeout tabanlı yönetim kullanarak 2B'de Draw çağrısı uygulamasına sahibim http://650h.rs/1R1f1uv –