Skocz do zawartości

Surface na androidzie


szmalu

Rekomendowane odpowiedzi

Błagam, pomocy, nie mam pojęcia o co chodzi ://///

 

W jednym projekcie w GM:S surface ze światłami śmigają aż miło, nawet na moim starym telefonie i to nawet duży surface (1024x768)

W drugim używam surface bardzo podobnie (nawet rozmiar ten sam) ale wyskakują kosmiczne artefakty na całym ekranie, to co ma się rysować to rysuje się kilka razy i w ogóle nie w tym miejscu co trzeba. I to na każdym urządzeniu - moim telefonie, super samsungu, na tablecie.. Nic nie pomaga

 

CZEMU :((((

Odnośnik do komentarza
Udostępnij na innych stronach

jesli to nie problem GM:S to kod masz zwalony - wal go tu lub na PW, glownie jak operujesz na surfacesach

Odnośnik do komentarza
Udostępnij na innych stronach

Są dwa rodzaje obiektów - kontroler i nieokreślona liczba obiektów które rysują siebie na surface.

 

Create kontrolera:

 

GML
global.surf=surface_create(room_width,room_height);

 

Draw kontrolera:

GML
if !surface_exists(global.surf)

{global.surf=surface_create(room_width,room_height);

surface_set_target(global.surf);

draw_clear_alpha(c_black,0);

surface_reset_target();}

 

draw_surface_ext(global.surf,0,0,2,2,0,c_white,1);

 

Step małego obiektu:

GML
if surface_exists(global.surf)

{

surface_set_target(global.surf);

 

draw_set_blend_mode(bm_add)

draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,image_angle,image_blend,0.5);

draw_set_blend_mode(bm_normal);

surface_reset_target();

}

Odnośnik do komentarza
Udostępnij na innych stronach

primo: nigdy nie tworz surfacesa w create. zamiast tego przypisz mu -1.

secundo: nie sprawdzaj czy surfaces istnieje i nie updatuj go w stepie, ogracznicz sie do drawa z surfacesami.

popraw, sprawdz i zachwyc sie jakie to glupie bylo :)

Odnośnik do komentarza
Udostępnij na innych stronach

@kriso: masz racje, mylisz sie

Odnośnik do komentarza
Udostępnij na innych stronach

GM:S ma zupełnie inne flow renderingu i związanych z nim obiektów. artykuł jest stary

Odnośnik do komentarza
Udostępnij na innych stronach

Co do tego -1 to tego tak domyślnie używam, ale teraz próbuję już wszystkiego, myślałem że może utworzenie surface w create coś pomoże.

 

Czyli mam po prostu w małym obiekcie nie sprawdzać istnienia surface i zmienić event step na draw? Dobrze zrozumiałem?

Odnośnik do komentarza
Udostępnij na innych stronach

musisz jedynie przeniesc teraz kod ze step do draw. prawdopodobnie przed tym, co juz tam w drawie jest. no i w create przypisac -1 zamiast robic create surfacesa, aby zmienna istniala. to powinno zadzialac :)

Odnośnik do komentarza
Udostępnij na innych stronach

Shiieeet, wcześniej już tego próbowałem, ale jestem debilem i nie włączyłem "visible".

 

I w ten sposób zmarnowałem cały dzień, przeszukując wszelkie fora i testując wszystkie opcje.

 

Jezu, jak ja kocham gmclan w tym momencie. Dzięki, YXE :D

Odnośnik do komentarza
Udostępnij na innych stronach

w sprawach renderingu, polecam sie na przyszłość :)

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Nigdy nie rysuj w step w GM:S. Bo nie zadziała. Dlatego, że step i draw mogą być asynchroniczne i może się dziać, że rysujesz już po drawie, a w następnym drawie jeszcze nie jest narysowane...

Odnośnik do komentarza
Udostępnij na innych stronach

Ok, zapamiętam ;) Jeszcze wciąż jestem trochę świeży w GM:S

 

No to jeszcze jedno pytanie w takim razie. Dokumentacja twierdzi, że na Androidzie nie zadziała bm_inv_src_color i faktycznie tak jest.

Czy mogę to czymś zastąpić, żeby uzyskać podobny efekt? Nie znam się kompletnie na blendzie, ten mode wziąłem z jednego przykładu i na windowsie wygląda wyśmienicie.

 

 

Efekt to

GML
draw_set_blend_mode_ext(bm_inv_dest_alpha,bm_inv_src_color);
Odnośnik do komentarza
Udostępnij na innych stronach

nie mam jak przetestowac, ale jesli serio nie ma na to obejscia blendingiem, to shaderkiem prostym na surfacesie da sie to osiagnac

Odnośnik do komentarza
Udostępnij na innych stronach

Dobra, mam. W tym konkretnym wypadku identycznie działa bm_max, który jest gotowym blendem i równy jest (bm_src_alpha, bm_inv_src_color).

Dziwne, że mimo że bm_max składa się z nieobsługiwanego bm_inv_src_color to działa na Anroidzie.

Tak czy siak, jest super :)

Odnośnik do komentarza
Udostępnij na innych stronach

bm_max dotyczy blending equation, nie blending function, jak bm_src/bm_dest

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