2012-08-25 12 views
5

Tworzę swoją pierwszą grę z appMobi po stworzeniu niektórych gier dla Androida z wykorzystaniem Java. W zasadzie zamierzam stworzyć nieskończoną grę zręcznościową biegacza, 2D, widok z góry.Problemy z wydajnością w grach na iPhone'a za pomocą HTML i JS, z appMobi

Używam appMobi z prostym JS i CSS3 (bez żadnej innej biblioteki, takiej jak Impact).

Zacząłem od wykonania testów na płótnie i stworzyłem bardzo proste demo, w którym kontrolujesz piłkę (w zasadzie okrąg renderowany za pomocą płótna) z akcelerometrem i musisz zbierać inne kulki. Testowałem to z moim Galaxy S2 i iPhonem 4 i wyglądało na to, że iPhone działał o wiele lepiej, więc zacząłem pisać prosty silnik, by zamiast tego używać elementów dom. Zasadniczo stworzyłem obiekt, który łączy się z tagiem i zawiera wektor pozycji, a także funkcję rysowania, która zasadniczo wykonuje następujące czynności: this.element.style.left = x + 'px' (i tak samo dla górnych i y) .

Na mojej głównej pętli Zadzwoniłem funkcji rysowania na obiektach i aktualizowane swoje położenie zgodnie z moją logiką gry i ponownie nazywany MainLoop użyciu tego window.requestAnimationFrame Wrapper:

window.requestAnimFrame = (function(){ 
     return window.requestAnimationFrame  || 
       window.webkitRequestAnimationFrame || 
       window.mozRequestAnimationFrame || 
       window.oRequestAnimationFrame  || 
       window.msRequestAnimationFrame  || 
       function(callback){ 
       window.setTimeout(callback, 1000/60); 
       }; 
    })(); 

Potem przystąpił do tworzenia obiektu kamery, aby kontrolować pozycjonowanie ekranu i sprawiał, że z powodzeniem przewijał on tło, korzystając z właściwości css-position. Testowałem to z moim nowym Galaxy S3 iz s2 z pewną grafiką (2 200x200 pngs i tłem) i wszystko przebiegło gładko przy ~ 60 fps. Byłem bardzo zadowolony z wyników i naprawdę podekscytowałem się testowaniem na iPhone 4 iOS 4.x, ale ku mojemu rozczarowaniu działało to na 2-3 FPS! 30 razy wolniej niż mój android. Zacząłem wprowadzać wiele zmian (obecnie używam ekranu o wymiarach 720x1280), więc próbowałem używać 320 * 480, używając zamiast tego płótna, usuwając przewijane tło, zmieniając rozmiar obrazów, ale bez skutku, podczas gdy android działał dobrze we wszystkich odmianach.

Najlepsze było 5 klatek na sekundę. Mam do przetestowania kolejny iPhone, iPhone 4S z iOS5 i bardzo niestabilny FPS. wahał się od 3 do 50, ale nie można go było zagrać - nie ma szans, że ktoś by go zagrał, a nawet nie zacząłem pakować go z zawartością.

Naprawdę chcę skorzystać z cross-platformingu i wstyd byłoby zrezygnować z rynku Apple, więc wszelkie wskazówki lub porady będą ciepło przyjęte!

Dzięki, Gabriel

Odpowiedz

1

Jest to odpowiedź mam na forach appMobi jest, jeśli ktoś ma ten problem:

korzystać bezpośrednio na płótnie

JS/CSS3 wykona straszne na każdym urządzeniu , nieważne co. Przeglądarka zapasów w systemie iOS (Safari) ma włączoną obsługę NitroJS, ale nie jest dostępna w UIWebView ... ale jeśli masz czas, przeczytaj i zobaczysz, że nie możesz napisać gry JS bez stukania w sprzęt Przyspieszenie, takie jak Direct Canvas.

Powiązane problemy