Skocz do zawartości

Networking w HTML5 - czy to działa?


DangBean

Rekomendowane odpowiedzi

  • Administratorzy

Ok, wystarczy w sumie zajrzeć do dokumentacji programu:

 

http://docs.yoyogames.com/source/dadiospic...king/index.html

 

NOTE: These functions are not currently available for the HTML5 target module.
Odnośnik do komentarza
Udostępnij na innych stronach

Ok, wystarczy w sumie zajrzeć do dokumentacji programu:

 

http://docs.yoyogames.com/source/dadiospic...king/index.html

 

Wielkie dzięki Gnysek!

Się człowiek namęczy, a tu takie buty.

No i zawsze wszystkim mówię - dokładniej czytać, czytać dokładniej...

Lustro se muszę kupić :mellow: .

 

BTW przydałaby się lista rzeczy, które nie działają w HTML5. Masz problemy w programie => QQ na listę i wiesz.

Z moich (niezbyt bogatych) doswiadczeń to:

- mp_linear_path_object()

- draw_getpixel(x,y); - Opera, IE

- draw_text - na domyślnym foncie w FOXie

- script_get_name() - IE

- draw_roundrect_color()

- obsługa klawiatury z poziomu javasript extensions

- networking

 

Szczególnie bolesne jest to script_get_name, ale obiecali, że kiedyś naprawią.

Może ktoś zna jak obejść niedziałające script_get_name?

Odnośnik do komentarza
Udostępnij na innych stronach

Możesz zawsze zapisać nazwy skryptów w kontenerze tj. "key-value pair", np. ds_map.

Zapisać w kontenerze można, ale najpierw trzeba znać nazwę tego skryptu.

Jesli napiszesz skrypt, który nazwiesz np.

GML
score_error_callback_service()
, to po przekompilowaniu do HTML5 będzie się on nazywał np. _G14x albo _J23 :rolleyes: .

Taką wartość zwróci

GML
script_get_name(score_error_callback_service)
, co pozwala zaimplementować callback z javascript extension do GMLa.

Niestety to nie działa na IE, bo GM używa javascriptowej metody replace, która w Microsofcie musi działać po swojemu, a nie po bożemu (tak sobie troszkę popodglądałem implementację w skompilowanym javascripcie :chris: ).

No i qpa.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Klucz "nazwa_skryptu", a wartość to nazwa_skryptu (bez apostrofów) - w ten sposob dostaniesz stringa i ID i wszystko będzie OK. Tylko zamiast script_get_name użyjesz ds_map_find_value(id_skryptu_lub_nazwa);

Odnośnik do komentarza
Udostępnij na innych stronach

Klucz "nazwa_skryptu", a wartość to nazwa_skryptu (bez apostrofów) - w ten sposob dostaniesz stringa i ID i wszystko będzie OK. Tylko zamiast script_get_name użyjesz ds_map_find_value(id_skryptu_lub_nazwa);

 

Wybacz Gnysek ale albo ja Ciebie nie rozumiem, albo Ty mnie.

W czym ma mi pomóc jesli zrobię np.: script_map[? "callback_script"] = callback_script; ?

Będę miał ds_map, który dla ozdoby będzie sobie w programie.

Z poziomu Javascript extension: iD skryptu jest bezużyteczny, nazwa skryptu taką jaką mam w GML-u też się na nic nie przyda, a i do script_map się nie dostanę.

 

Funkcja javascript API jest asynchroniczna - nie zwraca żadnej użytecznej wartości. Czy nastąpił sukces czy nie - do tego jest potrzebny callback - dlatego parametrami w tym API są nazwy funkcji. Ale jak się przekompiluje GML do HTML5, to nazwa "callback_func" zamienia się w "_d17" albo w jakieś inne "_H7g". Aby callback zadziałał trzeba w parametrze API podać własnie to "_d17" , a nie "callback_func". I do tego właśnie służy script_get_name(). Bo script_get_name zwraca nam właśnie string "_d17".

 

Przykład (trochę uproszczony, ale wszystko wyjaśnia) działający w FF, Chrome i Opera, ale lecący w kosmos na IE:

3 Skrypty w GML-u:

GML
///donate_ok();

show_message("Dziękujemy za podarunek.");

 

///donate_not_ok();

show_message("Dziękujemy, ale nie przyjmujemy Marek NRD.");

 

//odwołanie się z GML-a do javascripta:

jsAPI_donate(script_get_name(donate_ok), script_get_name(donate_not_ok));

 

 

Funkcje interface w Javascript extension (to nie jest GML):

 

  function jsAPI_donate(onSuccess, onFailure){
    //tu wołamy zewnetrzne API - nie wiemy jak ono działa - znamy tylko składnię
    initiateDonateFunction( function () {jsAPI_callBack(onSuccess)}, function () {jsAPI_callBack(onFailure)} );
  }
  //callback to GML    
  function jsAPI_callBack(f_n){
    try{ 
      eval( f_n + "()" ); 
    }
    catch(err){}
  }

 

Tam jeszcze powinno być oczywiście rozpoznawanie czy to nie jest debug_mode, ale dla przejrzystości wywaliłem.

Pytanie - gdzie tu mam wsadzić ową ds_map i w czym ma ona pomóc?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

w tym pliku js:

 

var checked = -1;

function jsAPI_donate(onSuccess, onFailure){
    initiateDonateFunction( function () {jsAPI_callBack(1)}, function () {jsAPI_callBack(0)} );
}

jsAPI_callBack(done) {
   checked = done;
}

gmlCheck() {
    return checked;
}

 

GML w step (oczywiście funckaj gmlCheck oraz jsAPI_callBack musi być zdefiniowana w extension):

 

GML
var check = gmlCheck();

 

if (check > -1) {

if (check = 1) donate_ok() else donate_not_ok();

jsAPI_callBack(-1);

}

 

A żeby cały czas się w step nie wykonywało, można dodać jeszcze jedną zmienną np. czy_sprawdzać i ustawiać na true linijkę przed wywołaniem tego skryptu od API, oraz na false przed ostatnią klamerką w kodzie powyżej i dodać naokoło ifa :)

 

Naokoło, ale da się :)

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki Gnysek!

Niewielu już pamięta jak to drzewiej bywało.

Barżo dobra starożytna metoda. Nazywa się polling. Powinno działać. Może być tylko problem jak ktoś szybko klika na "brzuszek pajacyka".

 

W nocy wymysliłem jeszcze jeden sposób. Ale bardziej desperacki.

W obu gml-owych funkcjach dodaję na początku zmienne:

GML
var tmp="brzydkie słowo ok"; //w pierwszej

var tmp="brzydkie słowo not ok"; //w drugiej</span>

W wywołaniu javascripta piszę po chamsku:

GML
jsAPI_donate("donate_ok", "donate_not_ok");

Kompiluję do HTML5 i otwieram wynik w notepad++.

znajduję "brzydkie słowo" i już wiem jak się nazywają obie funkcje callback.

Znajduję string "donate_ok" i ręcznie podmieniam wynikowy js na obfuscatowane nazwy skryptów.

Tylko to wymaga takiej akcji przy każdej kompilacji.

 

Jestem leniem, wiec Twoja metoda lepsza :rolleyes: .

Z drugiej strony i tak trzeba za kazdym razem ręcznie miętosić ten javascript aby odblokować klawiaturę...

 

Nie mniej poczekam do 06.11 z implementacją. A nuż...

Odnośnik do komentarza
Udostępnij na innych stronach

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ę...