Skocz do zawartości

HTML5 problem po konwersji z gm 8.1


TO_mek

Rekomendowane odpowiedzi

Witam!

Próbuję przekonwertować jedną z moich gier robionych w gm 8.0 do HTML5. Najpierw odpaliłem ją w GM 8.1 i tam bez problemu się uruchomiła więc ją zapisałem jako gm81. Następnie zrobiłem import do HTML5 i niestety w FF 8.0, IE 9.0.x pojawia się czarne okienko loading i to by było na tyle.

Wiem, że niewiele osób korzysta z najnowszego dzieła yoyogames ale może ktoś już co nieco wie na ten temat i spróbuje mi pomóc.

Gra posiada jeden room, kilka obiektów, 4 krótkie dźwięki, jednym słowem pchełka. Zresztą chodzi o to więc jak widać nie zżera wielu zasobów.

Ma ktoś pomysł co może być nie tak?

 

EDIT:

Sprawdziłem, że HTML5 potrafi konwertować od razu z GM 8.0 ale to niczego nie zmienia bo gierka dalej nie działa.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

A czy GM HTML5 odpala to jako exe? Sprawdź. Poza tym, pod klawiszem F9 masz konsolę w przeglądarce. I pamietaj, aby nie odpalac za pomocą file:///, tylko z jakiegoś serwera (GM HTML5 posiada wbudowany prosty serwer i w nim odpala).

Odnośnik do komentarza
Udostępnij na innych stronach

A czy GM HTML5 odpala to jako exe? Sprawdź. Poza tym, pod klawiszem F9 masz konsolę w przeglądarce. I pamietaj, aby nie odpalac za pomocą file:///, tylko z jakiegoś serwera (GM HTML5 posiada wbudowany prosty serwer i w nim odpala).

 

Jako exe działa pod HTML5 bez problemu. Co ma się wyświetlić po naciśnięciu F9? Ani IE9 ani FF8 nie reagują. Próbowałem z poziomu file:/// jak i z serwera.

Odnośnik do komentarza
Udostępnij na innych stronach

Niektóre funkcje potrafią zablokować grę, że w ogóle nie działa. Np dziś zauważyłem, że nie działają DIV'y więc trzeba to omijać. Musisz posprawdzać, stopniowo wyłączając różne bloki kodu co powoduje, że program się nie odpala. Dziś nie odpalał mi się jak miałem mp_grida...

Odnośnik do komentarza
Udostępnij na innych stronach

Niektóre funkcje potrafią zablokować grę, że w ogóle nie działa. Np dziś zauważyłem, że nie działają DIV'y więc trzeba to omijać. Musisz posprawdzać, stopniowo wyłączając różne bloki kodu co powoduje, że program się nie odpala. Dziś nie odpalał mi się jak miałem mp_grida...

 

Z pierwszych testów wynika, że gra zwisa na funkcji która sprawdza czy na dysku istnieje plik z highscore i jak tak to go ładuje do ds_grida a jak nie to tworzy pusty plik. Pytanie czy coś z obsługą plików nie tak czy może jednak ds_xxx robi problem.

Odnośnik do komentarza
Udostępnij na innych stronach

HS on-line jest gdzieś na GM Community .

 

Znalazłem tylko coś takiego do odczytu danych oraz jeszcze coś takiego.

Miałeś któreś z tych rozwiązań na myśli czy jeszcze coś innego?

 

EDIT 1:

 

Co do zapisu danych to poradziłem sobie poprzez JS. Podam jak bo pewnie się jeszcze przyda.

Po pierwsze należy wiedzieć jak dodawać rozszerzenia do GMa - bazowałem na opisie "How to add a Javascript extension" dostępnego pod tym linkiem.

Następnie należy utworzyć swój własny plik z JS (tym razem bazą był artykulik "Using POST method in XMLHTTPRequest(Ajax)" z tej strony).

function send_get(url, params) {
  var http = new XMLHttpRequest();
  http.open("GET", url+"?"+params, true);
  http.onreadystatechange = function() {//Call a function when the state changes.
       if(http.readyState == 4 && http.status == 200) {
            alert(http.responseText);
       }
  }
  http.send(null);
  return http.responseText;
}

function send_post(url, params) {
  var http = new XMLHttpRequest();
  http.open("POST", url, true);
  //Send the proper header information along with the request
  http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  http.setRequestHeader("Content-length", params.length);
  http.setRequestHeader("Connection", "close");
  http.onreadystatechange = function() {//Call a function when the state changes.
       if(http.readyState == 4 && http.status == 200) {
            alert(http.responseText);
       }
  }
  http.send(params);
  return http.responseText;
}

 

Jednak funkcja send_post w takiej formie źle działała na IE9. Poniżej prawidłowa wersja (zmieniony koniec oraz linijka http.open("POST", url, false);):

function send_post(url, params) {
  var http = new XMLHttpRequest();
  http.open("POST", url, false);
  http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  http.setRequestHeader("Content-length", params.length);
  http.setRequestHeader("Connection", "close");
  http.send(params);
  if(http.readyState == 4 && http.status == 200) {
        return http.responseText;
  } else {
        return "Error";
  } 
}

 

I w sumie to już wszystko. Użycie to wywołanie funkcji z poziomu GMa

 

GML
send_get("plik.php",params);

send_post("plik.php",params);

gdzie parametry podać należy w formie

GML
params = "lorem=ipsum&name=binny"; //to wysylac w wywolaniu funkcji</span>

 

Pamiętać należy, że do testowania trzeba wysłać całość na serwer bo przez file:///..... nie będzie działać.

Oczywiście plik.php już musi obsłużyć zapis do pliku co jest już banalne i nie dotyczy bezpośrednio GMa.

 

 

EDIT 2:

Drugi problem był z ds_grid_write i ds_grid_read. Nie mam pojęcia w jakim celu ale ktośtam w yoyo wymyślił, że od wersji html5 zmienia się format danych jakie generuje funkcja write. W związku z tym wszystkie programy używające danych zapisywanych w ten sposób są niekompatybilne gdyż funkcja ds_grid_read nie potrafi odczytać danych wygenerowanych w starszych wersjach GM. Akurat ja w taki sposób przechowuję zarówno pliki z zapisami highscore jak również własne save.

Podsumowując, to same funkcje się nie zmieniły ale generują zupełnie inny ciąg znaków (dla odmiany całkowicie czytelny a nie jak wcześniej ciąg nieczytelny dla laika).

 

 

EDIT 3:

Trzeci problem jaki napotykam to wskaźnik kursora myszy. Gdy zmieniłem go na window_set_cursor( cr_handpoint ); a następnie na cr_default to zamiast standardowej strzałki kursora uzyskiwałem kursor w kształcie pierwszego sprajta zdefiniowanego w resources. Pomogła zamiana cr_default na cr_arrow.

 

 

EDIT 4:

Kolejny problem to brak obsługi zdarzenia "NO MORE LIVES". Korzystając z wbudowanej zmiennej lives można było do tej pory używać eventu no more lives. Obecnie mi to nie działa i musiałem wstawić w miejscu tracenia życia warunek w stylu "jeśli życie = 0 to wykonaj to co do tej pory było w no more lives".

 

 

EDIT 5:

Należy uważać na kolejność wyświetlania obiektów. Do tej pory dla defaultowego depth=0, GM brał kolejność wyświetlania wg tego w jakiej kolejności się definiowało obiekty w resources (albo jakoś podobnie). Teraz działa to trochę inaczej i akurat u mnie pewne sprajty pokazały się nie tak jak powinny (w złej kolejności) więc koniecznie należy używać depth.

 

 

EDIT 6:

Nie działa u mnie przekierowanie do innej strony www. Testowałem an 2 sposoby:

GML
splash_set_main(false);//czyli w osobnym oknie

splash_set_fullscreen(true);//pelny ekran

splash_show_web('http://retrospect.com.pl',-1);

oraz

GML
execute_shell("http://retrospect.com.pl",0);

W obu przypadkach nic się nie dzieje. Na razie nie szukałem jeszcze rozwiązania bo trochę dziś już późno.

 

ROZWIAZANIE:

Działa funkcja JS - można dodać do tego co w edicie nr 1

GML
function open_window(url, winName, attString){

window.open(url, winName, attString);

}

Najprostsze wywołanie:

GML
open_window('http://retrospect.com.pl','','')

Więcej o pozostałych argumentach można przeczytać tu

 

ROZWIĄZANIE DRUGIE:

Jest jednak wbudowana funkcja. W obecnym helpie GMHTML5 nie ma jej na spisie (indeks) ale jak się da poprzez wyszukaj to się pokazuje.

GML
YoYo_OpenURL( url, target, options );

 

 

EDIT 7:

Kolejny bug to działanie ds_grid_set_grid_region(index, source, x1, y1, x2, y2, xpos, ypos). Mając grida z poniższa zawartością:

 

GML
//grid "przyklad"

A 1

B 2

C 3

D 4

E 5

 

po wykonaniu ds_grid_set_grid_region(przyklad, przyklad, 1, 0, 4, 1, 2, 0) na samym sobie (co jest opisane w dokumentacji jako jak najbardziej dozwolone) powinniśmy otrzymać taki grid:

GML
//grid "przyklad"

A 1

B 2

B 2

C 3

D 4

 

a otrzymujemy taki:

 

GML
//grid "przyklad"

A 1

B 2

B 2

B 2

B 2

Wniosek jest taki, że to polecenie zamiast pobrać od razu cały obszar grida do skopiowania i następnie całość wkleić na docelową pozycję działa tak, że pobiera po jednej linii i i kopiuje w docelowe miejsce, następnie sięga po kolejną linię itd. aż do końca z tym, że jak robi to na samej sobie to w efekcie powiela wciąż pierwszą linię (bo krok wcześniej nadpisana została informacja źródłowa). Łatwiej to zauważyć przy większej tabelce i przy kopiowaniu nie o 1 linię w dół a o więcej.

Aby to ominąć należy na chwilę obecną użyć grida pomocniczego.

Odnośnik do komentarza
Udostępnij na innych stronach

Wiem, że odpisuję sam sobie ale może warto by się zastanowić nad rozszerzeniem forum o HTML5 bądź utworzenie przyklejonego wątku dotyczącego HTML5 bo zanim dokonam pełnej konwersji tej mojej minigierki to pewnie jeszcze z 10 EDITÓW się pojawi :)

Być może część błędów wynika z niepełnej implementacji HTML5 w danej przeglądarce (sprawdzam na win XP, na FireFox 8.0)

Odnośnik do komentarza
Udostępnij na innych stronach

Ja tu widzę świetny materiał na artykuł. Co do przekierowania na inną stronę skoro potrafisz odpalać ajaxa to sprawdź czy zadziała window.location="www.gmclan.org"

Jeżeli potrzebujesz testera na innych przeglądarkach to mogę ci pomóc jeśli nie chce ci się instalować.

Odnośnik do komentarza
Udostępnij na innych stronach

Zainstaluj chroma i na nim testuj to będziesz wiedział czy gra nie działa przez niekompatybilność przeglądarki, bo chrom na razie jest do html5 najlepszy, zarówno pod względem szybkości jak i kompatybilności.

 

Co do kompatybilności przeglądarek to:

Safari 5.x wcale mi nie odpala gry (nawet paska ładowania) mimo, że ponoć ma obsługę HTML5

Opera 11.52, Chrome 15.08xx i FireFox 8.xx - działają ok więc wydają się być najbardziej kompatybilne

IE 8.0 nie wspiera HTML5 (czyli win XP)

IE 9.0 niby wszystko działa ALE mam problem z działaniem funkcji AJAX a konkretnie "powrotem do programu". Przykładowo funkcja send_post (patrz EDIT nr 1 we wcześniejszym poście) wywołuje plik PHP który obsługuje zapis HS na dysku serwera po czym w innych przeglądarkach wykonują się kolejne komendy jakie są zawarte w kodzie gry, natomiast IE wykonuje "skok" do PHP i już nie powraca do wykonywania dalszej części kodu. Gra działa dalej z pominięciem kawałka kodu jaki zawiera.

Przykładowo (pseudo kod):

 

Step:

GML
if zycie <0 then {

skrypt_koniec_gry()

kolejnych linii IE nie wykonuje

}

 

skrypt_koniec_gry

GML
show_message("Game Over");

send_post(zapis.php, zmienne_do_zapisu);

show_message("TEJ i każdej następnej linijki już IE nie wyświetli");

 

Czyli występuje jakiś problem z tym, że na IE GM nie otrzymuje informacji, że komenda send_post się wykonała i następuje oczekiwanie. Inne obiekty (np. przyciski) w dalszym ciągu działają normalnie, niestety nawet te które w dalszej części kodu są niszczone.

 

Może sama składnia JS funkcji send_post jest nieprawidłowa i powoduje problemy na IE?

Odnośnik do komentarza
Udostępnij na innych stronach

  • 3 miesiące temu...
Może jest problem z JavaScriptem, to dosc wrażliwy język jeśli chodzi o błędy (nowe linie, średniki, spacje, klamerki nie w tym miejscu)

 

 

Odświeżam wątek po to by potwierdzić. Jednak problem był z JS. Tutaj jest rozwiązanie. Wyedytuję też posta wyżej aby tam też już było prawidłowo.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 rok później...

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...