Skocz do zawartości
  • 0
Armez

Rysowanie sprite z surface

Pytanie

Albo jestem jakiś głupi albo ślepy albo oba na raz bo nigdzie nie mogę znaleźć rozwiązania tego. Otóż chcę zrobić sprite z surfac-a jednak wszystko kończy się informacją

not set before reading it.

Jakbym cały czas coś źle wpisywał. Oto kod jaki mam.

if surface_exists(global.surf)
{
surface_set_target(global.surf);
if a=0 {draw_circle_colour(x,y,g/6,global.tt,global.tt,0)};
if a=1 {draw_circle_colour(x,y,g/6,aa,aa,0)};
}
else
{
global.surf = surface_create(225,352);
surface_set_target(global.surf);
if a=0 {draw_circle_colour(x,y,g/6,global.tt,global.tt,0)};
if a=1 {draw_circle_colour(x,y,g/6,aa,aa,0)};
}
sprite70 = sprite_create_from_surface(global.surf, 0, 0, 225, 400, true, true, 112.5, 200);
surface_reset_target();

Surface został zrobiony poprawnie bo wszystkie inne opcje działają.

Proszę o pomoc... najlepiej taką co wytknie mi jakąś oczywistość i pokaże jakim kretynem jestem XD

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

9 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Rysowanie do surface nie wymaga draw. Ale skoro to nie naprawia problemu, podrzuć PELEN błąd, może jest coś czego nie zauważyłeś?

 

Edit:

A walnę INB4 bo czemu nie

INB4 zmienna nie istnieje bo jej nie zdefiniowałeś lub zadeklarowałeś.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Może daj surface_reset_target() przed stworzeniem sprite'a.

To jedyne co mogłoby być nie tak, bo starasz się "dorwać do" surface'a, gdy ten jeszcze jest w trakcie edycji.

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
3 minuty temu, I am vader napisał:

Może daj surface_reset_target() przed stworzeniem sprite'a.

To jedyne co mogłoby być nie tak, bo starasz się "dorwać do" surface'a, gdy ten jeszcze jest w trakcie edycji.

 

Ustawiłem w taki sposób
 

surface_reset_target();
sprite70 = sprite_create_from_surface(global.surf, 0, 0, 225, 400, true, true, 112.5, 200);

I nadal jest ten sam problem :/

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

robisz to w evencie draw, czy jakims innym? i na jakies platformie to uruchamiasz?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Teraz, PsichiX napisał:

robisz to w evencie draw, czy jakims innym? i na jakies platformie to uruchamiasz?

Jest to w evencie draw więc powinno być dobrze.
Odpalam na Widnowsie.

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

jest szansa, ze implementacja gmsowa surfaces nie flushuje komend renderowania po resecie, wiec standardowo skrypty nie zatrzymuja sie az skonczy sie rendering - rozwiazaniem na to jest tworzenie sprajta dopiero w nastepnym draw evencie (ustawiasz sobie lokalnie flage "make_sprite" na true gdy narysujesz do surface i w draw "if make_sprite { make_sprite = false; tworz_sprite_z_surface(); }

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Szczerze w to wątpię zawsze generuje surface'y "w locie" i są responsywne.

Strzelam że zmienna nie istnieje i kod wykrzacza się na 1szej lini(czytaj: mój inb4).

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Ooookej.

I am vader miałeś racje. Tzn. zmienna istniała ale nie wiedzieć czemu nie współpracowała. Wystarczyło zmienić ją na globalną. Dziękuje za pomoc. Dobranoc.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
22 godziny temu, Armez napisał:

Albo jestem jakiś głupi albo ślepy albo oba na raz bo nigdzie nie mogę znaleźć rozwiązania tego. Otóż chcę zrobić sprite z surfac-a jednak wszystko kończy się informacją


not set before reading it.

Jakbym cały czas coś źle wpisywał. Oto kod jaki mam.


if surface_exists(global.surf)
{
surface_set_target(global.surf);
if a=0 {draw_circle_colour(x,y,g/6,global.tt,global.tt,0)};
if a=1 {draw_circle_colour(x,y,g/6,aa,aa,0)};
}
else
{
global.surf = surface_create(225,352);
surface_set_target(global.surf);
if a=0 {draw_circle_colour(x,y,g/6,global.tt,global.tt,0)};
if a=1 {draw_circle_colour(x,y,g/6,aa,aa,0)};
}
sprite70 = sprite_create_from_surface(global.surf, 0, 0, 225, 400, true, true, 112.5, 200);
surface_reset_target();

Surface został zrobiony poprawnie bo wszystkie inne opcje działają.

Proszę o pomoc... najlepiej taką co wytknie mi jakąś oczywistość i pokaże jakim kretynem jestem XD

 

 

@Armez:

 

if (!surface_exists(global.surf)) {
	global.surf = surface_create(225,352);
}

surface_set_target(global.surf);
var _c = (a == 0) ? global.tt : aa;
draw_circle_colour(x,y,g/6,_c,_c,0);
surface_reset_target();

sprite70 = sprite_create_from_surface(global.surf, 0, 0, 225, 400, true, true, 112.5, 200);

Do tego:

1) w GMS surface da się zmieniać tylko w evencie draw
2) jak robisz to co krok, to będziesz mieć milion spritów za chwilę
3) nie musisz tworzyć sprite, możesz bezpośrednio rysować surface na ekranie

4) dlaczego sprite jest większe niż surface ?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

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

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×